【Linux内核分析与驱动编程】内核调试实验-环境搭建

环境:虚拟机Ubuntu18.04
内核版本4.19.23

1 实验环境搭建
1.1 内核源码编译
(1)利用.config进行源码编译
make oldconfig
make –j4
【Linux内核分析与驱动编程】内核调试实验-环境搭建
(2)创建kDebug调试文件夹
【Linux内核分析与驱动编程】内核调试实验-环境搭建
(3)复制bzImage、vmlinux、initrd.img-4.19.23到实验目录中
【Linux内核分析与驱动编程】内核调试实验-环境搭建
1.2 安装ddd
sudo apt-get install ddd
【Linux内核分析与驱动编程】内核调试实验-环境搭建
1.3 安装busybox
(1)解压busybox
tar -jxvf busybox-1.30.1.tar.bz2

【Linux内核分析与驱动编程】内核调试实验-环境搭建
(2)运行menuconfig进行配置
make menuconfig

【Linux内核分析与驱动编程】内核调试实验-环境搭建
【Linux内核分析与驱动编程】内核调试实验-环境搭建
(3)编译
make
【Linux内核分析与驱动编程】内核调试实验-环境搭建
(4)安装
sudo make install
【Linux内核分析与驱动编程】内核调试实验-环境搭建
1.4 制作文件系统
(1)进入kDebug目录,在当前目录下创建一个名为busybox.img,大小为1000M的文件,并将其格式化为ext3的文件系统
dd if=/dev/zero of=./busybox.img bs=1M count=1000
【Linux内核分析与驱动编程】内核调试实验-环境搭建
mkfs.ext3 busybox.img
【Linux内核分析与驱动编程】内核调试实验-环境搭建
(2)将这个虚拟磁盘文件挂载到本地系统中, 并将生成好的busybox的文件拷贝到这个文件里。
sudo mkdir /mnt/disk
sudo mount -o loop ./busybox.img /mnt/disk
sudo cp -rf ~/busybox-1.30.1/_install/* /mnt/disk
【Linux内核分析与驱动编程】内核调试实验-环境搭建
(3)创建必须的文件系统目录
cd /mnt/disk/
sudo mkdir dev sys proc etc lib mnt
【Linux内核分析与驱动编程】内核调试实验-环境搭建
(4)创建rcS文件
cd etc/
sudo mkdir init.d
sudo vi /mnt/disk/etc/init.d/rcS
【Linux内核分析与驱动编程】内核调试实验-环境搭建
(5)将下面内容拷贝到rcS里:
#! /bin/sh
/bin/mount -a
/bin/mount -t sysfs sysfs /sys
/bin/mount -t tmpfs tmpfs /dev
#动态添加虚拟机环境中的设备
/sbin/mdev –s
【Linux内核分析与驱动编程】内核调试实验-环境搭建
(6)修改rcS权限
sudo chmod +x rcS
【Linux内核分析与驱动编程】内核调试实验-环境搭建
(7)卸载虚拟磁盘文件
【Linux内核分析与驱动编程】内核调试实验-环境搭建
1.4 安装qemu
sudo apt-get install qemu
【Linux内核分析与驱动编程】内核调试实验-环境搭建
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
【Linux内核分析与驱动编程】内核调试实验-环境搭建
(2)开发机中调试
在开发机中(另启动一个终端,进入kdebug目录)使用如下命令:
gdb vmlinux
(gdb) target remote localhost:4321
【Linux内核分析与驱动编程】内核调试实验-环境搭建
【Linux内核分析与驱动编程】内核调试实验-环境搭建
(3)观看变量
watch configured
print configured
【Linux内核分析与驱动编程】内核调试实验-环境搭建
下一篇:内核调试实验,指定helloworld作为init入口。