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

首先先来构建一个简单的Linux内核。大体上是分为两个步骤,首先是现在内核源代码编译内核,然后制作根文件系统,而实验楼已经为我们已经搭建了实验环境,只需要至今cd进Linux 3.18.6就行了,以下是MenuOS正在启动

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

到此为止就完成了一个简单的内核搭建。然后我们开始使用GDB调试,再重新打开一个终端可以进行如下步骤:
打开shell终端,执行以下命令: 

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) 在系统启动的时候冻结CPU,使用c键继续执行后续操作

-s shorthand for -gdb tcp::1234 打开远程调试端口,默认使用tcp协议1234端口,若不想使用1234端口,则可以使用-gdb tcp:xxxx来取代-s选项
指令的作用是在开始的时候就让CPU停止在启动的那一刻,我们可以看到如下的界面:
构建调试Linux内核网络代码的环境MenuOS系统

 此时在刚才新建的那个终端窗口输入gdb进入调试模式:

gdb
(gdb)filelinux-3.18.6/vmlinux # 在gdb界面中targe remote之前加载符号表
(gdb)target remote:1234 # 建立gdb和gdbserver之间的连接,按c 让qemu上的Linux继续运行
(gdb)breakstart_kernel # 断点的设置可以在target remote之前,也可以在之后

可以看到进入gdb调试界面

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

 按c键继续执行到start_kernel()函数

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

 然后我们可以使用list命令常看停止断点的源代码:如下图所示就是start_kernel()部分的代码

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

 MenuOS的网络功能

cd ~/LinuxKernel  
git clone https://github.com/mengning/linuxnet.git
cd linuxnet/lab2
make
cd ../../menu/
sudo gedit Makefile 
make rootfs

cd ~/LinuxKernel  
cd linuxnet/lab3
sudo gedit Makefile
make rootfs

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

 TCP连接正常

相关推荐