Linux内核源码技术学习路线,安排起来~
陆游给世人留下很经典的一句话”工夫在诗外", 这里我想说一句, 学习内核功夫在代码之外。下面我说一个可操作的"方案“吧。
首先要搭建一个Linux的学习环境: 建议使用Qemu虚拟机装个标准的Ubuntu Linux,学习简单的Linux使用方法,重要的是学习编译Linux内核。
从《LNUX设备驱动程序》这本书入手,掌握编写标准的虚拟字符驱动方法,并亲自动写一个,验证通过。
在基于2)的代码里,对于open/write钩子调用backtrace函数 输出驱动ile_ operations钩子函数的执行上下文,并根据backtrace调用栈, 看每个函数上简单看-下它们长什么样, 如果能分析到这些函数属于那个功能模块(比如syscall, vfs, deie..... 就更好了。
再从通用的、基础的功能模块开始学起,比如系统调用原理9,中断处理等等..
第4)点任何知识学习时,建议找相关的参考书帮自己梳理知识脉络,重的是动手修改代码验证自己的理解;比如新增一个系统调用, 注册一个中断处理函数, 看看执行起来是什么样子的。
经过第5阶段的学习,可以系统学习某些大功能模块的机理了,比如虚拟内存、CFS调度算法,PageCache管理,某个文件系统(比如ext2),网络协议栈t等。
学会使用kernel的调试工具,比如qemu + gdb调用内核,还有内核自身提供的ftrace, perf等功能都是很好的测量和分析工具
总体思路:看经典书籍理清知识脉络+自己动手分析代码+编写代码验证或使用工具进行验证分析
进阶路径:先从基础的功能模块,再到复杂的子系统学习
最后说说我自己学习内核的过程吧:
第一阶段是巧遇期(兴趣使然) :第-份工作是与网络相关,自学了《LINUX设备驱动程序》这本书的字符驱动,然后学习了网络驱动部分,然后沿着驱动里面调用的netif nx函数9,将内核协议栈代码看了一个遍。
第二阶段是应用期(工作需要) :通过项目和自学方式,掌握内存、调度这两个重要的子系统,还有一些调测工具的原理(比如perf, ftrace, backtrace, .... ;然后也向内核社区提交过patch
第三阶段:应该是整体Linux的方案设计和需求分析工作,这个阶段更好是将内核好的功能,解决客户的痛点问题,给出一个好的解决方案。
最后给大家安排Linux内核技术学习路线
这里给大家推荐是零声教育的Linux内核源码课程,对标腾讯T9级别。
主要从
进程管理专题
内存管理专题
网络协议栈专题
设备驱动管理专题
文件系统及内核组件专题
全方面系统全面的讲解底层原理开发技术:
最新Linux内核大纲
进程管理专题

内存管理专题

网络协议栈专题

设备驱动管理专题

文件系统及内核组件专题


【文章福利】小编推荐自己的Linux内核技术交流群:【891587639】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!前100名进群领取,额外赠送一份价值699的内核资料包(含视频教程、电子书、实战项目及代码)


适合于
1. 从事业务开发多年,对底层原理理解不够深入的在职工程师
2. 从事嵌入式方向开发,想转入互联网开发的在职工程师
3. 从事Qt/MFC等桌面开发,薪资多年涨幅不大的在职工程师
4. 从事非开发岗位(算法岗,运维岗,测试岗),想转后台开发岗位的在职工程师
5. 工作中技术没有挑战,工作中接触不到新技术的在职工程师
6. 自己研究学习速度较慢,不能系统构建知识体系的开发人员
7. 了解很多技术名词,但是深入细问又不理解的工程师
8. 计算机相关专业想进入大厂的在校生(本科及以上学历,有c/c++基础)
学习模式:
128小时录播课,持续9个月,每周晚上腾讯课堂8点到10点直播公开课
课前预习资料课后思考实践作业
班主任督学作业统计博客统计
老师答疑工作问题课程问题
奖学金机制最高1000元公开透明
