迈入Linux内核学习的神圣殿堂

学习本身是件很玄乎的事情,有些人潇潇洒洒没见怎么用心就能够获得很好的成绩,而有些人则相反,投悬梁锥刺骨也还是成绩平平收获平平。这里面很大一部分的原因就是方法。当然因为每个人的情况并不相同,对于linux内核学习这件事来说,也就没有这样一个标准的方法存在,但是我们仍然可以来共同探讨一下如何才能更加有效的去学习linux内核。

本期特邀请中国Linux内核领域的权威专家将针对在Linux内核学习过程中遇到的问题,给予解答。欢迎午饭积极提问,与专家一起讨论!

专家著作: 《Linux内核修炼之道》 《linux那些事儿之我是USB》

本期专家: 任桥伟

擅长领域: Linux内核与驱动

专家简介: 西安交通大学本科、上海交通大学硕博,资深研发工程师、项目经理、51CTO做客专家,专注于Linux内核与驱动开发。著有《Linux内核修炼之道》(人民邮电出版社)、《Linux那些事》(电子工业出版社)等备受网友关注的专业图书。

精选本期网友提问与专家解答,以供网友学习参考。

Q: 我想问一下专家,为了成为一名合格的网络工程师,他应该了解linux的那些方面?

A: 既然是作为一名网络工程师,首要的自然网络方面的基础,比如局域网、广域网、各种网络协议等,操作系统本身只是作为将这些网络知识给予利用的一个平台。如果是希望从事linux平台上的工作,那么就需要对linux操作系统的系统架构以及工作原理进行一定程度的了解,当然对linux系统本身的使用也要非常的熟练,特别是要能够熟练的掌握linux平台上网络相关的命令、工具。

Q:我想深入学习LINUX,打算从LINUX 0.01那一万行代码开始,你看合适吗?我接触LINIX不多,只有一些粗浅的知识,谢谢。

A: 你的问题实际上可以分解为两个问题:如何深入学习linux,或者说如何学习linux内核?从哪一个版本开始学习比较合适,比如0.01?

对于第一个问题,根据你描述的自己的情况,我的建议是:

1. “先会使用它”,这也是linus本人的回答,也就是说首先要能够熟练的使用linux操作系统。如果连linux是什么、常用的操作都不会就去研究内核,是不可能入“门”的。

2. 看懂内核源码需要一些操作系统、C语言等的基础。

3. 对内核有个整体的理解和认识。这方面,lkd这本书,和我的linux内核修炼之道应该都能够帮助你。

4. 会配置和编译内核,看得懂内核中的Kconfig和Makefile文件,这两个文件就是内核中的地图,看得懂它们,在内核里就不会迷路。

其实也就是我在linux内核修炼之道中总结的:全面了解抓基本,兴趣导向深钻研;融入社区做贡献,坚持坚持再坚持。

下面是第二个问题,从哪一个版本开始学习比较合适?

我个人建议从新的内核开始,固然新内核的代码非常庞大,但并没有说非要求大求全,追求每个部分都要理解。学内核忌讳求大而全,如果对哪部分比较感兴趣,研究相关的源码和change就行了,当然仁者见仁智者见智,自己如果觉得从低版本开始更好更适合,那采用这种方式也未尝不可,毕竟各人的路还是各自走的。

Q:尽管我知道Linux的内核有难度, 但是我还是想知道我要把C语言(或者汇编,再者其它语言)学到什么程度才能有足够的知识去学习Linux内核? -------感谢专家的回答.

A:在《Linux内核修炼之道》的3.1节专门对类似问题做了回答,概括就是:

首先,学习Linux内核并不仅仅只需要C语言的知识,还需要掌握一些操作系统的理论基础,甚至包括一些硬件的常识,毕竟linux内核源码是一个操作系统的核心代码。

其次,对于C语言来说,也不需要很精通,但要能够链表等数据结构的C实现,当然对C越熟悉会越有帮助,意思就是说起码要能够看懂C代码。我们在研究分析内核源码的过程中,要去体会内核源码的美。

Q:老师你好,我现在的目标是做linux系统管理员。我现在的公司是在给移动做电子商务平台的,服务器也是用的linux的。但是我们很多权限都没有,他们是有自己的系统组的负责管理linux的各种事务。我觉得现在的环境不大利于我的linux学习,老师有什么方法或者建议给我吗?或者说我学习linux的一些注意事项或者方法?? 谢谢了

A:首先,环境是可以自己创造的,公司的没有提供很多的权限,可以在自己的PC上搭建实践的环境啊。下面是我个人的一些建议,希望对你有用。

1. 从命令开始从基础开始。了解Linux 的基础知识,包括用户管理、群组的概念等;掌握常用的命令。

2. 作为一个linux系统管理员,要适应与习惯在命令行下工作的方式,并勤于实践。

3. 学习shell等脚本语言。

4. 有一定的网络的基础,包括路由概念、OSI七层网络模型、TCP/IP模型及相关服务对应的层次等。

5. 学会使用文档,学会在linux社区寻求帮助与分享经验。

Q:学习linux内核需要什么样的基础呢?

A:《Linux内核修炼之道》的3.1节即为介绍内核学习的技术基础:

1. 熟练使用Linux操作系统。Linux操作系统是Linux内核在用户层面的具体体现,只有熟练掌握Linux的基本操作,才能在内核学习的过程中达到事半功倍的效果。

2. 掌握操作系统理论基础。只需要掌握操作系统中比较基础的理论,比如分时(time-shared)和实时(real-time)的区别,进程的概念,CPU和系统总线、内存的关系等。

3. 掌握C语言基础。不需要很精通C语言,但能够理解链表、散列表等数据结构的C实现,用过GCC编译器。当然,越熟悉C语言就会越有帮助。

Q:我想问一下 ,学习Linux的过程中, 在真实的机器上操作和在虚拟机上操作有什么不同么?需不需要真实的构建一台纯Linux系统的机器去进行学习?

A:先打个不是很恰当的比方,就像联通的iphone作为iphone的阉割版,基本上并不会影响我们的使用。同样,虚拟机上的linux也基本上不会影响我们去学习各种linux的操作,特别是对于新手。但是有条件的话,我建议还是直接安装个linux系统在机子里,这样起码可以避免心理上对windows的那种依赖。

相关推荐