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

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

安装,编译linux内核

步骤 1:下载,配置编译为32位

#如果想编译为64位,请直接从步骤二开始。

mkdir LinuxKernel #创建一个项目目录

cd LinuxKernel

wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz #下载linux-5.0.1的内核,当然也可以下载其他版本的,就是有点慢。

xz -d linux-3.18.6.tar.xz #解压

tar -xvf linux-3.18.6.tar

cd linux-3.18.6 #生成32位x86的配置文件

make i386_defconfig

步骤 2:配置编译需要debug信息

#步骤二可以在这步做,也可以在后面做,如果不编译为32位的,想要编译为64位的,直接忽略步骤一,从步骤二开始,但是后面需要更改一些qemu命令的格式,要都按照64位来做,后面我大概提一下,但是具体细节我没做,所以有什么坑我也不知道。

make menuconfig

#执行make menuconfig之后,会跳出一个图形化界面,就在图形化界面中完成以下操作,如果没有跳出,或者报错,自行解决界面大小适应问题:安装vmware tool,或者在设置中调整分辨率。

1:选择 Kernel hacking

2:选择 Compile-time checks and compiler options

3:选择 【】Compile the kernel with debug info

4:按Y 前面就多了一个 [*] Compile the kernel with debug info

5:选择 save

6:按 esc,直到退出图形化界面

步骤 3:编译

make

漫长的等待开始了,直到编译完成。

步骤 4:升级内核

#可以忽略此步骤!!!!因为这个步骤是老师上课讲的的,但是我做的时候,机子在reboot的时候总是错,所以后面就跳过了。

#欢迎大佬指出问题

uname -a

sudo make modules_install # ⚠️安装前通过系统快照备份系统,以防出现故障前功尽弃

sudo make install

sudo update-grub

reboot

uname -a

制作根文件系统

步骤 1:QEMU虚拟机加载内核

cd ~/LinuxKernel/

sudo apt install qemu # 安装qemu命令

qemu-system-i386 -kernel linux-5.0.1/arch/x86/boot/bzImage #这条命令可以不用执行,因为后面构造menuOS的makefile中是包含了这条命令的

步骤 2: 构造MenuOS

下载menu系统,并在LinuxKernel目录下建一个子目录rootfs,当作menuOS的根目录

git clone https://github.com/mengning/menu.git

mkdir rootfs

步骤2.1: 安装libc6-dev-i386和修改Makefile

方式一

#修改menu目录下 Makefile的qemu 那条命令

cd menu

sudo apt-get install libc6-dev-i386

vim Makefile

qemu -kernel ../linux-3.18.6/arch/x86/boot/bzImage -initrd ../rootfs.img #修改前

qemu-system-i386 -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img #修改后

解释下: qemu-system-i386 -kernel ../linux-5.0.1/arch/x86/boot/bzImage 是qemu虚拟机加载 linux-5.0.1内核

方式二

#如果不想使用qemu-system-i386,仍然想使用qemu命令,就改为如下,然后执行一个软链接

qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img

sudo ln -s /usr/bin/qemu-system-i386 /usr/bin/qemu

我的做法是方式二

步骤2.2 初始化根目录

linux启动后期会在根⽬录中寻找⼀个应⽤程序来运⾏,在根⽬录下提供init是⼀种可选⽅案

#在menu目录下执行一下命令

make rootfs

结果应该是这样

db0db63a130ce4eecde477ca1ef85484.png

回车,然后执行help命令查看当前构建的menuOS系统中的命令 ,其他命令都可以,但是quit命令无效,hh。

0a52a14785ec8d624267345ca7c215d2.png

gdb 调试

在执行gdb 调试之前,保证make menuconfig那个步骤已经执行,不然编译的内核系统不含调试信息。

步骤 1:启动gdb server

1 关闭 之前打开的menuOS系统界面

2 执行 qemu -kernel ../linux-5.0.1/arch/x86/boot/bzImage -initrd ../rootfs.img -append nokaslr -s -S

为什么和老师的不一样?em 我也不知道为什么,可能teacher给的命令只适合teache的机子,反正我又是一堆错。

步骤2 gdb客户端连接gdb server

#打开另一个终端

gdb

file ~/LinuxKernel/linux-5.0.1/vmlinux

break start_kernel

target remote:1234

c

list

如图

46fc306ad0353cd84038d4fca3bc2a8b.png

多打几个断点看看,内核启动的过程,具体细节再研究研究。

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

步骤1: 将 TCP 网络通信程序的服务端集成到 MenuOS 系统中

cd ~/LinuxKernel

git clone https://github.com/mengning/linuxnet.git

cd linuxnet/lab2

make

cd ../../menu/

make rootfs #改一下Makefile

步骤2: 将 TCP 网络通信程序的客户端集成到 MenuOS 系统中

cd ~/LinuxKernel

git clone https://github.com/mengning/linuxnet.git

cd linuxnet/lab3

make rootfs #修改Makefile

结果如图:menuOS下面已经多了replyhi,和 hello命令,后面再看细节。

d6993621b3a5424699a8e02124e5ad19.png

标签:kernel,..,步骤,make,Linux,MenuOS,内核,linux,qemu

来源: https://www.cnblogs.com/Alexkk/p/11997737.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值