构建调试Linux内核网络代码的环境MenuOS系统
下载linux内核并编译
1. 下载linux源码
下载地址,下载之后解压即可。【本次使用的linux-5.0.1版本】
安装编译所需的工具
1 sudo apt install build-essential flex bison libssl-dev libelf-dev libncurses-dev
生成X86配置文件
1 make i386_defconfig#生成x86的配置文件 2 make menuconfig
进入GUI编辑配置文件的生成
依次选择:Kernel hacking =====》 Compile-time checks and compiler options ====》Compile the kernel with debug info 然后保存配置文件并退出。
之后make开始编译:
1 make
通过qemu来加载menuOS
首先安装qemu工具
1 sudo apt-get install qemu
建立软连接,使得之后可以直接执行qemu
1 sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu
制作根文件系统:
1 git clone https://github.com/mengning/menu.git 2 mkdir rootfs #创建根文件系统 3 cd menu 4 sudo apt-get install libc6-dev-i386 #在64位环境下编译32位安装 5 vim Makefile #修改git来的menu下的Makefile文件 6 qemu -kernel /home/lmm/linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img 7 make rootfs #初始化根目录
得到:
成功!
通过gdb可以跟踪内核代码
另外打开一个终端,输入
gdb
flie /home/lmm/linux-5.0.1/vmlinux
break start_kernel #打断点,跟踪内核代码执行
c #执行
查看跟踪结果:
可以看到成功跟踪到start_kernel内核函数。
验证MenuOS的网络可以正常工作【TCP通信】
下载老师的通信代码:
1 git clone https://github.com/mengning/linuxnet.git
修改lab3下的Makefile的qemu为自己的绝对路径下的
1 qemu -kernel /home/lmm/linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img
然后分别在lab2和lab3执行如下代码:
1.make rootfs
然后使用help查看可食用命令并键入一下代码验证可使用TCP通讯:【如下】