Qemu调试Linux内核,实现nfs挂载
背景
前面的文章已经实现了qemu启动内核,vscode调试内核;如果想要编译一个内核模块或者是小的文件在qemu上运行还是不容易的,现在通过nfs文件夹共享的方式,在宿主机上交叉编译之后,共享到qemu虚拟机,实现qemu与宿主机的快速文件交换,从而达到快速调试内核的目的。
宿主端配置
- 创建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 ********"