8. uboot 环境变量

本文内容来自对 《朱有鹏嵌入式linux核心课程》学习总结

1. 环境变量如何参与程序运行

  • 环境变量有 2 份,一份在 Flash 中,另一份在 DDR 中。uboot 开机时一次性从 Flash 中读取全部环境变量到 DDR 中作为环境变量的初始化值,然后使用过程中都是 DDR 中这一份,用户可以用 saveenv 指令将 DDR 中的环境变量重新写入 Flash 中去更新 Flash 中环境变量。下次开机时又会从 Flash 中再读一次。
  • 环境变量在 uboot 中是用字符串表示的,也就是说 uboot 是按照字符匹配的方式来区分各个环境变量的。因此用的时候一定要注意不要打错字了。

2. 自动运行倒数时间:bootdelay

3. 网络设置:ipaddr serverip

  • ipaddr 是开发板中的本地 IP 地址
  • serverip 是开发板通过 tftp 指令去 tftp 服务器下载东西时,tftp 服务器的 IP 地址。
  • gatewayip 是开发板的本地网关地址
  • netmask 是子网掩码
  • ethaddr 是开发板的本地网卡的 MAC 地址

4. 自动运行命令设置:bootcmd

  • uboot 启动后会开机自动倒数 bootdelay 秒,如果没有人按下回车打断启动,则 uboot 会自动执行启动命令来启动内核。
  • uboot 开机自动启动时实际就是在内部执行了 bootcmd 这个环境变量的值所对应的命令集。
  • bootcmd=movi read kernel 30008000; bootm 30008000
    意思是:将 iNand 的 kernel 分区读取到 DDR 内存的 0x30008000 地址处,然后使用 bootm 启动命令从内存 0x30008000 处去启动内核。
  • set bootcmd printenv,然后 saveenv;然后重启则会看到启动倒数后自动执行 printenv 命令打印出环境变量。这个小实验说明开机自动执行了 bootcmd
  • set bootcmd 'movi read kernel 30008000; bootm 30008000'

5. uboot 给 kernel 传参:bootargs

  • linux 内核启动时可以接收 uboot 给他传递的启动参数,这些启动参数是 uboot 和内核约定好的形式,内容,linux 内核在这些启动参数的指导下完成启动过程。这样的设计是为了灵活,为了内核在不重新编译的情况下可以用不同的方式启动。

  • 我们要做的事情就是:在 uboot 的环境蛮事设置 bootargs ,然后 bootm 命令启动内核时会自动将 bootargs 传给内核。

  • 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

  • 内核传参非常重要。在内核移植的时候,新手经常因为忘记给内核传参,或者给内核传递的参数不对,造成内核启动不起来。

6. 新建,更改,删除一个环境变量的方法

  • 新建一个环境变量,使用 set var value
  • 更改一个环境变量,使用 set var value
  • 删除一个环境变量,使用 set var

注意:环境变量更改后的保存
  • 修改完成环境变量后一定要保存,否则下次开机更改就又没了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzg2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值