构建调试Linux内核网络代码的环境MenuOS系统

一:安装、编译Linux内核

(1)下载Linux内核的源代码并解压:

官网为http://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

 2)配置编译需要的信息

命令行如下:
cd /linux-5.0.1/   #进入解压出来的目录
sudo cp /boot/config-xxx -r .config  #使用现存内核的配置文件
sudo make oldconfig  #应用现存配置文件
sudo make localmodconfig  #仅安装已有module
sudo make menuconfig  #进入GUI界面配置其他编译选项

 得到如下GUI界面:

配置步骤:Kernel hacking、Compile-time checks and compiler options,[*]Compile the kernel with debug info,并且分别enter exit保存

3)编译

sudo make  #难等!!!

二:制作根文件系统

(1) 安装qume命令如下

sudo apt install qemu

(2)构建MenuOS命令如下

mkdir rootfs
git clone https://github.com/mengning/menu.git
cd menu
sudo apt-get install libc6-dev-i386

(3)启动MenuOS系统 

 make rootfs
我们可以看到以下窗口

 

 三:检测MenuOS的网络可以正常工作

将TCP网络通信程序的客户端和服务器端分别集成到MenuOS系统中,命令如下:

cd ~/LinuxKernel  #客户端
cd linuxnet/lab3
sudo gedit Makefile
make rootfs
cd ~/LinuxKernel  #服务器端
git clone https://github.com/mengning/linuxnet.git
cd linuxnet/lab2
make
cd ../../menu/
sudo gedit Makefile  
make rootfs

以下界面结果证实在MenuOS上能够完成TCP客户端和服务器发送和接收hello/hi,也就是MenuOS的网络可以正常工作

 

 

  四、GDB调试

 打开一个窗口输入以下命令

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S 
# 关于-s和-S选项的说明:
# -S freeze CPU at startup (use ’c’ to start execution)
# -s shorthand for -gdb tcp::1234 若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项

 另开一个shell窗口

gdb
(gdb)file linux-5.0.1/vmlinux  # 在gdb界面中targe remote之前加载符号表
(gdb)target remote:1234  # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
(gdb)break start_kernel  # 断点的设置可以在target remote之前,也可以在之后
run后,可以得到如下界面,表示在start_kernel函数处停止运行,能够看到断点处的代码,结果如下

 实验完成。

 

 

 

  

 

 

posted @ 2019-12-12 17:20  wenkail群魔乱舞  阅读(167)  评论(0编辑  收藏  举报