天天看点

使用qemu-kvm搭建linux内核调试环境编译内核安装qemu-kvm制作根文件系统启动虚拟机

使用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
           

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

线程数根据你电脑的情况可以自己改。

这里有一个我遇到的问题是:

使用qemu-kvm搭建linux内核调试环境编译内核安装qemu-kvm制作根文件系统启动虚拟机

需要在配置里把这个文件删除:

使用qemu-kvm搭建linux内核调试环境编译内核安装qemu-kvm制作根文件系统启动虚拟机

编译好的内核在内核源码根目录的以下位置:

arch/x86_64/boot/bzImage

安装qemu-kvm

apt-get install qemu
           

制作根文件系统

制作简单的根文件系统可以使用buildroot

下载,解压之后得到这样的根目录:

使用qemu-kvm搭建linux内核调试环境编译内核安装qemu-kvm制作根文件系统启动虚拟机

跟kernel类似,先安装依赖:

然后进行配置:

make menuconfig
           

注意,有一个必要的配置是,修改kernel的下载点:

使用qemu-kvm搭建linux内核调试环境编译内核安装qemu-kvm制作根文件系统启动虚拟机

buildroot原版的下载点是kernel的官网。我家的网络没法正常访问这个地址。我配的这个地址是中科大的镜像,其它的镜像,像清华、阿里的,因为目录结构跟kernel官网不一样,都不行。

这个我觉得应该是buildroot的问题。

记得修改root用户的密码:

使用qemu-kvm搭建linux内核调试环境编译内核安装qemu-kvm制作根文件系统启动虚拟机

然后编译:

注意:buildroot不支持make的-j参数。它自己本身就是多线程的。而且第一次编译的话,主要是下载源码的时间比较长,多不多线程影响不大。

编译结束之后会得到一个压缩包,在源码根目录的output/images下:

使用qemu-kvm搭建linux内核调试环境编译内核安装qemu-kvm制作根文件系统启动虚拟机

这个不能当文件系统用,还需要制作一个文件系统镜像。

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内核调试环境编译内核安装qemu-kvm制作根文件系统启动虚拟机

继续阅读