系统相关
首页 > 系统相关> > 构建调试Linux内核网络代码的环境MenuOS系统

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

作者:互联网

  一,安装并编译最新版Linux内核

mkdir /Linux
cd ~/Linux/
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

因为之前我在嵌入式Linux中做过类似的实验,我用到的编译工具为gcc交叉编译工具链:用以下命令安装:

sudo apt-get install gcc-arm-linux-gnueabi

接下来我们设置编译文件:

sudo make menuconfig

注:menuconfig图形化.config设置界面需要安装前置库 libncurses-dev,直接sudo安装即可,打开menuconfig如下:

之后用键盘↑↓键依次选择Kernel hacking,Compile-time checks and compiler options,[*]Compile the kernel with debug info

 

 然后一路enter exit保存配置。

 

之后我们就可以开始编译内核了,进入/Linux-5.0.0目录下,

sudo make

如果想要升级内核的话需要以下命令:

sudo make modules_install
sudo make install

升级之后需要重启虚拟机,可以通过uname -a命令查看内核版本:

 

 

二, 安装qemu,并通过qemu启动MenuOS

之前在嵌入式课程实验中已经下载安装好qemu,测试一下qemu的情况:

 

 qemu是可用的。

接下来安装MenuOS,我们用到如下命令:

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

其中rootfs为MenuOS的新目录。若初始化成功,我们可以看到以下窗口:

 

 输入help,下面会显示可选用的参数等等。

 

三,调试MenuOS,测试TCP链接,hello/hi程序并用gdb验证:

用以下命令来集成TCP网络通信程序:

cd ~/Linux/ 
git clone https://github.com/mengning/linuxnet.git
cd linuxnet/lab2
make
cd ../../menu/
make rootfs
#server cd ~/Linux/ cd linuxnet/lab3 make rootfs
#client

完成之后,尝试输入replyhi hello命令:

 

 可见MenuOS网络能够正常工作。

 

接下来我们用gdb调试。

修改Makefile,如图所示:

 

 

在Makefile末尾加上一行

-append nokaslr -s -S

然后重启rootfs,画面如下:

 

 我们ctrl+alt+t打开一个新的终端。并用gdb链接。

以下命令均在gdb中运行:

file ~l/linux-5.0.1/vmlinux
target remote:1234
break start_kernel
c   
list

其中在start_kernel函数处设置断点。运行结果如下:

 

 

gdb在main.c第538行停下,在start_kernel()函数处。

 

这样我们成功地用gdb对这个程序进行了调试。

 

标签:kernel,Linux,make,sudo,MenuOS,cd,内核,linux
来源: https://www.cnblogs.com/z501938568/p/12010375.html