http://bbs.chinaunix.net/thread-4192836-1-1.html
我现在是一名大四学生,专业学的是软件工程,已经基本看完了《Linux 0.12内核完全剖析》这本书,但是这本书与现在内核差异比较大,现在也编译过2.4内核(毛德操先生的书中所用内核),但是毛德操先生的书也是比较厚,所以在开始研究之前先来请教下各位先辈。
在今年校招时我也是一心想做内核,但是无奈各大企业这方面招的人太少,移动、前端、Java岗位那么多,内核岗位根本找不到,即使有,那也是研究生岗位。曾经兴致冲冲去投了360的Linux内核工程师,结果做的笔试题全是Windows内核,至今不明白咋回事。
目前拒掉了一份深圳8000的offer,因为工作内容是机顶盒C/C++语言开发,想了想还是喜欢内核相关,又获得了一份与操作系统有关的offer,公司名就不说了,工资加上补贴有点低,也就5000吧,毕竟是二线城市,已经签了。我很想去红帽,可惜他不收应届生。现在在我看来,研究内核似乎并没有很大的出路,无非是为系统编程增加了点基础而已。我确实喜欢内核,但是在工资薪水面前还是有点不甘心,毕竟同学做前端的做移动的都那么高,所以我在想是不是应该向Linux系统编程发展一下,学学C++,学学服务器编程,毕竟生存乃是大事......
希望各位大侠能够根据自己的职业经历给点指导,小弟感激不尽。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
很多人都是这么迷茫,徘徊过来的。说说我自己的一些理解。
最近常想计算机是什么东西,计算机其实就是一个解决问题的工具。计算机包括硬件,软件。对于许多固定的问题寻求一种解决方法,可以调整的点很多,可能会设计专用芯片,可能会在软件上进行设计。而操作系统就是一个为了方便解决问题提供的一种通用平台。归根结底,kernel 只是为了服务其他软件的一种基础软件。所以可想,为什么做应用的公司这么多,而做 kernel 的公司很少。
kernel 的门槛很高。做 kernel 的工程师不像一个程序员,反而像一个学习系统架构的人。大部分人只是改改defconfig,dts文件,或者在某一个模块加几行代码。更多的时间是去弄懂一个子系统的工作原理。
kernel很多特性都是出于用户的需求而增加的,即在一个应用中,有些东西在userspace不能做了,那么在kernel中增加相关的支持。所以我认为,一个Linux Kernel工程师首先就要会进行系统编程。例如,如果如果研究调度,至少需要明白 user space 进程需要哪些管理机制吧。我看了不少 kernel 的大牛都有一些其他运行在 user space 的软件作品。
当然要写出优秀的软件,还是必须理解 kernel 的工作原理的。我有点倾向于把 kernel 当作和 算法 一样的课程,当作对自己提升功力的必修课,而不是专注在kernel上。到了对计算机理解到一定层次,想做什么就做什么。多注意平时的编程锻炼,多写代码。编程这事光看代码是不够的,之前也有说了,搞kernel是很少会有自己操刀的时候的,门槛太高,而且让一个新手来重构大牛的代码想想也是不可能。所以我认为在学习kernel 的同时,可以做一些user space的开源项目,不要把编程能力落下。还有一种可能就是,你进入了搞kernel 社区中feature的公司,有mentor手把手带你怎么搞kernel,例如先分派一些简单的改函数名字,移除废弃接口。如果有这些的机会那是最好的了。
对于做kernel的公司,二线城市肯定是不行的。只有大城市才有好的机会,一部分是芯片公司,专注点有体系架构,性能功耗;有些是网络公司,做虚拟化,安全,文件系统之类的。至于芯片的下游公司做的大都是驱动集成。
因为kernel是非常好的一个开源项目,里面问题很少。一般的公司都没有能力去改里面核心的东西。国内好像intel/ibm做的挺好的