剑魂箫心 发表于 2015-11-25 22:34

内核开发的前途在什么地方,发展方向有哪些?

本帖最后由 剑魂箫心 于 2016-11-16 09:00 编辑

2016年11月16日更新:
这篇帖子是我大四上学期找工作时发布的,距今已有一年,现在我从事的工作虽然和内核没什么关系,但是我依然在业余时间继续学习内核,跨过了0.12内核,学过了2.4内核的内存管理,现在借着2.6内核的书在研究4.4.30内核的MM子系统。时至今日,我依然是一个菜鸟,我想一定有很多内核学习者在学习的道路上踽踽独行、苦苦摸索,内核开发的速度越来越快,内核文档少之又少,几乎所有的资料都被时代远远地抛在后面,入门内核开发的难度越来越大,如果能在这条道路上得到各位高手、前辈的指点,不管是关于职业生涯还是关于技术路线,我们都将感激不尽!

-----------------------------------------------
以下是原贴:
-----------------------------------------------

我现在是一名大四学生,专业学的是软件工程,已经基本看完了《Linux 0.12内核完全剖析》这本书,但是这本书与现在内核差异比较大,现在也编译过2.4内核(毛德操先生的书中所用内核),但是毛德操先生的书也是比较厚,所以在开始研究之前先来请教下各位先辈。

在今年校招时我也是一心想做内核,但是无奈各大企业这方面招的人太少,移动、前端、Java岗位那么多,内核岗位根本找不到,即使有,那也是研究生岗位。曾经兴致冲冲去投了360的Linux内核工程师,结果做的笔试题全是Windows内核,至今不明白咋回事。

目前拒掉了一份深圳8000的offer,因为工作内容是机顶盒C/C++语言开发,想了想还是喜欢内核相关,又获得了一份与操作系统有关的offer,公司名就不说了,工资加上补贴有点低,也就5000吧,毕竟是二线城市,已经签了。我很想去红帽,可惜他不收应届生。现在在我看来,研究内核似乎并没有很大的出路,无非是为系统编程增加了点基础而已。我确实喜欢内核,但是在工资薪水面前还是有点不甘心,毕竟同学做前端的做移动的都那么高,所以我在想是不是应该向Linux系统编程发展一下,学学C++,学学服务器编程,毕竟生存乃是大事......

希望各位大侠能够根据自己的职业经历给点指导,小弟感激不尽。

amarant 发表于 2015-11-26 09:10

很多人都是这么迷茫,徘徊过来的。说说我自己的一些理解。

最近常想计算机是什么东西,计算机其实就是一个解决问题的工具。计算机包括硬件,软件。对于许多固定的问题寻求一种解决方法,可以调整的点很多,可能会设计专用芯片,可能会在软件上进行设计。而操作系统就是一个为了方便解决问题提供的一种通用平台。归根结底,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做的挺好的

yoyosys 发表于 2015-11-26 09:43

楼主大黄小号;P

九阳神功爱喝茶 发表于 2015-11-26 09:46

同样很疑惑啊。我从大四保研开始就跟着实验室做无线网卡的ath9k驱动的研究,还完成了一个小小的项目。两年里面我研究了具体是怎么MAC层是怎么封装成帧,驱动层是怎么设置传输参数,数据帧,beacon帧,探测帧,认证帧的发送与接收流程及其功能等等。
在科研中遇到过很多问题,如浩如烟海的代码,往往一个函数被几十个函数调用,一个函数也是往往调用几十个函数,怎么debug,无法连接等等问题,最后也终于解决了。我师姐的博士论文中有一个章节的实验部分都是用我的数据完成的,也是蛮有成就感的。
到了今年九月份师兄找工作的时候,发现几乎没公司招收linux内核开发,更不必说无线网卡驱动这一块了,对应届生的要求基本就是算法,感觉自己学的在工作中好没用啊,不禁茫然了。
好茫然啊,求大神指导。。。

shang2010 发表于 2015-11-26 10:45

神信息都是哪里挖掘的啊

剑魂箫心 发表于 2015-11-26 11:20

本帖最后由 剑魂箫心 于 2015-11-26 11:21 编辑

回复 2# amarant


    是极,我当初想学这个是因为看Linux C语言开发的书中有很多函数不知道内部原理,用起来有点晕,所以想看看内核了解一下,结果这一看就是一年,其实才懂了点皮毛。看来内核不能急功近利,要通过进行Linux系统编程逐渐深入。其实我现在的公司也是围绕内核做上层应用开发,能真正在内核上动手的公司恐怕只有红帽、Intel这类的了。我要时刻准备好向北京进军。。。
    多谢版主老大回复

剑魂箫心 发表于 2015-11-26 11:21

回复 3# yoyosys


    哪有。。。我就这一个号

剑魂箫心 发表于 2015-11-26 11:24

回复 4# 九阳神功爱喝茶


    你这个研究的也的确是太深入了,感觉你这个应该算是硬件通信范畴了,软件公司和互联网公司需求量不大,也许手机公司会需要一些,比如小米这类。

剑魂箫心 发表于 2015-11-26 11:25

本帖最后由 剑魂箫心 于 2015-11-26 11:25 编辑

回复 5# shang2010


    什么意思啊 ?

九阳神功爱喝茶 发表于 2015-11-26 14:19

研究生都这样,学的东西不一定在工作中有用,没让去弄仿真已经是够好的了回复 8# 剑魂箫心


   
页: [1] 2 3 4 5
查看完整版本: 内核开发的前途在什么地方,发展方向有哪些?