使用qemu-kvm搭建linux内核调试环境

使用qemu搭建内核调试环境

  • 编译内核
  • 安装qemu-kvm
  • 制作根文件系统
  • 启动虚拟机

编译内核

内核源码很多地方都有,可以去阿里云、网易、中科大、清华等等的开源镜像站点找。
下载之后需要在电脑上安装编译内核的各种依赖项:

sudo apt-get build-dep linux linux-image-$(uname -r)
sudo apt-get install libncurses-dev gawk flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf

有了依赖项后,在内核源码根目录使用下面命令调整内核配置:

make menuconfig

然后使用下面命令即可开始编译:

make -j 8

线程数根据你电脑的情况可以自己改。
这里有一个我遇到的问题是:
使用qemu-kvm搭建linux内核调试环境_第1张图片

需要在配置里把这个文件删除:
使用qemu-kvm搭建linux内核调试环境_第2张图片
编译好的内核在内核源码根目录的以下位置:
arch/x86_64/boot/bzImage

安装qemu-kvm

apt-get install qemu

制作根文件系统

制作简单的根文件系统可以使用buildroot
下载,解压之后得到这样的根目录:
使用qemu-kvm搭建linux内核调试环境_第3张图片
跟kernel类似,先安装依赖:

sudo apt-get install libncurses-dev dkms autoconf which sed make gcc g++ binutils patch gzip bzip2 perl tar cpio unzip rsync file bc

然后进行配置:

make menuconfig

注意,有一个必要的配置是,修改kernel的下载点:
使用qemu-kvm搭建linux内核调试环境_第4张图片
buildroot原版的下载点是kernel的官网。我家的网络没法正常访问这个地址。我配的这个地址是中科大的镜像,其它的镜像,像清华、阿里的,因为目录结构跟kernel官网不一样,都不行。
这个我觉得应该是buildroot的问题。
记得修改root用户的密码:
使用qemu-kvm搭建linux内核调试环境_第5张图片
然后编译:

make

注意:buildroot不支持make的-j参数。它自己本身就是多线程的。而且第一次编译的话,主要是下载源码的时间比较长,多不多线程影响不大。
编译结束之后会得到一个压缩包,在源码根目录的output/images下:
使用qemu-kvm搭建linux内核调试环境_第6张图片
这个不能当文件系统用,还需要制作一个文件系统镜像。

qemu-img create -f raw init.img 100m

buildroot的默认设置生成的rootfs非常小,不需要很大的rootfs。这里设置镜像大小是100M。
然后把buildroot生成的文件系统拷贝到镜像里:

mkdir rootfs-folder
sudo mount init.img rootfs-folder
tar -xvf rootfs.tar -C rootfs-folder
sudo umount rootfs-folder

这样,根文件系统就做好了。

启动虚拟机

有了内核和rootfs,就可以用虚拟机调试这套系统了。
使用如下命令启动虚拟机:

qemu-system-x86_64 -kernel bzImage -nographic -append "console=ttyS0 root=/dev/sda" -m 512 --enable-kvm -cpu host -drive file=init.img

效果如下图:
使用qemu-kvm搭建linux内核调试环境_第7张图片

你可能感兴趣的:(Linux开发环境布置,linux开发,内核,linux,qemu,rootfs)