仓库源文

.. Kenneth Lee 版权所有 2017-2020

:Authors: Kenneth Lee :Version: 1.0

怎样快速调试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给我 。