07步:挂载NFS根文件系统

7.1 NFS的安装、配置

​ 前面的根文件系统是.ext3镜像格式,不方便开发调试。为了方便开发,我们可以将开发板的根文件系统设置成NFS网络文件系统,这样我们级不需要往开发板往复拷贝文件了,直接在主机上操作NFS即可。
​ NFS安装使用apt就可以,很方便

# sudo apt install nfs-kernel-server

​ 我们前面配置busybox的根文件系统目录为/home/nfs。我们将开发板的根文件系统挂载路径设置到这里就可以了:设置挂载目录路径的配置文件为/etc/exports。打开这个文件:

# sudo gedit /etc/exports

​ 加入内容:

/home/nfs *(rw,sync,no_root_squash,no_subtree_check)

​ 重启NFS服务器

# sudo /etc/init.d/rpcbind restart
# sudo /etc/init.d/nfs-kernel-server restart

7.2 NFS的兼容问题

方法一:重新编译内核,使之支持NFS V4
位置: File System —> Network File Systems—>NFS client support for NFS version 4

但是更改以后可能出现下面这个错误:

这里报错是因为内核大小超出了5M,后面加载的设备树文件覆盖了内核镜像,内核在5M的位置被覆盖,通不过CRC校检导致的。解决方法:将设备树文件加载到内存的地址往后移动,移动到从0x60500000移动到0x60800000。

方法二:设置Ubuntu20.04的NFS,使之兼容NFS-V2和NFS-V3

这个方法相对就容易很多,修改文件/etc/default/nfs-kernel-server,加入NFS的2,3,4的所有支持,加入调试功能,即

sudo gedit /etc/default/nfs-kernel-server

输入以下内容

RPCSVCGSSDOPTS="--nfs-version 2,3,4 --debug --syslog"

改好了记得把NFS重启一下

# sudo /etc/init.d/rpcbind restart
# sudo /etc/init.d/nfs-kernel-server restart

7.3 最终测试

修改启动脚本start.sh:

qemu-system-arm \
    -M vexpress-a9 \
    -kernel u-boot \
    -nographic \
    -m 512M \
    -nic tap

执行脚本:

# cd /home/nfs
# touch test-nfs
# cd /home/tftpboot/
# su root
# ./start.sh

启动以后,快速按空格,输入以下的启动指令:

# tftp 0x60003000 uImage;tftp 0x60800000 vexpress-v2p-ca9.dtb;setenv bootargs 'root=/dev/nfs rw nfsroot=192.168.33.145:/home/nfs,proto=tcp,nfsvers=3,nolock init=/linuxrc ip=192.168.33.144 console=ttyAMA0';bootm 0x60003000 - 0x60800000;

即可完成NFS的引导,如果想设置为自动引导,需要将bootcmd修改成这个就好

挂载成功示例:

综上,所有 Ubunt20.04+QEMU 的环境配置工作完成

不用买开发板,使用QEMU就可以学习的Linux内核开发实战视频教程:《Linux内核编程》,具有一线芯片原厂开发经验的驱动工程师录制,详情点击:王利涛老师个人淘宝店:Linux内核编程