如何学习linux内核


面对linux内核,不知从哪里看起,建议从以下几个方面入手:
1.内核的启动流程,从系统上电开始,到第一个用户进程init启动,这个过程涉及了linux内核初始化的方方面面, 理解这个过程,可以对进程管理、内存管理、文件系统管理、异常中断机制、时钟、内核线程有比较深入的理解;
2.时钟中断处理流程,时钟就像一个操作系统的心脏,控制着操作系统运转的节拍, 如果能对时钟中断的整个处理流程有一个清晰的认识,那么对linux内核的运转机制也就理解的差不多了,因为时钟中断,涉及到时钟、中断机制、进程调度等linux内核核心功能;
3.系统调用流程,中断是进入linux内核的异步方式,而系统调用的整个流程也是中断,准确的讲叫异常,是进入内核的同步方式,通过软中断指令触发;
4.程序的加载执行过程,你在shell命令行下执行了一条命令,内核做了哪些工作,理解这个过程可以对进程创建、加载可执行文件等进程管理和文件系统管理等方面有比较深入的理解;
5.内核驱动程序,虽然对内核驱动程序研究的较少,但是了解内核驱动程序的处理机制,也是了解内核的一种途径,特别是对内核的同步机制会有比较好的理解。
以上五个方面都不是相互独立,而是彼此之间都有着联系,所以理解其中某个方面,对内核的另一个方面的理解也会有积极作用

学习linux内核,这个可不像学一门语言,c或者java一个月或者3月你就能精通掌握。学习linux内核是需要一步一步循序渐进, 掌握正确的linux内核学习路线对学习至关重要,本篇文章就来分享学习linux内核的一些建议吧。
1. 了解操作系统基本概念。如果不会,可以学习《操作系统:设计与实现》Andrew S.Tanenbaum 写的那本。以MINIX为例子讲解操作系统的概念。非常推荐。
2. 有了操作系统的基本概念以后,可以了解Linux的机制了。推荐《Linux内核设计与实现》Robert Love 写的。 这本书从概念上讲解了Linux有什么,他们是怎么运行的。这本书要反复认真看透。
3. 有了Linux内核的了解,还需要具体研究Linux内核源码。经典的就是《深入理解Linux内核》Daniel P. Bovet 写的。学习这本书的时候,要对着内核代码看着学。这本书学起来相当费力了,那么多多代码要研究。不过这本书如果学明白了,恭喜你,Linux内核你已经很熟悉了。
4. 如果要开发设备驱动,可以学习《linux设备驱动程序》O'Reilly出版社的。这本作为驱动的入门是很好的资料。另外还有一本《精通Linux 驱动程序开发》也是不错的教材,可以参考着看。学习驱动,免不了要学习一些硬件的协议和资料,研究哪个就找到相应的硬件文档,把硬件的工作原理搞明白。这些就不细说了。
5. 网络部分,学些Linux网络部分就学习《深入理解LINUX网络技术内幕》。这本书把Linux的网络部分讲的非常清晰透彻。 但是通常不做这方面的工作研究,也不用研究这么深,毕竟现在相关职位较少。
6. 现在Linux相关的工作,多集中在一些嵌入式开发领域,arm,mips等,要学习以下这些体系架构的的资料,了解CPU的设计和工作方式。ARM就看对应的芯片手册,讲的很细致。MIPS就看 《see mips run》,有一二两版,两版内容有些差异,推荐都看。
7. 补充一点经验。不要认为Linux很庞大,很复杂,就觉的很难学。任何东西认真学下来都是能学会的,看你都恒心和毅力了。 另外,不要走弯路,不要看市面上讲什么Linux0.11的那些书,直接学你要学的东西。就像学C语言看什么谭浩强一样,弯路走了,力气没少花,还严重影响学习效果。
关于linux内核学习路线,再多说几句应用编程,有时候经常会需要的:
1. 学习Linux应用编程,建议看《unix环境高级编程》,把里面的例子都做一遍,会对整个Linux编程有系统都认识。
2. 针对Linux,有本 《Linux系统编程》,学完上一本,这本很快看一遍就懂了。主要是针对Linux具体懂一些内容,讲的挺全了,很实用。
3. Linux网络编程,系统的学习一下《unix网络编程.卷1,套接字联网api》,基本上网络应用相关的程序就都没问题了。
这些内容,分几年时间,分步计划学习,就会成为Linux高手了

100次点赞 100次阅读