在开发板上使用netboot的方式启动Linux系统时无法通过NFS网络文件系统挂载根文件系统的解决过程记录

初始症状描述

网线连接情况如下:
在这里插入图片描述

按下面的命令设置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地址时的过程。下面是每一句的详细解释:

先说明一下:前面中括号中的数字是指日志的时间戳,单位是秒,表示系统启动开始经过了多少秒。

  1. [ 7384.209601] IP-Config: Retrying forever (NFS root)...

    • 这条信息表明内核正在尝试通过DHCP获取网络配置,获取网络配置的目的是挂载NFS根文件系统。由于没有成功获取到IP地址,内核会不断重试。
  2. [ 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 表示中断被设置为轮询模式,而不是硬件触发。
  3. [ 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 是另一个网络接口的标识。
  4. [ 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
      在这里插入图片描述
  5. [ 7386.427294] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

    • 这条信息是IPv6协议栈的日志,表明 eth0 网络接口已经准备好,可以开始使用IPv6地址。ADDRCONF(NETDEV_CHANGE) 是内核用于更新网络设备地址配置的消息。
  6. [ 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

也知道了为什么通过设置环境变量serveripnfsroot就能让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:服务多次尝试重启,但由于相同的错误,它未能成功启动。

可能的原因:

  1. 缺少必要的文件或目录

    • 在启动 systemd-logind 服务时,它可能依赖某些文件或目录(如 /etc/ 下的配置文件,或特定的设备文件)。如果这些文件丢失或权限错误,服务启动将失败。
  2. 配置文件问题

    • systemd-logind 可能在启动时需要加载一些特定的配置文件,可能是 /etc/systemd/logind.conf 或相关目录下的文件。如果这些文件没有正确配置或丢失,服务就无法启动。
  3. 资源问题

    • 如果系统资源(例如磁盘空间、内存等)不足,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网络文件系统。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

昊虹AI笔记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值