构建调试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