调试Linux内核的方法(Linux-4.8)(废弃,仅供参考用)
》》》》》》仅供参考使用《《《《《《《《
Host系统:基于centos 7.6
Guest系统:基于QEMU的Linux虚拟机(要调试的对象)
在host上编译Linux4.8内核。
内核源代码下载地址:https://mirrors.aliyun.com/linux-kernel/v4.x/linux-4.8.tar.gz
需要用到的工具下载:
1)GDB
centos 7.6默认的GDB版本有点老,在调试的时候会遇到问题,所以这里需要下载GDB较新的版本,重新编译一个新的GDB,操作如下:
从这里下载GDB:https://mirrors.ustc.edu.cn/gnu/gdb/gdb-8.1.tar.gz
2)QEMU
centos7.6 YUM仓库中的QEMU版本比较老了,需要重新下载QEMU编译,操作如下:
从这里下载QEMU:https://download.qemu.org/qemu-4.1.0.tar.xz
编译安装好之后,以下涉及到gdb或者qemu的命令根据实际路径调整。
编译内核前的准备工作
在编译
编译内核源代码
创建虚拟机镜像
制作一个磁盘用于安装
qemu-img create centos76.img 50G
安装Guest系统
从这里下载CentOS-7-x86_64-Minimal-1810.iso:https://mirrors.ustc.edu.cn/centos/7.6.1810/isos/x86_64/CentOS-7-x86_64-Minimal-1810.iso
这里假设已经将CentOS-7-x86_64-Minimal-1810.iso镜像从互联网上下载好了。接着开始安装Guest系统。
在服务器上(或者PC上)安装,需要使用到一个VNC客户端软件,以便能够连接QEMU VNC Server。
qemu-system-x86_64 -cdrom CentOS-7-x86_64-Minimal-1810.iso -hda ./centos76.img -boot d -netdev tap,id=tap0,ifname=virbr0-nic,vhost=on,script=no -m 2048 -localtime -vnc 0.0.0.0:20
也可以采用以下使用virtio磁盘:
qemu-system-x86_64 -cdrom /home/caishan/CentOS-7-x86_64-Minimal-1810.iso \
-drive file=./centos76.img,if=virtio \
-boot d \
-netdev tap,id=tap0,ifname=virbr0-nic,vhost=on,script=no \
-device virtio-net-pci,netdev=tap0 \
-m 2048 \
-localtime \
-vnc 0.0.0.0:20 \
--enable-kvm
上述命令运行之后通过VNC客户端远程连接 HostIP:5920
(默认)可以开始安装步骤。
待安装成功之后,安装好的系统,使用以下命令:
qemu-system-x86_64 -drive file=./centos76.img,if=virtio -boot c -netdev tap,id=tap0,ifname=virbr0-nic,vhost=on,script=no -m 2048 \
-device virtio-net-pci,netdev=tap0 \
-localtime -vnc 0.0.0.0:20 --enable-kvm
同样,使用VNC客户端远程连接到启动的虚拟机。登陆后,执行dhclient eth0获取IP地址。
./scripts/config -e CONFIG_DEBUG_INFO -d CONFIG_RANDOMIZE_BASE -e CONFIG_MODULES -e GDB_SCRIPTS
grub2-mkconfig -o /boot/grub2/grub.cfg
启动编译后的内核,并boot到硬盘
qemu-system-x86_64 -m 2048 -kernel ./arch/x86/boot/bzImage -initrd ./initrd.img-4.18.4 -drive file=./ubuntu1604.qcow2,if=virtio -boot c -nographic -serial mon:stdio -append 'root=/dev/sda1 console=ttyS0 nokaslr' --enable-kvm