轻松认识 Linux Kernel

English

三十年前,第一次接触程序。

二十年前,独立开发了一个单片机系统,卖了技术。

十五年前,换了家公司,开始做国内一线寿险公司核心业务。

十年前,寿险公司核心业务升级,这件事刺激了我,于是开始着手做工具,目地明确:你读程序,我看史记,你用一个小时研究代码,我用十分钟了解逻辑。

一年前,我失业了。于是开始对这个工具产品化。命名为《程序逻辑抽取器》。

这个工具实现了我最初的需求,使我能够轻松面对浩瀚的代码,从容地讲出业务逻辑关系。

六月份,我决定抽取Linux,这个让绝大多数程序员都有“想要了解”的想法,同样也是绝大多数程序员没有“勇气”读下去的代码。

抽取原则:最大限度的覆盖源码文件(参考makefile),尽量不修改源代码(主要修改为条件编译,在ple_build.c中有修改注释)。

抽取环境:windows 8。没有任何与linux有关的环境。

抽取版本:基于linux 4.0.4,当前版本:5.5.9

抽取范围:x86-32位平台内核部分,没有包含内存和文件部分及其它(这已经很大了,在不调整的情况下,抽取需要三个工时)。

你可以通过以下入口了解linux:

我们已经整理的,主要是内核启动部分(对于linux我们不专业,敬请谅解),希望达到抛砖引玉的效果,这个入口不保证遍历到全部函数。

通过函数Tree,你可以轻松遍历全部已抽取的函数。

2020/3/12增加华为鸿蒙抽取结果。

2022年8月,工具更名为:源代码转换工具--SCCT。增加对java的支持,实现了插件化输出。

不足:

由于抽取环境的不足(没有linux环境),并没有完全实现代码全覆盖。就算有环境,理论上也不能达到全覆盖。
没有抽取汇编代码,因为我们不懂汇编。这个也导致有些函数引导出现错误,比如die这个函数就会引导到arch/x86/kernel/dumpstack.c中的实现。
存在一些未解符号,这些大部分是由于条件编译的原因没有抽取到,由于每一次修改编译条件都会引起连锁反应,于是我们做了一下技术处理,把未解符号控制在一定范围内,认为是可以接受的。另外还有一些我们也没有找到出处,比如/lib/oid_registry.c中的oid_search_table,从上下文看,应为数组,但.h和.c中都没有定义,我们判断很有可能是宏生成的,但哪里生成的呢?如果你知道,请告诉我们。

知识点:感谢西安邮电大学陈莉君教授建议增加并提供链接点。

感谢:

以上Linux的注释,全部来源于网络,无法一一列举,再此一并致谢。
感谢我的领路人:李大哥和焦大哥。
感谢工具制作中,给予帮助的人。
感谢我的家人。

你的参与可以使我们做的更好!
由于人力、物力、财力的原因,我们希望你的赞助:
方式一:为了更多的人能够了解linux,你可以注解源码,我们会定期更新。
方式二:提供或介绍商业抽取机会。我们能够抽取嵌入式SQLc(大型数据库,Tuxedo等三层架构,我们有实际案例)、标准c程序。我们能够对代码做深度抽取,协助开发人员发现问题,根据您的需要输出文档。
方式三:现金赞助:工商银行,账号:622200 0200120300348,账户:武松山(请务必留下联系方式,我们不知道明天会发生什么事,但我们知道今天应该做什么)

武松山               
2015.8.6                 
qq:893986751
qq交流群:476570507
email:wu_songshan@126.com
tel:13436368359(如无急事,请勿打电话,因为我不擅长接电话)