构建调试Linux内核网络代码的环境MenuOS系统
1 . 下载,配置内核编译为32位
//先通过网站下载源码 https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz
//或者执行
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz
xz -d linux-5.0.1.tar.xz //对文件进行解压
tar -xvf linux-5.0.1.tar
cd linux-5.0.1
sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev // 安装内核编译工具
make i386_defconfig //生成32位x86的配置文件
2.配置内核可以进行debug
make menuconfig
1:选择 Kernel hacking
2:选择 Compile-time checks and compiler options
3: 选择 [ ]Compile the kernel with debug info
4: 按Y选择该选项 [*] Compile the kernel with debug info
5:选择 save
6:按 esc,直到退出图形化界面
3.编译
make//编译,等待⌛️
4.升级当前系统内核
//按照该方法,发现reboot不了,所以先跳过,系统的内核好像和qemu装入的内核没太大关系
sudo make modules_install # ⚠️安装前通过系统快照备份系统,以防出现故障前功尽弃
sudo make install
sudo update-grub
reboot
uname -a
Linux ubuntu 5.0.1 #1 SMP Wed Mar 13 14:19:31 CST 2019 x86_64 x86_64 x86_64 GNU/Linux
5.通过QEMU虚拟机加载内核
sudo apt install qemu
qemu-system-i386 -kernel linux-5.0.1/arch/x86/boot/bzImage # make i386_defconfig
6.构造MenuOS
git clone https://github.com/mengning/menu.git
cd menu
sudo apt-get install libc6-dev-i386 # 在64位环境下编译32位需安装
make rootfs #制作根文件系统
cd ..
qemu-system-i386 -kernel linux-5.0.1/arch/x86/boot/bzImage -initrd rootfs.img # make i386_defconfig #加载32位内核刀quem
qemu-system-x86_64 -kernel linux-5.0.1/arch/x86_64/boot/bzImage -initrd rootfs.img #加载64位内核(这里采用32位)所以执行该条
7.构建Linux内核的gdb调试环境
#前面已经编译内核是携带了debug信息
qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img -append nokaslr -s -S
#开启另外一个终端
gdb
file ~/linux-5.0.1/vmlinux
break start_kernel #设置断点
c #继续执行
8.构建MenuOS的网络功能
#将TCP网络通信程序的服务端集成到 MenuOS 系统中
git clone https://github.com/mengning/linuxnet.gitcd
cd linuxnet/lab2
make
cd linuxnet/lab3
make rootfs #内含加载内核qemu
搭建好后测试结果如下:
在start_kernel、sys_socketcall设置gdb调试断点