本期特邀Linux内核资深开发者、畅销图书作者陈学松老师,针对Linux内核的学习问题给予解答,欢迎网友积极提问,与专家一起讨论!
专家著作:《深入Linux设备驱动程序内核机制》
查看本期门诊精彩实录:http://doctor.51cto.com/develop-263-2.html
参与最新技术门诊:痛并快乐着的正则表达式
精选本期网友提问与专家解答,以供网友学习参考。
Q:
1.想学习内核,Linux内核代码是非看不可的,看的过程中必然会出现理解上的偏差,这种情况可能就需要把内核跑跑看,我想问的是,现在我有一份内核代码,然后我修改了里面的一部分代码,我该如何对它们进行调试呢?需要哪些步骤或者工具?
2.本人从事服务器开发,对IO模型(select,epoll),进程,网络和文件这些模块比较感兴趣,现在我有一段比较长的时间可以慢慢消化这些,请问以怎样的优先级进行比较好,另外还有哪些相关模块是需要去了解的?
3.希望推荐几本由浅入深,循序渐进的书籍吧
A:
1.关于内核调试,本身就是非常有难度的事情。我个人的感觉,printk最有效。至于其他什么kgdb...你也可以试试
2. 进程,文件, IO模型,网络。个人建议
3. ULK,不过版本有点老。当初我唯一参考的内核书籍。
Q:
老师您好:请问一下,现在LInux内核都出到3.4版了,Ubuntu上的最新版本是3.2版,我把最新的内核源码下了下来,准备好好看一看,就是不知道新版内核和原来的版本之间有多大的改变或者差异呢?
A:
多大的改变和差异看和以前的哪些版本比,3.4和2.6.35的版本差异都不是很大。其实这个问题以前有很多人问,就是学习内核到底是看最新版的还是老版本,因为有很多内核方面的名著根据的版本比较老,书出版后不可能向内核版本那样更新频繁。在我看来,这不应该是个问题,如果是新手,想从头理解内核一步一步如何运行起来的,内核0,11的版本也许更有价值(我没看过,当时我是直接从2.4的版本看起的),如果对内核有相当程度的理解后,可以去追踪一下新的内核,其实现在内核版本的更新更多的是驱动,还有是bug修正,主干部分的变化没有那么频繁。
Q:
陈老师,您好! linux是一个很好的发展趋势、但是像我们学网络技术 的 只学习了linux服务器的建设、还有shll 简单的语言、、在论坛里看到有很多linux内核的学习和开发、、我想问一下、学习linux内核 开发,有什么好处、还有就是、是不是需要懂一些linux的语言、内核的开发又能开发能开发出什么(可以说一些可以用到的开发出来 的软件)、、、还有内核的嵌入、、又是怎么会事、、、、、嵌入和开发又有什么不同、、?
A:
我一直不理解问题下方的埋起来是啥意思?不过不管埋不埋,这里所有的问题我能回答的都会写几句。
很多同学问学习Linux内核有什么好处?其实如果从实际工作出发,并不是说大家都需要学习内核,假设你的工作一直侧重在应用层方面,比如你说的linux服务器的建设,shell脚本等,这方面化很大精力做熟对将来的工作也是很有帮助的。之所以强调内核的学习,一方面是因为它跟我的平时工作相关度比较大,二则是因为它能满足我很大的好奇心,我个人觉得Linux最大的好处在于贡献了一个开源的操作系统,学习它可以透彻理解操作系统教科书上那些抽象的概念,最后才是,内核源码中包含着太多有价值的东西,认真学习它,可以让你理解代码背后的东西,也可以借鉴其思想。学习内核不意味着一定要参与内核的开发,当然如果能向内核社区提交代码并被接受,也是一件非常有价值的事情。我们平时讲内核开发,基本上是指如下的领域,比如嵌入式Linux,设备驱动,内核模块,性能优化等等。所谓嵌入式开发,是个很宽泛的概念,简单地可以理解成相对于常见PC上的软件开发。其实概念本身的区分并不重要。
Q:
我在51cto看到您刚出版的《深入Linux设备驱动程序内核机制》一书的部分章节,自己完全看不懂。
如果能看懂您这本书,需要具备那些基础呢?C语言、汇编、计算机体系结构?需要这些吧,还有其他的要求吗?
您能不能推荐本经典的帮助我汇编入门的书呢?我感觉汇编真得很难,有本好书,可能会好些入门吧。
还有个问题:学习linux内核,对发行版的linux,比如redhat,能达到什么样的能力就可以了呢?
是不是掌握基本的操作命令,熟练vi等编辑器,熟悉shell就可以了呢?搭建服务器应该属于运维范畴,学习内核应该不需要多少了解吧。
冒昧问您一句:您对linux的掌握,在什么水平呢?
A:
其实这本书并没有你说的那样难懂,如果读者以前有过Linux下设备驱动开发经验,应该很容易理解的。学习这本书,我个人觉得并不需要特别多的基础,操作系统的一些基本原理了解了就足够,至于汇编,并不是强制性的规定,因为书里虽然有部分汇编代码,但是我都会予以解释。C是必备的,这个就不多说了。
经典的汇编入门书,我当初好像看得是清华史美林编的,具体书名忘了。说实话我对各个发行版都不怎么熟悉,很多命令我都不会用。
最后关于你冒昧的问题,我对Linux的掌握,内核那块应该还能拿出手,至于更上层的发行版,或者是Linux下的应用开发,基本上都不太懂。我也不知道是个啥水平。
Q:
看linux相关的书籍已经有几年了,但一直没有做过linux相关的项目开发。如果想从事linux嵌入式开发或驱动开发,应该掌握哪些知识和技术呢?对于有经验的linux相关开发者和没有经验的差距在哪里?
A:
LInux的嵌入式开发的范畴很广,如果是侧重在驱动开发的话,那么我觉得主要是两点:一个是对内核中如何支持设备驱动的相关代码要了解,另一个是对硬件要了解。没经验的话,你可能要看很多文档,慢慢去熟悉开发流程,熟悉如何去写一个设备驱动。
Q:
陈老师:
你好,我是linux内核的初学者,在学习内核的过程中,发现不同内核的版本,某些版块某些细节的代码,或者数据结构都不同,毕竟linux内核是许多人一起维护的,对于一个初学者,选择哪一个版本学习,更有益呢?是linux的初始版本,还是最新的3.0,或者常用的2.6呢?
谢谢!
A:
你如果有很强的基础了,可以跟踪最新的内核。但是对于初学者,不建议采用最新的内核版本,因为内核版本的更新大量的代码是在bug fix和设备驱动方面,这些对于初学者毫无帮助。如果真想完全学习理解一个内核,那么不如从最单纯的初始版本看起,在理解了基本原理之后试着模仿着写自己的代码。
Q:
陈老师:
你好!
我一直想学linux 驱动和内核移植,但不知从哪里入手,先学什么,前一段时间arm9裸跑,写了基于mac收发数据的程序,现在只是菜鸟,只会装虚拟机和linux系统。我想请教您一下:
1、以后搞linux 驱动和内核移植的话,除了要先学会linux环境saba配置和读懂启动代码外,还需要学那些呢?你只要把要学的大概概括一下就行,我有个方向。
2、一般 2年linux 驱动和内核移植经验,水平一般,能拿多少工资啊?
O(∩_∩)O谢谢!
A:
1. Linux驱动的话没必要去看那些启动代码,如果内核移植的话,就有必要看了。启动代码跟处理器的关系比较密切。其实关于这方面的问题我前面的回帖中已经讲了不少。
现在我发现提问的同学当中很多都没有太多Linux的经验,那么如果真想去学Linux内核的话可能要付出更多的努力,这个主要在于自己是否有兴趣有毅力去学习。学习内核的话,计算机体系架构,处理器方面的,编程语言(C和汇编)估计都要学习。
2. 关于工资的问题,我无法给出一个具体的数字,其实这个问题不应该问我,关于薪水,应该有专门的公司去调查市场上的行情。
转载于:https://blog.51cto.com/doctor/910480