【Linux内核分析与驱动编程】内核调试实验-环境搭建
环境:虚拟机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入口。