这里以SKW92A为例进行说明,原厂SDK打包固件,启动后,固件只有一个kernel分区,数据再掉电后无法保存。一般通过nvram_set去存储键值对数据,通过nvram_get获取数据。如:获取WIFI热点名,修改WIFI热点名,操作如下。
# nvram_get 2860 SSID1
SKYLAB_30EB1F3F965E
#
# nvram_set 2860 SSID1 hello
#
# nvram_get 2860 SSID1
hello
#
这种方式简单好用,但是再存储日志等文件时,有较大弊端。下面介绍通过划分分区,将分区设置为可读写,然后映射到文件夹下。
1.划分分区
此处我们划分1Mbyte的RootFS分区用于保存数据,后面的4Mbyte用于Back固件。
0x000000000000-0x000000030000 : "Bootloader"
0x000000030000-0x000000040000 : "Config"
0x000000040000-0x000000050000 : "Factory"
0x000000050000-0x000000b00000 : "Kernel"
0x000000b00000-0x000000c00000 : "RootFS"
0x000000c00000-0x000001000000 : 备份固件
关于Kernel分区
关于RootFS分区:【1MByte---》0x100000】大小根据需求改
格式化RootFS分区为jffs2:
内核部分需要支持JFFS2
工具:
格式化指令:
mtd_write erase RootFS
mkdir -p /rootfs
mkfs.jffs2 -s 0x1000 -e 0x10000 -d /rootfs -o rootfs.jffs2 -p 0x100000
mtd_write -o 0 -l 0x100000 write /rootfs.jffs2 RootFS
挂在分区到/flash:
mkdir -p /flash/
mount -t jffs2 /dev/mtdblock5 /flash/