linux 单步启动_怎么搭建学习Linux内核的运行、调试环境?

正巧,我也是对 Linux 的网络协议栈实现感兴趣[1]。

首先,我认为你最好先说明你的日常的开发环境,是 x86 还是 ARM,是 32-bit 还是 64-bit,是普通 server 还是嵌入式。如果你跟我一样在普通 x86-64 server 上写 Linux 程序,那么我有一个独特的内核学习方法:把相关内核代码编译成用户态程序,然后就像阅读调试普通单线程程序那样学习内核的相关实现。各种现成的静态/动态代码分析工具都能用上[2],单步跟踪也很方便,丢包、乱序等情况也容易复现。目前我在 chenshuo/linux-study 大体上把基本的 TCP 代码跑通了,然后写了几篇笔记:

当然这个办法初始代价比较大,对于学习硬件平台无关的部分是比较适合的。以前也有人搞过,但是现在好像都没啥动静了。Linux Kernel Library

NUSE: Network stack in USerspacE (LibOS)

User Mode Linux (这个还活着,但是似乎跟 GDB 不是很兼容。)

chenshuo/4.4BSD-Lite2 (这个是我搞的,方便《TCP/IP 详解 第2卷》的读者阅读理解源码)

如果你对内核的其他部分感兴趣,可以用 QEMU + GDB 来单步跟踪内核代码运行。你可能需要用 busybox 做一个极简的 img,这样更容易关注你关心的逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值