初始症状描述
网线连接情况如下:

按下面的命令设置u-boot:
01-运行下面的命令指定设备树文件的名字:
setenv fdt_file imx6ull-14x14-evk.dtb

注意:不需要设置内核镜像的名字,因为u-boot知道内核镜像的名字为zImage
02-运行下面的命令关闭自动配置 IP:
即不需要之前在博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/145662136 看到的BOOTP协议(即DHCP协议)去自动获得IP,其实这里也没有DHCP服务器,你想用也不用了。
setenv ip_dyn no

03-运行下面的命令设置TFTP和NFS的服务器地址(在这里就是Ubuntu系统的地址):
setenv serverip 192.168.5.11

04-运行下面的命令设置开发板的IP地址:
setenv ipaddr 192.168.5.9

05-运行下面的命令设置NFS网络文件系统的目录:
setenv nfsroot /home/book/mybuild/nfs_linux_rootfs

命令汇总如下:
setenv fdt_file imx6ull-14x14-evk.dtb
setenv ip_dyn no
setenv serverip 192.168.5.11
setenv ipaddr 192.168.5.9
setenv nfsroot /home/book/mybuild/nfs_linux_rootfs
然后运行下面的命令从网络启动Linux系统了:
run netboot
发现能通过TFTP把内核和设备树文件下载到内存中,但是在内核的启动过程中,卡在下面这里:
[ 80.421313] IP-Config: Retrying forever (NFS root)...
[ 80.527467] SMSC LAN8710/LAN8720 20b4000.ethernet-1:01: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=20b4000.ethernet-1:01, irq=POLL)
[ 80.647347] SMSC LAN8710/LAN8720 20b4000.ethernet-1:00: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=20b4000.ethernet-1:00, irq=POLL)
[ 82.647600] fec 20b4000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
[ 82.667322] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 82.696965] Sending DHCP requests ......
[ 125.927255] imx-sdma 20ec000.sdma: external firmware not found, using ROM firmware
[ 155.796796] timed out!
[ 155.811068] IP-Config: Retrying forever (NFS root)...
[ 155.917329] SMSC LAN8710/LAN8720 20b4000.ethernet-1:01: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=20b4000.ethernet-1:01, irq=POLL)
[ 156.037354] SMSC LAN8710/LAN8720 20b4000.ethernet-1:00: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=20b4000.ethernet-1:00, irq=POLL)
[ 158.007635] fec 20b4000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
[ 158.026868] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 158.056900] Sending DHCP requests .....
[ 213.216793] . timed out!
[ 243.231282] IP-Config: Retrying forever (NFS root)...
......
......
......
[ 7384.209601] IP-Config: Retrying forever (NFS root)...
[ 7384.317180] SMSC LAN8710/LAN8720 20b4000.ethernet-1:01: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=20b4000.ethernet-1:01, irq=POLL)
[ 7384.437248] SMSC LAN8710/LAN8720 20b4000.ethernet-1:00: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=20b4000.ethernet-1:00, irq=POLL)
[ 7386.407606] fec 20b4000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
[ 7386.427294] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 7386.456932] Sending DHCP requests ...... timed out!

初始症状的关键日志分析
从Linux内核的启动日志来看,不断在重复尝试配置IP,日志重复输出的一个周期提取如下:
[ 7384.209601] IP-Config: Retrying forever (NFS root)...
[ 7384.317180] SMSC LAN8710/LAN8720 20b4000.ethernet-1:01: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=20b4000.ethernet-1:01, irq=POLL)
[ 7384.437248] SMSC LAN8710/LAN8720 20b4000.ethernet-1:00: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=20b4000.ethernet-1:00, irq=POLL)
[ 7386.407606] fec 20b4000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
[ 7386.427294] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 7386.456932] Sending DHCP requests ...... timed out!
这段日志显示了Linux内核在启动过程中通过网络配置IP并尝试通过DHCP获取IP地址时的过程。下面是每一句的详细解释:
先说明一下:前面中括号中的数字是指日志的时间戳,单位是秒,表示系统启动开始经过了多少秒。
-
[ 7384.209601] IP-Config: Retrying forever (NFS root)...- 这条信息表明内核正在尝试通过DHCP获取网络配置,获取网络配置的目的是挂载NFS根文件系统。由于没有成功获取到IP地址,内核会不断重试。
-
[ 7384.317180] SMSC LAN8710/LAN8720 20b4000.ethernet-1:01: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=20b4000.ethernet-1:01, irq=POLL)- 这里是网络适配器的驱动加载信息。
SMSC LAN8710/LAN8720是网络芯片型号,20b4000.ethernet-1:01是该网络设备的标识。该信息表明PHY(物理层)驱动已成功加载,并且正在使用mii_bus进行通信。irq=POLL表示中断被设置为轮询模式,而不是硬件触发。
- 这里是网络适配器的驱动加载信息。
-
[ 7384.437248] SMSC LAN8710/LAN8720 20b4000.ethernet-1:00: attached PHY driver [SMSC LAN8710/LAN8720] (mii_bus:phy_addr=20b4000.ethernet-1:00, irq=POLL)- 这条信息与上一条类似,表示第二个PHY驱动也成功加载。
20b4000.ethernet-1:00是另一个网络接口的标识。
- 这条信息与上一条类似,表示第二个PHY驱动也成功加载。
-
[ 7386.407606] fec 20b4000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx- 这条信息表示网络接口
eth0(通常是指第一个以太网接口)的链路已成功建立,并且网络连接的速率为100Mbps,且支持全双工通信(Full)。flow control rx/tx表示接收和发送都启用了流量控制。通过插拔网线,可以发现开发板上的网口2对应网络接口eth0,而网口1对应网络接口eth1。在下图中,第1条划线红线的日志输出是当我从网口2上拔下网线时的日志输出,第2线划红线的日志输出是当我把网线插上网口1时的输出。至于哪个是网口2、哪个是网口1,请参考我的另一篇博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/144409013

- 这条信息表示网络接口
-
[ 7386.427294] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready- 这条信息是IPv6协议栈的日志,表明
eth0网络接口已经准备好,可以开始使用IPv6地址。ADDRCONF(NETDEV_CHANGE)是内核用于更新网络设备地址配置的消息。
- 这条信息是IPv6协议栈的日志,表明
-
[ 7386.456932] Sending DHCP requests ...... timed out!- 这条信息表明内核尝试通过DHCP协议发送请求以获取IP地址,但超时了,未能成功获取IP地址。通常这是因为DHCP服务器不可用、网络连接问题或DHCP请求配置错误。这是显然不能成功的嘛,为我的开发板的网口2是与USB网口直接相连的,这其中并不存在DHCP服务,所以是无法自动获取到IP地址的。除非把开发板和USB网卡都连上同一个路由器的不同的LAN口,并启用路由器的DHCP服务才行。
小结
从这段日志看,网络接口已经成功启动并且建立了链路,但DHCP请求未能得到响应(超时)。内核不断重试获取IP地址,目的是为挂载NFS根文件系统做准备。你可能需要检查DHCP服务器的配置、网络连接状态以及任何可能影响DHCP通信的防火墙或网络问题。
思路与方向分析
首先用1号开发板确认除了目录/home/book/nfs_rootfs/,还能不能用别的目录作为NFS的挂载目录。
经测试:可以别的目录作为NFS的挂载目录,详情见本博文中下面的内容。
然后,我又用1号开发板测试证明USB网卡和开发板的网口2通过路由器的LNA连接时,也是可以完全正常挂别NFS目录的。
既然这样,那
然后再按下面的思路去慢慢解决:
①让开发板和USB网卡都连上同一个路由器的不同的LAN口,设置好路由器的LAN口地址(即设置好路由器的网段)和自动分配的IP地址的范围(避免与USB网卡的IP冲突),并启用路由器的DHCP服务,这样就能让开发板自动获取到IP地址,但因为手动设置的USB网卡的IP地址不在自动分配的IP地址范围内,所以开发板自动获取的IP地址不会与USB网卡冲突。
②修改内核的配置,使内核在配置网络时不使用DHCP来配置,而用手动指定的方式来进行。
③利用u-boot的环境变量bootargs来控制内核的NFS挂载配置。
④可以先用没问题的Linux-4.9.88跑通再说。
通过1号开发板确认是否可以设置别的目录为NFS目录
我们现在要测试除了目录/home/book/nfs_rootfs/,还能不能用别的目录作为NFS的挂载目录。
我们要挂载的目录为 /home/book/mybuild/nfs_linux_rootfs

为了后面不必要的麻烦,先把这个目录的权限设为777。
sudo chmod 777 /home/book/mybuild/nfs_linux_rootfs


打开串口终端→启动1号开发板,然后运行下面的命令挂载网络文件系统:
mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/mybuild/nfs_linux_rootfs /mnt

好像是挂载成功了,测试一下:

能读到文件,没有问题。然后复制一个ELF可执行文件进去测试一下:


以上,证明在挂载NFS文件系统时,除了目录/home/book/nfs_rootfs/,还可以挂载别的目录,不过为了不必要的麻烦,请把目录的权限设为777。
通过1号开发板测试USB网卡和开发板网卡都连接到路由器的LAN口能不能挂载NFS文件系统
这里,我们需要测试一下,如果把USB网卡和开发板的网口2都通过路由器的LAN口连接能不能挂载NFS文件系统。
关于路由器的设置和配置,见我的另一篇博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/145899568
连接实物图如下:


我们要挂载的目录为 /home/book/mybuild/nfs_linux_rootfs

为了后面不必要的麻烦,先把这个目录的权限设为777。
sudo chmod 777 /home/book/mybuild/nfs_linux_rootfs


打开串口终端→启动1号开发板,然后运行下面的命令挂载网络文件系统:
mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/mybuild/nfs_linux_rootfs /mnt

好像是挂载成功了,测试一下:

能读到文件,没有问题。然后复制一个ELF可执行文件进去测试一下:


顺便再测试一下能不能写入或删除文件
再测试一下能不能写入文件,运行下面的命令:
cd /mnt
vi kkk.txt
然后随便写入点内容,保存。

再去Ubuntu中的目录中去看下有没有这个文件:

可见有了:

只是上面有把锁的标志,那有可能是没有修改或删除的权限:
我们首先修改下内容,看能不能修改:


可见也是能修改的。
然后运行下面的命令删除下文件kkk.txt,看行不行:
rm kkk.txt


可见,也是可以删除的。所以被挂载目录的权限是没有问题的。
以上,证明USB网卡和开发板的网口2通过路由器的LNA连接时,也是可以完全正常挂别NFS目录的,并且写入、删除的权限也都是有的。
u-boot传给内核的启动参数bootargs是何时起作用的?
现在我需要去仔细学习下u-boot传给内核的启动参数bootargs的相关知识,这应该是一个关键突存口,学习记录见:
https://blog.youkuaiyun.com/wenhao_ir/article/details/145901614
在学习参数bootargs的过程中,我感觉到有必要去用命令printenv打印输出下u-boot的环境变量,然后去把所有的环境变量了解下,于是我就去做了,相关记录见博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/145902134
通过这个过程,我基本了解了u-boot启动内核的机制,也明白了如果我直接去设置环境变量bootargs,那么设置是无效的,具体的原因请见博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/145902134 【搜索关键词“而不是直接去修改环境变量”】
通过路由器连接USB网卡和开发板后再次测试
本博文前面已经测试了,通过路由器连接USB网卡和开发板是可以挂载网络文件系统的。
而通过对u-boot的所有环境变量的学习,我也知道了u-boot启动内核的大概机制,并且知道了下面这条些命令是怎么来的(为什么要设置下面这些环境变量):
setenv fdt_file imx6ull-14x14-evk.dtb
setenv ip_dyn no
setenv serverip 192.168.5.11
setenv ipaddr 192.168.5.9
setenv nfsroot /home/book/mybuild/nfs_linux_rootfs
上面这些命令的来历和需要设置的原因见博文:
https://blog.youkuaiyun.com/wenhao_ir/article/details/145902134
由于通过下面这个环境变量我明确知道了u-boot通过网络形式启动内核时,默认配置的是DHCP方式进行网络配置:
netargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
也知道了为什么通过设置环境变量serverip和nfsroot就能让u-boot去挂载网络文件系统。
注意:环境变量serverip还作为了TFTP的服务器地址,如果想让两个IP分开设置,可参见博文https://blog.youkuaiyun.com/wenhao_ir/article/details/145902134【搜索关键词“当然你也可以把环境变量”】
所以我们现在就不妨把USB网卡和开发板的网口2都连接到路由器的LAN口,并启用路由器的DHCP功能去试一下。
连接实物图如下:


路由器的设置见博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/145899568
运行下面的命令设置u-boot的环境变量:
setenv fdt_file imx6ull-14x14-evk.dtb
setenv ip_dyn no
setenv serverip 192.168.5.11
setenv ipaddr 192.168.5.9
setenv nfsroot /home/book/mybuild/nfs_linux_rootfs
然后运行下面的命令以网络方式加载内核的设备树和镜像文件,并启动Linux内核:
run netboot

结果是内核通过 NFS 挂载了根文件系统,但是日志中显示了多个与挂载相关的错误信息,相关日志信息整理提取如下:
表示内核成功通过 NFS 挂载了根文件系统的日志如下:
[ 5.367695] fec 20b4000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
[ 5.387395] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 5.417004] Sending DHCP requests ., OK
[ 5.941483] IP-Config: Got DHCP answer from 192.168.5.1, my address is 192.168.5.100
[ 5.949900] IP-Config: Complete:
[ 5.953172] device=eth0, hwaddr=00:01:3f:2d:3e:4d, ipaddr=192.168.5.100, mask=255.255.255.0, gw=192.168.5.1
[ 5.963667] host=192.168.5.100, domain=, nis-domain=(none)
[ 5.969858] bootserver=0.0.0.0, rootserver=192.168.5.11, rootpath=, mtu=576
[ 5.969882] nameserver0=192.168.5.1
[ 5.984128] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[ 5.995873] cfg80211: Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[ 6.002921] platform regulatory.0: Direct firmware load for regulatory.db failed with error -2
[ 6.012065] ALSA device list:
[ 6.015064] #0: wm8960-audio
[ 6.018290] platform regulatory.0: Falling back to sysfs fallback for: regulatory.db
[ 6.072495] VFS: Mounted root (nfs filesystem) readonly on device 0:15.
[ 6.085760] devtmpfs: mounted
[ 6.092067] Freeing unused kernel memory: 1024K

其中语句:
[ 6.072495] VFS: Mounted root (nfs filesystem) readonly on device 0:15.
表明:根文件系统(/)是通过 NFS 挂载的,且挂载方式为只读(readonly)。
后续的错误提取如下:


[FAILED] Failed to mount POSIX Message Queue File System.
[FAILED] Failed to mount Kernel Debug File System.
[FAILED] Failed to mount Temporary Directory (/tmp).
[FAILED] Failed to start Remount Root and Kernel File Systems.
[FAILED] Failed to mount /var/volatile.
[FAILED] Failed to mount FUSE Control File System.
[FAILED] Failed to mount Kernel Configuration File System.
[FAILED] Failed to start Run pending postinsts.
容易注意到:
/var/volatile、/tmp、/sys 等都是挂载好根文件系统之后内核创建出的目录,但之前的日志输出语句:
[ 6.072495] VFS: Mounted root (nfs filesystem) readonly on device 0:15.
表示挂载方式为只读方式。
所以我们需要修改NFS的挂载方式为可读可写,怎么修改呢?
修改NFS挂载方式为可读可写并再次测试
之前在博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/145902134 中,对u-boot的所有环境变量进行了认真学习,所以知道:
在u-boot中,与NFS挂载相关的全局变量如下:
netargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
所以我们可以通过修改环境变量netargs的内容来达到我们的效果,问了人工智能,说是可以像下面这样修改netargs实现可读可写挂载:
netargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs rw ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
具体的修改命令为:
setenv netargs 'setenv bootargs console=${console},${baudrate} root=/dev/nfs rw ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp'
所以接下来的u-boot配置命令应该是下面这些:
setenv fdt_file imx6ull-14x14-evk.dtb
setenv ip_dyn no
setenv netargs 'setenv bootargs console=${console},${baudrate} root=/dev/nfs rw ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp'
setenv serverip 192.168.5.11
setenv ipaddr 192.168.5.9
setenv nfsroot /home/book/mybuild/nfs_linux_rootfs

可以运行下面的命令来看下对环境变量netargs的设置是否正确了:
printenv

可见修改是成功了。
然后运行下面的命令以网络方式加载内核的设备树和镜像文件,并启动Linux内核:
run netboot
很遗憾,仍然是上次的错误:
[FAILED] Failed to mount POSIX Message Queue File System.
[FAILED] Failed to mount Kernel Debug File System.
[FAILED] Failed to mount Temporary Directory (/tmp).
[FAILED] Failed to mount FUSE Control File System.
[FAILED] Failed to mount Kernel Configuration File System.
[FAILED] Failed to start Remount Root and Kernel File Systems.
[FAILED] Failed to mount /var/volatile.
不过这次的错误相比之前的少了1个,上次是8个,这次是7个,比之前少的是:
[FAILED] Failed to start Run pending postinsts.
并且显示屏也有显示了…之前显示屏是没有显示的:

octo 项目使用了 OpenEmbedded 的技术框架,所以会出现这样的画面。
说明修改还是有用的,挂载的确是要以可读可写的形式来执行。
修改Ubuntu中的NFS挂载目录的子目录的权限也为777后再测试,OK了
不过问题仍然没有完全解决,我思前想后,觉得还是应该是目录权限的问题,因为只是几个需要写的目录不能正确挂载…
于是我查看了下目录proc的权限,发现居然不是777:

这说明我之前用下面这条命令设置目录的权限是不对:
sudo chmod 777 /home/book/mybuild/nfs_linux_rootfs
正确的应该用下面这条命令:
sudo chmod -R 777 /home/book/mybuild/nfs_linux_rootfs
这样改完之后我们再测试一下。
setenv fdt_file imx6ull-14x14-evk.dtb
setenv ip_dyn no
setenv netargs 'setenv bootargs console=${console},${baudrate} root=/dev/nfs rw ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp'
setenv serverip 192.168.5.11
setenv ipaddr 192.168.5.9
setenv nfsroot /home/book/mybuild/nfs_linux_rootfs
run netboot
然后就OK了…

虽然还有两个别的错误,但不是致命错误,可以暂不用管,这两个别的错误详情如下:

我仔细看了下,虽然有很多报错其实就是以下两个错误:
[FAILED] Failed to start Network Time Synchronization.
[FAILED] Failed to start Login Service.
备注:后来通过eMMC启动系统时这两个错误都没有了,为什么没有的原因我分析在对这两个问题的解释后面。
第1个错误是因为我的路由器没有连接到互联网,所以时间同步不了造成的。
第2个错误是说 systemd-logind 服务启动失败,systemd-logind 服务主要用于多用户环境下的会话和登录管理。如果你的系统只允许 root 登录,或者你暂时没有启动图形界面,systemd-logind 的失败可能不会对你当前的操作产生太大影响。因此,尽管该服务失败,你仍然能够以 root 身份登录。所以这个错误先不用去处理。我用下面的命令查看了下具体的日志:
journalctl -u systemd-logind
发现就是下面的日志在多次启动过程中反复重复:
1]: systemd-logind.service: Failed to run 'start-pre' task: No such file or dir>
1]: systemd-logind.service: Failed with result 'resources'.
1]: Failed to start Login Service.
1]: systemd-logind.service: Service has no hold-off time (RestartSec=0), schedu>
1]: systemd-logind.service: Scheduled restart job, restart counter is at 1.
1]: Stopped Login Service.
错误的关键点:
- Failed to run ‘start-pre’ task: No such file or directory:这表明服务在启动前阶段遇到了文件缺失的问题,导致无法继续启动。
- Failed with result ‘resources’:这意味着资源配置出了问题,可能是缺少依赖或文件系统未正确挂载。
- Scheduled restart job:服务多次尝试重启,但由于相同的错误,它未能成功启动。
可能的原因:
-
缺少必要的文件或目录:
- 在启动
systemd-logind服务时,它可能依赖某些文件或目录(如/etc/下的配置文件,或特定的设备文件)。如果这些文件丢失或权限错误,服务启动将失败。
- 在启动
-
配置文件问题:
systemd-logind可能在启动时需要加载一些特定的配置文件,可能是/etc/systemd/logind.conf或相关目录下的文件。如果这些文件没有正确配置或丢失,服务就无法启动。
-
资源问题:
- 如果系统资源(例如磁盘空间、内存等)不足,
systemd-logind也可能无法启动,特别是在虚拟环境或资源受限的设备上
- 如果系统资源(例如磁盘空间、内存等)不足,
这个问题因为并不是啥严重的问题,我们暂时放在那里不去解决,事实上现在要去解决难度也比较大,主要也并不影响我对后续移植内核工作的探索,所以暂时不管。
虽然 systemd-logind 服务启动失败,但是并不影响root用户的登陆,如下图所示,输入root就可以登陆了~

备注:后来通过eMMC启动系统时这两个错误都没有了,原因分析如下:
①第一个错误没有的原因:因为eMMC设备不带授时功能,自然系统就不会去尝试获取网络时间了呀;
②第二个错误没有的原因: systemd-logind 在网络启动模式下是启动不了的,通过eMMC启动的方式可以。
研究下看能不能不用路由器也能实现NFS挂载
u-boot中,与NFS挂载的关键环境变量是netargs,之前已经把其内容改为下面这样:
netargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs rw ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
我样可以看到里面有个参数是ip=dhcp,那应该是可以设置为不使用DHCP方式。
问了人工智能,说是可以像下面这样设置bootargs的内容:
netargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs rw ip=${ipaddr} nfsroot=${serverip}:${nfsroot},v3,tcp
实际上就是把ip=dhcp改为ip=${ipaddr}
具体的修改命令为:
setenv netargs 'setenv bootargs console=${console},${baudrate} root=/dev/nfs rw ip=${ipaddr} nfsroot=${serverip}:${nfsroot},v3,tcp'
好,试一下,先把USB网口和开发板的网口2用网线直连起来…

然后打开Ubuntu→打开串口→启动开发板…
运行下面的命令:
setenv fdt_file imx6ull-14x14-evk.dtb
setenv ip_dyn no
setenv serverip 192.168.5.11
setenv ipaddr 192.168.5.9
setenv nfsroot /home/book/mybuild/nfs_linux_rootfs
setenv netargs 'setenv bootargs console=${console},${baudrate} root=/dev/nfs rw ip=${ipaddr} nfsroot=${serverip}:${nfsroot},v3,tcp'
然后运行下面的命令开始载入并启入内核:
run netboot
然后卡在下面这里:

可见不行…并且超时之后又进入DHCP的阶段。
不妨再试一下用下面这样的设置:
root=/dev/nfs nfsroot=192.168.5.11:/home/book/mybuild/nfs_linux_rootfs,proto=tcp rw ip=192.168.5.9:192.168.5.11:192.168.5.1:255.255.255.0::eth0:off
对应的设置环境变量的命令变为:
setenv netargs 'setenv bootargs console=${console},${baudrate} root=/dev/nfs nfsroot=192.168.5.11:/home/book/mybuild/nfs_linux_rootfs,proto=tcp rw ip=192.168.5.9:192.168.5.11:192.168.5.1:255.255.255.0::eth0:off'
setenv fdt_file imx6ull-14x14-evk.dtb
setenv ip_dyn no
setenv serverip 192.168.5.11
setenv ipaddr 192.168.5.9
setenv nfsroot /home/book/mybuild/nfs_linux_rootfs
setenv netargs 'setenv bootargs console=${console},${baudrate} root=/dev/nfs nfsroot=192.168.5.11:/home/book/mybuild/nfs_linux_rootfs,proto=tcp rw ip=192.168.5.9:192.168.5.11:192.168.5.1:255.255.255.0::eth0:off'
通过这样设置,网络配置能完成,但是卡在下面这里,相关情况如下图所示:

所以尝试失败,结论是还是得通过路由器的连接去挂载NFS网络文件系统。
811

被折叠的 条评论
为什么被折叠?



