Bootstrap

【无标题】

Qemu调试Linux内核,实现nfs挂载

背景

前面的文章已经实现了qemu启动内核,vscode调试内核;如果想要编译一个内核模块或者是小的文件在qemu上运行还是不容易的,现在通过nfs文件夹共享的方式,在宿主机上交叉编译之后,共享到qemu虚拟机,实现qemu与宿主机的快速文件交换,从而达到快速调试内核的目的。

宿主端配置

  1. 创建tap0
sudo ip tuntap add dev tap0 mode tap
sudo ip link set dev tap0 up
sudo ip address add dev tap0 192.168.3.128/24

依次执行上述命令之后,会在服务端创建一个tap0的网络设备在这里插入图片描述

启动qemu

qemu-system-arm \
        -M vexpress-a9 \
        -m 512M \
        -kernel zImage \
        -dtb vexpress-v2p-ca9.dtb \
        -nographic \
        -append "root=/dev/mmcblk0 rw console=ttyAMA0" \
        -sd rootfs.ext3 \
        -net nic \
        -net tap,ifname=tap0,script=no,downscript=no

-net选项中的ifname=tap0,即为上述宿主端创建的网络设备;
启动完毕之后,需要将qemu虚拟机与宿主机网络连接在一起,依次执行以下命令将eth0启动起来;然后ping 192.168.3.128发现已经可以ping通,两者之间网络已经连接;

ip addr
ip addr add 192.168.3.129/24 dev eth0
ip link set eth0 up
ping 192.168.3.128

在这里插入图片描述

配置宿主机nfs server

依次执行以下命令,导出共享目录

sudo apt-get install nfs-kernel-server
sudo vim /etc/exports
# 在最后一行添加共享文件夹,事先要创建共享目录,然后通过exportfs命令查看是否共享成功;
/home/ubuntu/nfs *(rw,sync,no_root_squash,no_subtree_check,insecure)

sudo service nfs-kernel-server restart
sudo exportfs

在这里插入图片描述

服务端挂载共享目录

执行以下命令将宿主机的共享目录挂载到/mnt下

mount -t nfs -o nolock 192.168.3.128:/home/ubuntu/nfs /mnt

测试

两者touch文件可以看到宿主机和qemu都能看到了

脚本

将ip设置放在qemu的启动脚本中,修改/etc/init.d/rcS,结尾添加如下

echo "***** set ip : 192.168.3.129 ********"
ip addr
ip addr add 192.168.3.129/24 dev eth0
ip link set eth0 up
echo "***** mount nfs ********"
mount -t nfs -o nolock 192.168.3.128:/home/ubuntu/nfs /mnt
echo "***** success ********"
;