2025-02-10
在嵌入式Linux开发的调试过程中,如果需要频繁的更新文件系统中的内容是一个很麻烦的过程。所以Linux内核提供了能够通过使用nfs文件系统启动的功能,这样就不需要频繁的制作文件系统。在Linux内核启动后挂载远端的nfs文件系统,需要更新文件只需要将文件放到远端的目录下,就会自动同步到开发板的文件系统中。大大提高了开发和调试效率。
ubuntu版本:24.04
宿主机安装nfs-kernel-server:sudo apt install nfs-kernel-server
nfs-kernel-server编辑/etc/exports文件。在最后添加/mnt/rootfs *(rw,sync,no_root_squash,no_subtree_check)
创建/mnt/rootfs: sudo mkdir /mnt/rootfs,并复制文件到/mnt/rootfs目录
启动nfs-kernel-server: sudo systemctl start nfs-kernel-server
测试nfs文件系统是否挂载成功:
tmp目录: mkdir tmpsudo mount -t nfs 127.0.0.1:/mnt/rootfs tmp,查看rootfs目录是否成功挂载到tmp目录运行make menuconfig
Networking support->Networking options->TCP/IP networking->IP: kernel level autoconfiguration->1) IP: DHCP support, 2) IP: BOOTP support, 3) IP: RARP support 3个选项都启用
File systems->Network File Systems->NFS client support下的所有子选项都启用
File systems->Network File Systems-> Root file system on NFS启用
qemu-system-x86_64 -kernel bzImage \
-append "root=/dev/nfs rw \
nfsroot=192.168.31.192:/mnt/rootfs,v3,tcp \
ip=192.168.31.193:192.168.31.192:192.168.31.1:255.255.255.0::eth0:off \
init=/linuxrc console=ttyS0" \
-serial mon:stdio -nographic
nfsroot=192.168.31.192为宿主机的网络,你需要修改成你自己的ip地址
ip=192.168.31.193:192.168.31.192:192.168.31.1:255.255.255.0为ip=qemu中为内核分配的ip地址:宿主机的ip地址:网关地址:子网掩码
eth0:off: qemu为内核分配的网络接口,并且关闭DHCP
qemu中内核无法挂载宿主机的/mnt/rootfs目录。
ip地址冲突了。qemu的网络无法和宿主机的网络进行通讯。希望对你有所帮助。