uboot启动内核和根文件系统:通过dhcp设置bootcmd和bootargs来自动获取ip地址
一.问题描述:
首先我提前给ipaddr环境变量赋值为主机同一网段的任意一个ip(就是根据自己的意愿随便挑了一个ip地址):192.168.0.
然后昨天我是这样设置bootcmd和bootargs的:
bootcmd = tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000
bootargs = console=ttySTM0,115200 root=/dev/nfs nfsroot=192.168.0.10:/home/leejieun/mp157/nfs/rootfs,proto=tcp,nfsvers=3 rw ip=192.168.0.8:192.168.0.10:192.168.0.1:255.255.255.0::eth0:of
这样搞,昨天一切正常,内核和跟文件系统都可以正常启动,但是到了今早上,发现uboot阶段一直ping不通服务器,bootcmd当然也无法成功使用tftp服务加载在服务器的内核和设备树镜像。然后就很蒙,细想一下,之前我好像也碰到过这种情况,我是这样解决的:
先别通过网络启动内核,而是通过开发板出场时在emmc烧写好的镜像启动内核(这种启动方式参考内核启动的几种常用方式),成功启动内核之后,调用ifconfig命令查看ip地址为192.168.0.5.此时重启进入uboot,将ipaddr改成192.168.0.5然后成功通过网络启动了
但是这样治标不治本!为什么昨天的ipaddr不行?这个我也不太清楚,可能昨天那个ip地址路由器是可用的,但是今天就不行了。那总不能每一天都这么麻烦,要先通过出场系统确定哪一个ip地址可用吧?所以解决办法就是通过dhcp命令自动获取可以用的ip地址。将bootcmd和bootargs命令分别改为如下:
bootcmd=dhcp;tftp c2000000 uImage;tftp c4000000 stm32mp157d-atk.dtb;bootm c2000000 - c4000000
bootargs=bootargs=console=ttySTM0,115200 root=/dev/nfs nfsroot=192.168.0.10:/home/leejieun/mp157/nfs/rootfs,proto=tcp,nfsvers=3 rw ip=dhcp
这样就可以自动获取开发板可以用的ip地址了,问题得以从根本上解决