AM335x Uboot 命令解析

有段时间没有动这个小盒子了, 为了避免忘记的尴尬,还是记录一下。

用 USB 转 串口的转换线, 把小盒子上 9pin 的引出线连接到 USB 上, putty 认为是 COM4,直接连接到 COM4,就可以看到 console 了。

按任意键可以进入 U-Boot 界面。 输入 env print 就可以看到所有的环境变量了。

首先要看的是 bootcmd 变量:
bootcmd=dcache on;icache on;run netboot

所以,我们知道, boot 执行的是netboot 这个变量指定的内容
然后我们来看 netboot 的值:
netboot=echo Booting from network …; tftp ${loadaddr} ${bootfile}; run netargs; bootm ${loadaddr}

所以,里面用了loadaddr , bootfile 这两个变量, 另外调用了 netargs 这个环境里的值。
loadaddr=0x80200000
bootfile=V6/uImage

我们再看下 netargs 的内容:
netargs=setenv bootargs console=${console} dispmode=${dispmode} root=/dev/nfs nfsroot=${serverip}:${rootpath},nolock,nfsvers=3 ip=dhcp


console=ttyO0,115200n8
dispmode=7inch_LCD
serverip=192.168.7.230
rootpath=/opt/NFSroot/rootfs

这样一看就一目了然,说明内核映像通过 tftp 得到,只要在局域网内设置一个 tftp 服务器(Boot Server),盒子会自动寻找 /tftp 下的 V6 目录下的 uImage 文件,加载内核映像。然后通过 NFS 查找 操作系统的根文件系统

下面介绍下 U-Boot 从 MMC (TF 卡)启动的命令:

前面讲的是 netboot 引导盒子,我们如果要从 TF 卡引导,只要把 bootcmd 里的 run netboot 修改为 run mmcboot 即可。
mmcboot=echo Booting from mmc …; run mmcargs; bootm ${kloadaddr}
不过,我们使用修改过的 yjboot:

yjboot=echo Young-Jack IoT Gateway booting …; run mmcargs; nand read ${loadaddr} ${nandsrcaddr} ${nandimgsize}; bootm ${loadaddr}

mmcargs=setenv bootargs console=${console} dispmode=${dispmode} root=${mmcroot} rootfstype=${mmcrootfstype} ip=none

mmcroot=/dev/mmcblk0p1 rw
mmcrootfstype=ext3 rootwait

我们也可以从 NAND 启动

nandboot=echo Booting from nand …; run nandargs; nand read ${loadaddr} ${nandsrcaddr} ${nandimgsize}; bootm ${loadaddr}

nandsrcaddr=0x280000
nandimgsize=0x500000

nandargs=setenv bootargs console=${console} dispmode=${dispmode} root=${nandroot} rootfstype=${nandrootfstype}

nandroot=ubi0:rootfs rw ubi.mtd=7,2048
nandrootfstype=ubifs rootwait=1

走 tftp 的时候会默认查看 serverip 这个变量, 我们设定新的
U-Boot# env set serverip 192.168.7.6
U-Boot# saveenv

然后U-Boot# 下敲入 tftp,就会自动向 tftp 服务器发送请求,读取 ${bootfile}

中间有个搞笑的环节是,一直和 tftp 服务器通信失败,后来发现是盒子有两个网口,插错地方了。 🙁
Ubuntu 1904 上安装 tftp server,非常方便, 就直接 apt install tftpd-hpa xinetd 既可以。 然后 systemctl enable/start tftpd-hpa/xinetd , 然后修改 /etc/default/tftpd-hpa 文件,修改自己需要的 tftp server 的路径,重启 tftpd-hpa 服务。

作者: 甬洁网络

--移动互联网&物联网技术提供商