学习嵌入式Linux过程中的记录
目的:使用NFS挂载上位机上的根文件系统到arm开发板上,方便下载调试,避免重复使用uboot下载整个根文件系统
方法:ubuntu下载nfs软件,配置共享文件的目录,修改NFS配置文件(主要用于在版本不匹配时修改);查看并配置内核(主要选中支持NFS用于root挂载),开发板上修改uboot的bootargs使传递给内核用于NFS挂载的根文件的参数
1.Ubuntu上下载NFS软件
sudo apt install nfs-kernel-server
2.添加要共享目录的路径
sudo vim /etc/exports
例如在里面加上:
/opt/rootfs *(rw,sync,no_root_squash)
3.配置内核支持NFS启动root,内核配置菜单需要选中的项目如下:
1、配置网络部分,主要是使能CONFIG_IP_PNP以在2中能够看到Root file system on NFS选项
Networking support
Networking options
TCP/IP networking
IP: kernel level autoconfiguration
[*] IP: DHCP support
[*]IP: BOOTP support
2、配置开启nfs服务
File systems --->
Network File Systems --->
<*> NFS client support
[*] NFS client support for NFS version 3
[*] NFS client support for the NFSv3 ACL protocol extension
[*] NFS client support for NFS version 4 (EXPERIMENTAL)
[*] NFS client support for NFSv4.1 (DEVELOPER ONLY)
[*] Root file system on NFS
4.修改bootargs参数(没有指定要使用的NFS版本)
seteenv bootargs root=/dev/nfs nfsroot=192.168.1.8:/opt/rootfs ip=192.168.1.110:192.168.1.8:192.168.1.1:255.255.255.0::eht0:off init=/linuxrc console=ttySAC0,115200
saveenv
然后就是一直启动不了,也在网上找了很多方法,都差不多,但是很多细节方面对于我这样的初学者来说需要注意到,很多地方出错了不懂原理只能挨个挨个试,特别是bootargs太长了容易写错,估计也有minicom用的不太好的原因。。。后面是具体的解决方法。
问题:挂载失败,报如下错误(可在内核reboot前一刻,在打印信息中找到相关信息)
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "nfs" or unknown-block(2,0): error -6
原因:ubuntu的NFS版本太高,与内核支持的版本不匹配
解决方法:
Ubuntu上位机:
先修改NFS配置文件
sudo vim /etc/default/nfs-kernel-server
修改为:
保存后重启NFS:
sudo /etc/init.d/nfs-kernel-server restart
Arm开发板上:
在bootargs中添加上proto=tcp,nfsvers=3指定内核用的nfs是v3版本:
seteenv bootargs root=/dev/nfs nfsroot=192.168.1.8:/opt/rootfs,proto=tcp,nfsvers=3 ip=192.168.1.110:192.168.1.8:192.168.1.1:255.255.255.0::eht0:off init=/linuxrc console=ttySAC0,115200
saveenv
(注意:nfsroot后面接的proto、nfsvers参数要一定用","逗号连接,不能用空格,我就被坑了,找了好久的才发现)
参考:用NFS挂载根文件系统详解(带nfs版本不兼容问题的解决方法)