Heng30的博客
搜索 分类 关于 订阅

qemu启动的内核如何使用nfs文件系统?

2025-02-10

在嵌入式Linux开发的调试过程中,如果需要频繁的更新文件系统中的内容是一个很麻烦的过程。所以Linux内核提供了能够通过使用nfs文件系统启动的功能,这样就不需要频繁的制作文件系统。在Linux内核启动后挂载远端的nfs文件系统,需要更新文件只需要将文件放到远端的目录下,就会自动同步到开发板的文件系统中。大大提高了开发和调试效率。

环境配置

  • ubuntu版本:24.04

  • 宿主机安装nfs-kernel-serversudo 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 tmp
    • 运行sudo 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.0ip=qemu中为内核分配的ip地址:宿主机的ip地址:网关地址:子网掩码

  • eth0:off: qemu为内核分配的网络接口,并且关闭DHCP

排错

  • 如果qemu中内核无法挂载宿主机的/mnt/rootfs目录。
    • 可能是手动为内核分配的ip地址冲突了。
    • 可能是qemu的网络无法和宿主机的网络进行通讯。

希望对你有所帮助。