Linux,代码的海洋,无尽的探索
一开始,大家都在说,Linux内核很厉害啊,操作系统的心脏,所有电脑都离不开它,听说代码有几千万行红帽子linux,也不知道是不是真的,反正特别多就对了,想想就觉得可怕,一个人怎么可能看完,太多了。
代码确实很多,2020年统计的时候,已经有2780万行了,什么CPU调度,内存管理,网络linux视频,储存,驱动,各种各样的东西都在里面,想想都头大,我也不知道它怎么变成这么大的,最开始好像才1万行,现在翻了几千倍,厉害,也不知道是谁写的,太强了。
也不是一个人写的,Linus Torvalds只写了2%,剩下的都是其他人写的,有个人,有公司,谷歌,Intel,Red Hat,他们是大佬,贡献了很多代码,他们肯定很懂Linux,估计工资也很多吧,好羡慕啊。Linux 4.1.15,这个版本有793MB,驱动代码占了一半,体系结构代码,网络子系统,文件系统,核心代码,也占了一点,驱动代码最多,看来硬件很重要。

内核是什么,操作系统的心脏,管理软硬件资源,提供安全访问的接口,听起来很高大上,反正就是很重要,没有它,啥也干不了,它分层架构的,用户空间,内核空间,系统调用接口,还有什么独立于体系结构的内核代码,依赖于体系结构的代码,感觉很复杂,好多概念不明白。

用户空间是应用程序运行的地方,内核空间是内核代码和驱动程序的地盘,系统调用接口是桥梁,连接用户空间和内核空间,内核代码独立于体系结构,可以在不同的处理器上运行,依赖于体系结构的,只能在特定的处理器上运行,也不知道这么分有什么用,搞得这么复杂。
核心系统,系统调用接口,进程管理,虚拟文件系统,内存管理,网络堆栈,Arch,设备驱动,这些都是内核的核心部分,每一个都很重要,少了哪个都不行,系统调用接口用来调用系统函数,进程管理用来管理进程,虚拟文件系统用来管理文件,内存管理用来管理内存,网络堆栈用来处理网络,Arch,体系结构,设备驱动用来驱动硬件,好多东西啊。
要怎么学呢,要学什么,驱动架构,网络子系统,启动过程,内存管理,调度器,进程管理,虚拟化,实时化,这么多东西,感觉学不过来,还是先选一个学吧,要不然啥也学不会,先把一个弄明白,然后再学其他的,就像挖井一样,要挖深,不能到处挖。
用什么工具学,Source Insight是个好东西,代码阅读利器,也可以用VSCode或者Vim,看个人喜欢吧,反正能看代码就行,工具不重要,重要的是理解代码,方法很重要,不能通篇阅读,要像考古一样,研究代码,理解设计思想linux内核24版源代码分析大全,然后自己动手实现linux内核24版源代码分析大全,这样才能学到东西,光看没用。
版本也很重要,建议从3.10版本之后开始,太老的版本可能不太一样,而且要配合开发板,正点原子是个不错的选择,可以买一块来玩玩,这样才能把代码和硬件结合起来,毕竟Linux是用来控制硬件的,不能只看代码,不摸硬件。

大家都在想,学内核是为了什么,是为了提高代码能力,是为了理解Linux的框架结构,是为了成为高手,内核代码都是顶尖开发者写的,是学习高质量代码的绝佳资源,读懂内核代码,就能写出高质量的代码,就能成为高手,就能找到好工作,就能赚很多钱,就能娶到漂亮老婆。
怎么才能学好内核呢,反复阅读,学习,实践,坚持不懈,没有别的办法,就是要花时间,要花精力,要不断地思考,不断地尝试,不断地总结,最终才能从程序员变成软件大师,感觉好难啊,要付出很多努力才行,也不是那么容易就能成功的。
读完内核要多久,如果一天能读一万行代码,那也要2700天,7年多才能读完,这还是粗略估计,内核还在不断更新,要理解所有代码逻辑,要记住所有代码,实际花费时间远不止此,所以,一辈子都看不完内核代码,想想都绝望,感觉学不完了。


所以要调整目标,理解内核思想,掌握特定模块,而不是追求全部理解,这样才能学有所成,才能在某个领域有所突破,才能找到自己的价值,才能在这个行业立足,目标要实际一点,不要想着一口吃成个胖子,要慢慢来,一步一个脚印。
学习内核代码,是为了提高自己,为了理解操作系统,为了更好地工作,为了更好地生活,是为了成为一个更优秀的人,很多人看完这个故事,都会去想,自己是不是也应该开始学习Linux内核了,毕竟这是个很有前景的方向,学会了就能改变命运。
很多人觉得,阅读内核代码很难,需要很强的技术功底,需要很多的时间和精力,确实是的,但是只要坚持下去,就能克服困难,只要付出努力,就能有所收获,学习内核代码,就像爬山一样,一开始很艰难,但是当你爬到山顶的时候,就能看到美丽的风景,就能感受到成就感,就能觉得自己很棒。
学习内核代码,是为了挑战自己,是为了突破自己,是为了让自己变得更强大,很多人都说,内核代码很难懂,但是只要用心去学习,就能理解,只要有兴趣,就能坚持下去,学习内核代码,就像玩游戏一样,一开始很难,但是当你掌握了技巧的时候,就能轻松通关,就能感受到游戏的乐趣。

学习内核代码,是为了掌握核心技术,是为了成为行业精英,只有掌握了核心技术,才能在竞争激烈的市场中立于不败之地,只有成为了行业精英,才能获得更多的机会和更好的发展,学习内核代码,就像修炼武功一样,一开始很难,但是当你练成绝世武功的时候,就能战胜一切敌人,就能成为武林盟主。
很多人都想成为Linux内核开发者,但是他们不知道该怎么开始,也不知道该怎么坚持下去,其实,最重要的是要有兴趣,要有热情,要有毅力,只要有了这些,就能克服一切困难,就能实现自己的梦想,学习Linux内核,就像谈恋爱一样,一开始很美好,但是当你遇到挫折的时候,就要坚持下去,不要轻易放弃,只有经历了风雨,才能看到彩虹。
学内核是一个漫长的过程,要不断地学习,不断地实践,不断地总结,才能有所收获,需要很多时间,需要很多精力,需要很多耐心,但是只要坚持下去,就能成为一个优秀的Linux内核开发者,就能为开源社区做出贡献,就能改变世界。
