为什么一说嵌入式Linux就老是想到“裁剪”、“阉割”这种修饰语呢?如果你这么理解的话,说明,你对嵌入式还是存在一定的误区的,对自己知识结构的完善是不利的。。。
什么叫做嵌入式呢?虽然目前没有很标准的定义,但业界普遍认为:专门为某个应用场景而实现的计算机系统,都叫做嵌入式系统。家里的四口路由器,手机,平板电脑,甚至是PC主板(注意,我说的是主板,不是整个PC)都是嵌入式系统。也可以说,除了你用的PC,工作站,服务器以外,都可以归纳如嵌入式系统的领域。
在嵌入式系统中,有的是有操作系统的,有的是没有操作系统的。虽然单片机在嵌入式应用中仍旧占据着很重要的角色和份额,但从软件工程师的就业发展来说,带有操作系统的嵌入式系统无疑有着更广的发展空间。
嵌入式操作系统中,有各种RTOS(最有名的,莫过于VxWorks了),也有一些实时性能不错的OS(较新的2.6版及向后版本的Linux可以规划在这里),还有一些实时性能不怎么样的OS(2.4版本的Linux内核,Windows等可以划归在这里)。
所以,根据应用场景,操作系统是有可能非非非常复杂的。所以,嵌入式Linux未必是“不完整的”“阉割了重大功能的”“简单化的”Linux。。。
纠正了概念,统一了你我的认识之后,你肯定就不会再问:究竟是学“纯”Linux呢,还是学嵌入式Linux呢?这个问题是没有意义的。其实,无论是内核,还是libc库,还是各种应用程序,PC和嵌入式的知识是共同的,没有严格界限的。嵌入式Linux跟PC上Linux的区别,更多的在于驱动程序的选择,本地编译还是交叉编译,UI界面的选择等方面。它们的本质技术,是没有任何区别的。
你在嵌入式上可能需要做小量裁剪,你在PC上同样会做裁剪。这并不意味着要阉割重要功能,因为,你在PC上做的工作,同样会希望在手机、平板电脑等这些复杂的移动终端上得以实现的~~~
(如果你只是为了实现一个很简单的功能,那我还是干脆建议你不要学习、使用Linux了)~~
所以,最终的结论是:如果你能精通Linux,那无论是PC上的Linux,还是嵌入式Linux,那么你都是很精通的。嵌入式和PC只是应用场景不同而已(更多的体现在用户空间各种程序的区别)。
如果希望成为一个内核开发者:
如果你对内核感兴趣的话,可以推荐两本公认的经典书籍:《深入理解Linux内核》《LInux设备驱动程序》。这两本,是所有内核开发工作者,读1遍,10遍,100遍,仍旧会认真读下去,并尝试理解每一个字的经典中的经典。
另外,我个人推荐一本《深入Linux内核架构》。这本书是一个德国人写的,对于基础比较薄弱的,是一个很好的自学教材。
如果看起来感觉还是吃力,建议以《Linux内核设计与实现》作为起步。这本书里没有讲透彻的地方,都可以去参看上面的那三本书。这本书,如果读起来也比较吃力的话,建议看看《Linux内核0.11完全注释(赵炯)》。如果连这本书都比较吃力的话,我还真没辙了,建议先看Linux的一些科普文章了。
补充一句:看任何书,永远都无法替代自己读内核源码~~~
如果你要搞应用,那么《UNIX环境高级编程》不可不读。剩下的,就要看你搞什么应用了。