环境:虚拟机Ubuntu18.04
内核版本4.19.23
1 实验环境搭建
1.1 内核源码编译
(1)利用.config进行源码编译
make oldconfig
make –j4

(2)创建kDebug调试文件夹

(3)复制bzImage、vmlinux、initrd.img-4.19.23到实验目录中

1.2 安装ddd
sudo apt-get install ddd

1.3 安装busybox
(1)解压busybox
tar -jxvf busybox-1.30.1.tar.bz2

(2)运行menuconfig进行配置
make menuconfig


(3)编译
make

(4)安装
sudo make install

1.4 制作文件系统
(1)进入kDebug目录,在当前目录下创建一个名为busybox.img,大小为1000M的文件,并将其格式化为ext3的文件系统
dd if=/dev/zero of=./busybox.img bs=1M count=1000

mkfs.ext3 busybox.img

(2)将这个虚拟磁盘文件挂载到本地系统中, 并将生成好的busybox的文件拷贝到这个文件里。
sudo mkdir /mnt/disk
sudo mount -o loop ./busybox.img /mnt/disk
sudo cp -rf ~/busybox-1.30.1/_install/* /mnt/disk

(3)创建必须的文件系统目录
cd /mnt/disk/
sudo mkdir dev sys proc etc lib mnt

(4)创建rcS文件
cd etc/
sudo mkdir init.d
sudo vi /mnt/disk/etc/init.d/rcS

(5)将下面内容拷贝到rcS里:
#! /bin/sh
/bin/mount -a
/bin/mount -t sysfs sysfs /sys
/bin/mount -t tmpfs tmpfs /dev
#动态添加虚拟机环境中的设备
/sbin/mdev –s

(6)修改rcS权限
sudo chmod +x rcS

(7)卸载虚拟磁盘文件

1.4 安装qemu
sudo apt-get install qemu

1.5 gdb+kgdb调试内核
(1)qemu启动目标机
sudo qemu-system-x86_64 -kernel bzImage -initrd initrd.img-4.19.23 -append “root=/dev/sda nokaslr kgdboc=ttyS0,115200 kgdbwait” -boot c -hda busybox.img -k en-us -m 1024 -serial tcp::4321,server

(2)开发机中调试
在开发机中(另启动一个终端,进入kdebug目录)使用如下命令:
gdb vmlinux
(gdb) target remote localhost:4321


(3)观看变量
watch configured
print configured

下一篇:内核调试实验,指定helloworld作为init入口。

本文详细介绍了在虚拟机Ubuntu18.04环境下,从内核源码编译、环境搭建到使用gdb进行内核调试的全过程。包括内核编译、busybox安装、文件系统制作及qemu模拟器的使用。
515





