U-Boot 环境变量操作命令
环境变量操作命令
打印环境变量:printenv 新增、修改、删除环境变量:setenv 保存环境变量:saveenv
一般环境变量是存放在外部 flash 中的,uboot 启动的时候会将环境变量从 flash 读取到 DRAM 中。所以使用命令 setenv 修改的是 DRAM中的环境变量值,修改以后要使用 saveenv 命令将修改后的环境变量保存到 flash 中,否则的话uboot 下一次重启会继续使用以前的环境变量值。
example:
setenv bootdelay 4
saveenv
# 有时候我们修改的环境变量值可能会有空格, 比如 bootcmd、 bootargs 等, 这个时候环境变量值就得用单引号括起来
setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw' saveenv
# 新建环境变量和修改是一样的
# 删除环境变量:只要给这个环境变量赋空值即可
setenv author
saveenv
uboot恢复默认环境变量(编译时的环境变量):setenv default -a 这里应该是从flash等存储空间读默认值,所以如果saveenv了,就无法恢复了
或者,直接擦除存储环境变量所在的分区:mtd_debug erase /dev/mtd1 0x180000 0x80000 (uboot 环境变量偏移和大小)
环境变量详解
bootdelay:在uboot启动结束后会出现倒计时,倒计时一到就会自动执行bootcmd,这个倒计时的长短就是由bootdelay环境变量影响的。
bootcmd:uboot启动结束后出现倒计时,倒计时一到就会执行bootcmd,而这个环境变量的内容就决定了uboot接下来要干嘛,例如像:
bootcmd=movi read kernel 30008000; movi read rootfs 30B00000 300000; bootm 30008000
就是将内核镜像,根文件系统读到DDR中去,然后bootm 30008000执行30008000处的代码,也就是启动内核。
bootargs:uboot给内核传参的环境变量,这个传参影响了内核的启动方式,例如:
bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3
- console=ttySAC2,115200:终端控制台使用tty是串口2,波特率为115200
- root=/dev/mmcblk0p2 rw:根文件系统的路径是SD卡的端口0设备(INAND)的第二分区。可读可写
- init=/linuxrc:linux的进程1(init进程)的路径
- rootfstype=ext3:根文件系统的类型是ext3
bootargs=root=/dev/nfs nfsroot=192.168.1.141:/root/x210/rootfs/rootfs ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200
- root=/dev/nfs:就是使用nfs服务器方式挂载根文件系统
- nfsroot=192.168.1.141:/root/x210/rootfs/rootfs:指定根文件系统在哪个服务器上面的哪个路径
- ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off:一个固定的模式,即ip=ip addr:server ip addr:gateway:netmask::which netcard(开发板网卡):off
- init=/linuxrc:linux的进程1(init进程)的路径
- console=ttySAC2,115200:终端控制台使用tty是串口2,波特率为115200
serverip:服务器的IP地址,当设计到tftp、nfs等服务器时需要设置这个地址跟服务器地址一致
ipaddr:该板子自己本身的IP地址
netmask:子网掩码
gatewayip:网关的IP地址
fileaddr:刚下载(传输)得到的文件存储位置的地址。使用类似tftp命令传输文件后,会自动更新fileaddr环境变量
filesize:刚下载(传输)得到的文件大小,使用类似tftp命令传输文件后,会自动更新filesize环境变量
ethaddr:开发板的mac地址
baudrate:当前串口终端的波特率
mtdpart:跟设备树启动内核相关,除了bootargs给内核传参以外还可以设备树传参启动内核
bootargs传递打印等级
使用printenv bootargs
,可以看到bootargs变量的值:console=ttySAC2,115200 root=/dev/mmcblk0p2 rw loglevel=7 init=/linuxrc rootfstype=ext3
此时传递给内核的打印等级是8,内核将会按照打印等级屏蔽一些打印
修改打印等级:
setenv bootargs 'console=ttySAC2,115200 root=/dev/mmcblk0p2 rw loglevel=3 init=/linuxrc rootfstype=ext3'
# quiet:Disable all log messages,相当于loglevel=KERN_WARNING
setenv bootargs 'console=ttySAC2,115200 root=/dev/mmcblk0p2 rw quiet init=/linuxrc rootfstype=ext3'
如果要保存到flash,则继续执行saveenv,或者直接设置完,通过命令引导启动内核。
/* integer equivalents of KERN_<LEVEL> */
#define LOGLEVEL_SCHED -2 /* Deferred messages from sched code are set to this special level */
#define LOGLEVEL_DEFAULT -1 /* default (or last) loglevel */
#define LOGLEVEL_EMERG 0 /* system is unusable */
#define LOGLEVEL_ALERT 1 /* action must be taken immediately */
#define LOGLEVEL_CRIT 2 /* critical conditions */
#define LOGLEVEL_ERR 3 /* error conditions */
#define LOGLEVEL_WARNING 4 /* warning conditions */
#define LOGLEVEL_NOTICE 5 /* normal but significant condition */
#define LOGLEVEL_INFO 6 /* informational */
#define LOGLEVEL_DEBUG 7 /* debug-level messages */
内核代码里,小于loglevel的打印,将会被打印到console