构建调试Linux内核网络代码的环境MenuOS系统
1.下载以及编译Linux内核源码
(1)下载Linux内核源码
mkdir linuxkernel #创建目录
cd ~/linuxkernel/ #进入该目录
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz #下载5.0.1版的内核
xz -d linux-5.0.1.tar.xz #解.xz
tar -xvf linux-5.0.1.tar #解.tar
cd linux-5.0.1
(2)安装依赖包
sudo apt-get install build-essential
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install libssl-dev
sudo apt-get install libelf-dev
sudo apt-get install libncurses-dev
(3)配置
sudo cp /boot/config-xxx -r .config(xxx处使用TAB补全) #使用现存内核的配置文件
sudo make oldconfig #应用现存配置文件
sudo make localmodconfig #仅安装已有module
sudo make menuconfig #配置其他编译选项
#在出现的界面中依次选择:
Kernel hacking -> Compile-time checks and compiler options -> []Compile the kernel with debug info 然后按Y键,选择save,一直按esc至退出
(4)编译
make #编译的时间比较长
2.制作根文件系统
(1)QEMU虚拟机加载内核
cd ~/linuxkernel/
sudo apt install qemu #安装qemu命令
(2)构造MenuOS
mkdir rootfs #创建MenuOS根目录
git clone https://github.com/mengning/menu.git #下载MenuOS

(3)初始化根目录
cd menu
vim Makefile #修改Makefile的内容
#修改之前为:qemu -kernel ../linux-3.18.6/arch/x86/boot/baImage -initrd ../rootfs.img
#修改之后为:qemu-system-x86_64 -kernel ../linux-5.0.1/arch/x86_64/boot/baImage -initrd ../rootfs.img
make rootfs

(4)验证网路
#将网络通信程序集成至MenuOS系统中
cd ~/linuxkernel/
git clone https://github.com/mengning/linuxnet.git #
cd linuxnet/lab2
make
cd ../../menu
#同前面修改Makefile的内容
make rootfs
cd ~/linuxkernel/
cd linuxnet/lab3
#同前面修改Makefile的内容
make rootfs
#验证网络
replyhi
hello

3.gdb调试
(1)重启QEMU
cd ~/linuxkernel/menu
vim Makefile
#在qemu-system-x86_64 -kernel ../linux-5.0.1/arch/x86_64/boot/baImage -initrd ../rootfs.img末尾加上-s -S
make rootfs

(2)连接gdb server并调试
gdb
file ~/linuxkernel/linux-5.0.1/vmlinux
target remote:1234
break start_kernel #设置断点,追踪start_kernel
c #继续运行

浙公网安备 33010602011771号