Qemu 调试内核x86
准备busybox
下载地址:https://busybox.net/downloads/
调试中使用的是busybox-1.24.0版本,下载的是busybox-1.24.0.tar.bz2文件
规划好文件路径,解压busybox-1.24.0.tar.bz2
tar -jxvf busybox-1.24.0.tar.bz2
cd busybox-1.24.0
-
编译配置 make menuconfig
开启静态编译, 避免链接shared libraries
Busybox Settings --→
Build Options --→
-
在64位机器上编译成i386, 32位
(-m32 -march=i386) Additional CFLAGS
(-m32) Additional LDFLAGS
-
编译
make -j4(根据电脑的能力选择多线程编译) -
安装
指定到安装目录,这样就可以利用同一套源代码来编译多个不同平台的镜像。
make install CONFIG_PREFIX=…/obj/busybox-x86/ -
制作根文件系统
搭建最小跟文件系统,最小根文件系统包括
(1) /dev/console
/dev/null
(2) init => busybox
(3) /etc/inittab
(4) 配置文件指定的程序
(5) C库 -
拷贝busybox 安装文件(busybox-x86/*)到kernel根目下的_install目录
cd _install
建立dev文件目录
创建 console, null节点
sudo mknod console c 5 1
sudo mknod null c 1 3建立etc 文件目录
创建inittab文件,busybox中init会解析这个文件
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r创建init.d/rcS文件 mkdir -p /proc mkdir -p /tmp mkdir -p /sys /bin/mount -a mdev -s 其中的 mount -a, 就是挂载 /etc/fstab文件指定的文件系统。 创建fstab文件 proc /proc proc defaults 0 0 tmpfs /tmp tmpfs defaults 0 0 sysfs /sys sysfs defaults 0 0 debugfs /sys/kernel/debug debugfs defaults 0 0
-
内核编译
下载内核:https://www.kernel.org/配置内核:
make i386_defconfig
系统默认是slub如果调试slab可以按以下修改步骤执行。
make menuconfig
General setup —>
Choose SLAB allocator (SLAB) —>
-
指定文件系统
General setup —>
Initramfs source file(s)
_install 是创建的文件系统目录,从busybox目录中拷贝到内核的根目录 -
编译内核
make bzImage -j4(根据电脑的能力选择多线程编译) -
qemu 运行
注:qemu的版本与内核的版本会影响qemu的运行状态
ubuntu14.4默认的qemu只能调试4.8以下版本的内核,调试高版本的qemu不能运行,升级了ubuntu到16.04才能调试4.8版本(含)以上的内核。