怎样快速调试Linux内核
对于学习Linux内核,或者跟踪Linux内核的人来说,经常需要运行和调试新Linux内核的功能。
但修改内核然后提供给当前工作的系统,很容易破坏工作环境。这里提供我使用的一套脚本,用于快速测试/调试新的,或者刚刚被你修改过的内核。通过这样一套系统,读者可以很快试着使用或者跟踪Linux内核。建立一个这样的工作环境,也有利于我们后面在讨论其他Linux功能的时候,读者可以马上进行验证。
我把脚本共享在这里:nekin2017/lk-tester-maker
这个脚本我仅在Ubuntu的15.04和16.04上调试过,其他平台能不能跑我不知道,读者如果使用其他系统,就要自行修改,但我这里会解释一下原理。
这个脚本的原理很简单,它做了两件事:
1. 它提供一个基本的.config文件,你用这个.config文件编译内核,可以用qemu把内核启动起来,启动的参考参数在run.sh中给出了,基于这些参数,你可以增加比如-S -s这些参数,就可以用gdb调试内核(这个事情我做得很少,我更多是通过ftrace直接跟踪特定模块的功能)
默认的.config是4.6内核的,如果你内核版本不同,编译前做一次make oldconfig即可。这个配置下开启了9PFS文件系统,允许你从虚拟机中直接访问本地的目录
2. 它提供了一个genroot.py脚本,这个脚本可以基于你的本地文件系统,直接生成一个根文件系统, 用于你的新内核。如果你缺什么命令,直接在脚本的elfs_to_copy中增加这个命令即可,关联的库会被自动拷贝进去的。
有了这样的环境,你编译完内核,就可以直接从虚拟机(而且不需要图形支持,全部在命令行可以完成)运行这个内核,而且也包含了你需要的用户层的命令,随便怎么改都不会弄坏本地系统了。
有问题可以在这下面问,如果自己使用的过程中做了什么有价值的修改,欢迎发Patch给我。
相关文章