编译 envtools
, 获取 fw_printenv
工具
make envtools # 有的也可能是 make env
# 生成的 fw_printenv 工具在 /tools/env 目录中。然后复制到rootfs 中的 bin 目录下,这样 linux 就可以使用 fw_printenv 工具了。
# 默认是没有 fw_setenv 工具的,所以需要软连接 fw_printenv 到 fw_setenv
# 命令:
# ln -sf fw_printenv ${OUT_ROOTFS_DIR}/bin/fw_setenv
把文件 fw_printenv
和 fw_setenv
复制到 rootfs
中的bin
目录下 后,还需要在 etc
目录下配置 fw_env.config
文件。
fw_env.config
文件内容参考 uboot
目录下的 tools/env/fw_env.config
文件.
不确定 device name
可以使用cat /proc/mtd
查看环境变量所在的分区
Device offset
的地址是 mtd
分区内的偏移,不是整个 flash
的偏移,配置中的CONFIG_ENV_OFFSET
是相对整个flash
中的偏移,要转换为在当前分区的偏移。
Env.size
大小可以查看配置文件中的 CONFIG_ENV_SIZE
如果没配置好 fw_env.config
, 会出现如下各种报错
- Cannot read bad block mark: Invalid argument
- Warning: Bad CRC, using default environment
- Too few good blocks within range
fw_printenv
可以查看,fw_setenv
设置不了
fw_printenv
和 fw_setenv
使用
fw_printenv "变量名"
# 可以无引号
fw_setenv "变量名" "值"
# 变量名和值之间没有等于号
fw_setenv "变量名"
# 如果之前存在这个这个变量,就会删除这个变量
在 uboot
中对应的是 printenv
和 setenv
命令,使用完setenv
后要saveenv
保存变量到flash
,否则重启就失效了。
fw_printenv
和 fw_setenv
工具在 pc
上也是可以使用的。不过默认路径要改一下。生成env.bin
要烧录到板子对应的地址上
AX520C
中fw_printenv
移植
nor flash
使用的文件系统类型为 squashfs
# nor flash 的分区:
0x000000000000-0x000000010000 : "mboot"
0x000000010000-0x000000060000 : "uboot"
0x000000060000-0x000000070000 : "env"
0x000000070000-0x000000080000 : "dts"
0x000000080000-0x000000380000 : "kernel"
0x000000380000-0x000001000000 : "rootfs"
# 修改分区可以到kernel目录arch/arm/boot/dts/ax520_snor_db.dts中修改
# nor flash 中的fw_env.config,因为env的分区名是/dev/mtd2,偏移是分区内的偏移,所以是0x0000
echo "/dev/mtd2 0x0000 0x00002000 0x10000" > ${OUT_ROOTFS_DIR}/etc/fw_env.config
nand flash
使用的文件系统类型为ubifs
# nand flash 的分区:
0x000000000000-0x000000100000 : "mboot"
0x000000100000-0x000000200000 : "uboot"
0x000000200000-0x000000300000 : "dts"
0x000000300000-0x000001700000 : "kernel"
0x000001700000-0x000007e00000 : "rootfs"
0x000007e00000-0x000010000000 : "others"
# 环境变量所在的 flash 中位置在 /dev/mtd1 中,偏移是0x000C0000
echo "/dev/mtd1 0x000C0000 0x00002000 0x20000 2" > ${OUT_ROOTFS_DIR}/etc/fw_env.config