背景介绍
自己平时工作内容集中在单片机和RTOS上,由于平时工作经常需要做算法落地,深感算力不够对算法落地所增加的难度。因此在工作之余,逐步开始了解linux这块的知识,以期在不久的将来,不再因为芯片算力不够而去采取降低算法指标来实现算法落地。
很感谢EEwrold和笨叔给予这次机会,能够给到这次机会来系统性的学习linux内核只是和常见问题的调试技巧。而这些知识在后续的工作中很可能经常用到。
初识本书
本书属于第二版发行,针对第一版发行时读者反馈的一系列问题,内核版本迭代中新增的特性,以及补足内核调试技巧的需求,笨叔进行了重新修订发行。从本书的目录结构上看,个人认为本书特别适合以下人群反复阅读:
- 有一定linux内核开发经验,但缺乏系统性了解的linux内核工程师
- 有一定rtos开发经验,希望更进一步学习了解linux工作原理,甚至上手进行linux系统开发的工程师
- 有linux求职需求的求职人员
- 目前正在学习linux系统的师生
个人推荐阅读方式
针对有Linux系统开发经验的人群
个人推荐方式为,搜索目录,选定与自己所需要查询问题相关度很高的标题并跳转至该章节阅读。此外,若目录中章节描述与想了解内容相差较大,可以尝试直接跳转至每一章的开始部分,此部分会留出“本章高频面试题”的问题列表,个人理解此部分内容为本章节主要知识点,可以通过这些知识点确定是否有所需要查询的内容。若搜索目录和章节开始部分都无法定位到自己想了解的知识点,那只有一种办法,粗看章节内容确认是否有想了解的信息,若有,则细看,若无,则查阅其他资料了解。
针对无linux系统开发经验的人群
首先,个人建议尽可能的从头读到尾,逐步加深的方式去学习。在这一点上,有个可惜的点,我曾经为了寻找到一个很好的看linux内核源码的工具,花费了两周时间,但还是没有找到特别合适的工具。而本书的开头提到,可以使用Source Insight或vim来查看linux源码,而这两个工具之前是被我否决的,被否定的原因是:Source Insight在文件数多时经常奔溃,且无法精确定位函数的跳转关系,另外,Source Insight的项目工程文件为十六进制存储的,无法编写工具直接将所使用的文件自动配置到工程中(目前看过的基于方案商的linux源码都比较乱,驱动和框架文件全部塞到 Drivers目录下,且不少文件直接塞到框架文件中,手动排除比较困难)。VIM的问题是,只能单个文件单个文件的查看和修改,跨文件间的函数跳转很难实现。但是呢,在阅读本书的“如何阅读本书”章节时,我发现笨叔有提到怎么使用Vim来阅读linux内核源码,可惜具体使用方法在《奔跑吧Linux内核入门篇》中,要更进一步的了解,只能通过看那本书实现了。
其次,最好搭建一个linux内核的阅读和实验环境,如笨叔推荐的QEMU虚拟机模拟的方式,在学习书本知识的同时,通过动手操作的方式加深理解。
最后
Linux内核发展了30多年,已经从一个只有不到1W行源码的小项目发展至如今这种无法用一个工程去查看linux内核全貌的程度。变成了一个看似入门简单,实则短时间内只能熟悉小部分模块,需要长时间的积累才能相对精通的大项目。个人认为,如何降低Linux学习和深入难度已经成了一个需要解决的问题。而在这个问题解决前,我们能做的是,根据前人的经验,从地基到各种框架,一层一层地学习和应用,逐步理解Linux的运行机制,以至于最终能够系统性的解决实际应用中Linux暴露出来的问题。