大家好,今天小编关注到一个比较有意思的话题,就是关于学习linux内核需要多久的问题,于是小编就整理了3个相关介绍学习Linux内核需要多久的解答,让我们一起看看吧。
需要多久才能看完linux内核源码?
如果你的目标仅仅是看完,内核源码2000+万行,你给自己你个目标每天看多少行吧!而如果不要完全看懂这二千万行代码,恐怕要花掉你这一辈子光阴,都不一定能达成目标。
linux内核代码算是开源社区里面一盏明灯般的存在,虽然代码是开源但是核心领域能够看懂并且能够真正修改的数量极其的稀少了,大部分代码的更新更多是外围设备功能的增添,这种修改距离内核级别的改动还是存在本质的差异,而且很多中国的程序员已经参与到很多模块代码的提交了,证明了中国软件行业也在快速发展壮大过程中,证明了很多国内程序员已经度过了最原始的积累过程。
从一个程序员对于编程系统掌握的层次来讲,首先是基础编程语言的语言学习过程,然后是能够看懂代码,最后是代码的项目实战过程中,其实看代码和写代码的过程两者属于相辅相成的过程,不断的研究代码机构从中汲取精华然后应用到实际环境中,在实际项目中找到具体的场景把自己掌握的一些理论模型在实战中发挥出来,这种属于学以致用的典型,所以一个成熟的程序员需要不断的研究新的代码机构,然后想办法在实践中展示自己的能力,形成良性的在现实中很多程序员在初级入门阶段还是积极的学习优秀的代码,在掌握了一定层次的编程能力之后就放慢了学习的脚步,这种模式下非常容易慢慢落伍。
如果从一个普通C++程序员的角度慢慢学习linux内核,需要具备以下几种基础首先由一个认知linux内核的代码是C语言和汇编完成,单纯的C++未必能够满足其基本的研究需要,所以先要把C语言的基础语法以及内部关键的语法掌握清楚,同时掌握一定的汇编知识,在linux内核的影响效率的地方会使用汇编,所以掌握了汇编和C语言基础的语法之后再去尝试研究linux内核源码,如果不准备好基础编程语法,去研究linux内核将是一种灾难般的存在;对linux内核的api接口有一定的了解,了解外围的调用接口才能有助于了解内部是如何实现的,对于linux内核的驱动常规知识也需要有一定程度的掌握。
至于需要多长的时间能够看完linux内核知识,这种时间是无法确定有些人linux内核已经研究十几年了还是觉的里面有很多不了解的地方,可以尝试先从基础的模块开始熟悉从宏观上了解其工作原理,然后根据自己的兴趣爱好找到感兴趣的模块进行研究学习,不要指望多长时间能够掌握透彻,能够当成一辈子研究的事业去做,不要尝试给自己设定时间去完成学习linux内核这种巨大的工程,可以设定时间掌握宏观的框架,但更合适的做法是当成一种兴趣爱好长期去做,希望能帮到你。
Linux内核分为CPU调度、内存管理、网络和存储四大子系统,针对硬件的驱动成百上千。代码的数量更是大的惊人。看看最新的关于内核代码量的统计。
从图中可以看出,2020年1月份,内核的代码量大约是2千6百万行。回忆你一下你一天能看懂多少代码?反正我自己觉得自己一辈子都看不完Linux内核的代码。
其实阅读代码无非是为了学习代码中有用的内容,所以,我们没有必要阅读所有的代码,只需要阅读关键的代码,或者说对自己有用的代码。
由于内核分为四大子系统,因此我们可以选择自己相关的子系统来阅读。比如你是做存储相关的,可以阅读存储栈相关的代码,如果你是做网络的,你可以做网络相关的代码。
对于代码阅读方法从两个角度来介绍,一个方面是需要选择一个比较有效阅读代码的工具,这样能辅助我们来理解代码;另外一个方面是先阅读基础代码,比如链表,自旋锁等等。
当然,Linux内核确实博大精深,想要一下子搞明白是不可能的。
有些人推荐先阅读一些低版本的内核,比如0.01版的,总代码量才1万行左右。阅读这个代码大概一个月应该能比较清晰了。但是,改代码与现在的代码差异巨大,阅读后可以理解基本思想,但对理解现有代码的帮助不是特别明显。所以,还是要根据自己的需求来选择性的阅读比较好。
老铁,我也在学习linux内核,我说一下我的想法吧。
我曾经很早的时候就想学习linux内核了,当时准备啃书,并对着代码看,热情了一阵子,可由于太深奥就不了了之了。
最近工作原因,涉及到内核文件系统的研究,重新学习内核,感觉比较容易弄懂了。为了避免走弯路,我建议:
1. 不要一来就对着内核源码啃。内核源码压缩后现在都一百多M了,有生之年你也别想全看完弄懂,各种算法,诡异的写***弄晕你。
2. 先找一些内核实现原理的书来大致看一遍,这个时候不必深究细节,不懂的就做一些问题清单记起来。
3. 内核由几大模块构成,你要大概了解它们的相互关系。例如进程中就记录了打开的文件信息,进程的地址空间主要内存管理模块来分配和管理内存。
4. 选择一个模块作为切入点,通过实验对内核下手!我是从文件系统这块开始的,比较简单这次没有搞晕我了。
5. 必须动手实验,光看书是没用的!!!你亲自通过加打印,或断点调试跟踪代码调用路径,通过自己写代码实现一些功能后,你自己会豁然开朗,信心大增了!
希望我的回答对你有用!
linux 0.11的内核源码,结合下面这本书,我花了大概一个寒假(1个半月),看了一遍。
然而,现在的内核已经膨胀的不成样子了,以还不算最新的linux-4.9.229为例:
整个内核源码一共约 801M:
驱动代码占了大概一半,大约407M:
体系相关的代码大约164M:
网路子系统相关的代码29M:
文件系统相关的代码38M:
linux内核核心代码大约7.7M:
但是就这7.7M,其实你要完全看完看懂也不容易。linux内核代码涉及c语言、硬件组成原理、操作系统、数据结构和算法等,这些基础知道你都具备了吗?如果没有具备,即使看完linux内核源码,你也看不懂liux内核的精髓。
编译内核,多长时间?
编译时内核需要时间,短的话半小时就够了,慢的要五六个小时。
联网需要下载一些相关文件,由于机器性能不同,编译内核所需要的时间不同。还要看有几核的cpu, 4核的一般2个小时不到,8核的半小时差不多吧, 性能差的电脑,有可能需要等待5 ~ 6个小时。
学习嵌入式开发的过程难吗?
从我自身的经历来看,学习嵌入式入门容易,但是精通比较难,主要的难点在如下几点:
1)芯片层面。芯片的硬件资源,gpio、时钟、复位等,搞清楚还是挺容易的,但是芯片内部的架构、各ip的选择、性能指标的确定,这些不是短时间内能掌握的,需要长时间的打磨才有可能。成本、功耗、性能如何做到均衡,对于一个好的嵌入式芯片来说至关重要,而这需要对芯片设计和产品应用均有长时间的理解才行。总的来说,嵌入式芯片的使用入门容易,但是好的芯片设计较难。
2)硬件层面。嵌入式系统的硬件设计一般都易入门,它的难点在于如何设计一个可靠的电路,如何控制成本功耗。不同水平的硬件工程师设计出来的电路差别很大的。
3)软件层面。编写一段嵌入式代码容易,但是如何用有限的资源完成高性能的任务,这个是难点。毕竟嵌入式系统可用的资源都是有限的,flash、RAM的大小受限,主频受限,等等。习惯了PC编程的,肯定无法理解嵌入式软件设计中的斤斤计较。
刚开始是比较难的,但是一旦摸到门路后,就会学得很开心、进步很快。一般来说,学习嵌入式一般是以下过程:数模电-->51单片机-->STM32单片机-->QT/RTOS-->Linux。每一个阶段都有难的,但都是前一个阶段积累来的,慢慢来的话,也不会太难,坚持并相信自己就好,有需要就学,热爱就学!加油吧!
如果你从来没接触过,学习的过程还是挺难的,但是如果你有软件和硬件基础,再加上毅力和恒心,也能够由入门到精通的。下面根据我自己的一些经验给你一个学习的路线和方法:
首先拿出大学里的C语言、数据结构、计算机基础、高等数学、数字模拟技术和数字电子技术 这些书来学习软件基础和硬件基础。
看到这些书有没似曾相识的感觉,仿佛回到大学时代!
C语言:
这个不用说了,软件入门的开始,把每课代码例子手动敲一遍,不是为了敲代码而敲代码,而是熟悉编程方法和编程思想。
数据结构:
数据结构一定要学好,这个关系以后你的代码 是“土鳖”编写的还是"土豪"编写的;
这个关系到以后你的代码 大小是10k还是100k,还关系到你能否往更高领域公司百度阿里物联网云计算、自动驾驶、智能机器人方向发展。
高等代数:
到此,以上就是小编对于学习linux内核需要多久的问题就介绍到这了,希望介绍关于学习linux内核需要多久的3点解答对大家有用。