以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。
如何理解环境变量呢?环境变量就好像程序的全局变量一样。程序中任何地方都可以根据需要去调用或者更改环境变量(一般都是调用),环境变量和全局变量不同之处在于:全局变量的生命周期是在程序的一次运行当中,开始运行时诞生程序结束时死亡,下次运行程序时从头开始;但是环境变量被存储在Flash的另一块专门区域(Flash上有一个环境变量分区),一旦我们在程序中保存了该环境变量,那么下次开机时该环境变量的值将维持上一次更改保存后的值。
环境变量如何参与程序运行呢?环境变量有两份,一份在Flash中,另一份在DDR中。uboot开机时一次性从Flash中读取全部环境变量到DDR中作为环境变量的初始化值,使用过程中都是用DDR中这一份,用户可以用save指令将DDR中的环境变量重新写入Flash中去更新Flash中环境变量。下次开机时又会从Flash中再读一次。
如何表示环境变量呢?在uboot中是用字符串表示的,也就是说uboot是按照字符匹配的方式来区分各个环境变量的,因此使用的时候注意不要打错字。
如何新建、更改或者删除一个环境变量呢?新建或者更改一个环境变量,都是使用“set var value”,删除一个环境变量,使用“”set var”。(如果value很长,用单引号括起来。)
uboot控制台中常见的环境变量如下。
bootdelay,表示自动运行倒数时间
网络设置相关的环境变量
ipaddr是开发板的本地IP地址。
serverip是开发板通过tftp指令去tftp服务器下载东西时,tftp服务器的IP地址。
gatewayip是开发板的本地网关地址。
netmask是子网掩码。
ethaddr是开发板的本地网卡的MAC地址。
bootcmd,表示自动运行的命令
uboot启动后会自动倒数bootdelay秒,如果没有按下回车打断启动,则uboot会自动执行bootcmd这个环境变量所对应的命令集。
bootcmd=movi read kernel 30008000; bootm 30008000,意思是将iNand的kernel分区读取到DDR内存的0x30008000地址处,然后使用bootm启动命令从内存0x30008000处去启动内核。
bootargs,表示uboot传递给kernel的参数
linux内核启动时可以接收uboot传递的启动参数,这些参数的形式与内容是uboot和内核约定好的,linux内核在这些参数的指导下完成启动过程。内核传参非常重要,移植内核的时候,如果忘记给内核传参,或者给内核传递的参数不对,内核就会启动不起来。
bootargs=console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3
- console=ttySAC2,115200 ,表示控制台使用串口2,波特率115200。
- root=/dev/mmcblk0p2 rw,表示根文件系统存放在SD卡端口0处的设备(即iNand)的第2分区,根文件系统是可读可写的。
- init=/linuxrc,表示linux的进程1(即init进程)的路径。
- rootfstype=ext3,表示根文件系统的类型是ext3。