内核开发岗位简介
Linux内核开发一般主要分为两大块:内核开发和驱动开发。因为内核是个宏内核,驱动都是运行在内核空间,所以驱动开发也属于内核开发的范畴。招聘市场上内核开发需求主要分布在以下招聘岗位
- 初级/高级/资深嵌入式Linux开发工程师
- 系统软件工程师、嵌入式工程师、驱动工程师
- Linux内核功耗测试、Linux驱动工程师
- Linux开发工程师、架构师
内核工程师 VS 驱动工程师
如果按行业来分的话,内核开发主要分布在两个行业:互联网行业和嵌入式领域。内核开发工程师的岗位分布一般在互联网、云计算、安全厂商,复杂多变、高并发、快速迭代的互联网应用业务,需要在Linux内核层面有更强大的技术支撑:内核中的文件系统、数据存储、I/O请求、实时调度、进程的并发与切换、网络、虚拟化等,都是互联网企业比较关注的内核领域。
驱动工程师的岗位主要分布在:芯片原厂、方案厂商、嵌入式设备厂商。要求嵌入式驱动工程师在一块开发板上能够移植u-boot、Linux内核,内核的配置和编译,会看芯片手册和原理图,掌握嵌入式常用的接口及通信协议,如串口、USB、I2C、SPI、PCI等。在一些消费电子、视频监控领域,如果你能掌握音视频编解码相关的知识,涉及到一些算法,相信职场竞争力会更强,薪水会更高。
在Linux操作系统下,驱动也是内核的一部分,内核中80%的代码都是驱动,随着Linux内核支持越来越多的CPU架构和硬件平台,内核中集成的驱动源码也越来越多。但从操作系统的角度来看,内核中提供操作系统基础服务的部分(如进程、调度、内存管理、同步机制、中断等)代码则保持相对稳定。随着云计算、人工智能的火热,内核中支持这些应用场景的新技术(如虚拟化、容器等相关技术)也不断地添加进来,不断地开发新的功能模块。
经过30年 的更新迭代和不断发展,Linux内核源码已经由原来的一万行代码,发展成现在将近3000万行的超级工程。应用领域也越来越广:嵌入式、工业控制、服务器、桌面PC。随着国内嵌入式行业不断深耕发展,Linux开发岗位也随之需求大增,越来越基础、越“硬核”的职位也被释放出来。
从招聘网站搜索:Linux内核职位,可以看到,大量的内核开发岗位主要分布在:芯片原厂的驱动开发岗位、互联网安全厂商的内核开发岗位。
学习驱动能找什么工作?
驱动工程师的岗位一般分布在嵌入式设备、芯片原厂等公司:
- IP厂商、咨询公司:ARM、IP厂商、开源组织、Linaro
- 芯片原厂:TI、NXP、英飞凌、高通、FreeScale
- 国内芯片原厂:海思、联发科、瑞芯微、全志、君正、龙芯
- AI芯片、RISC-V系:平头哥、芯来、嘉楠耘智等一大批新兴公司
- 方案厂商:模组、方案提供商、智能硬件、开发板
- 设备公司:智能音箱、无人机、智能冰箱、电视、投影仪、电视盒子、视频监控
- 嵌入式外包公司:承接各大公司嵌入式外包业务
驱动工程师的岗位需求,在行业的上游、中游、下游,招聘人数成数十倍递增。技术上游的IP厂商、咨询公司招聘人数一般很少,芯片原厂次之,大量的嵌入式开发岗位分布在做嵌入式产品开发的公司。处于不同行业上下游的公司,对驱动开发工程师的技能需求和工作内容也有差异:
驱动工程师的主要工作:
- IP开发:主要是芯片、IP厂商,主要做IP开发维护、授权,配套的BSP软件包开发
- 驱动硬件:硬件不断升级,添加下的feature,需要软件驱动层支持
- Bug fix:基于某个CPU硬件平台,移植内核,修复各种bug,优化BSP软件包
- 性能优化:针对某个CPU平台优化内核驱动,释放硬件最大性能
- 系统集成:适配不同的CPU架构、硬件平台
- 输出稳定、高性能、可适配的SDK、Turkey解决方案
- 能基于新平台,定制平台,基于原厂的SDK进行移植、适配、开发、优化等工作
学习内核能找什么工作?
内核工程师岗位主要分布在互联网、安全领域、基础软件、芯片巨头公司:
- 互联网大厂:服务器、云计算、分布式存储、网络、多媒体游戏
- 安全厂商:安全加固、移动安全、物联网安全
- 基础软件:RedHat、SUSE、UOS、VMware
- 芯片公司:Intel、AMD、IBM、华为、高通、三星
- 其他领域:超算、服务器、桌面PC
内核工程师的主要工作:
- 内核移植与架构:芯片原厂内核组
- 业务模块的开发与优化
- 各种Bug fix:云、容器、服务器、存储
- 维护kernel稳定版本、各种patch的backporting
- 内核安全加固
- 开发新的功能:内核社区、Linux基金会、大厂
- 内核参数调节、性能优化:运维、调试、服务器
为什么要学习内核?
很多从事嵌入式驱动、应用开发的人,做得久了,打算深入内核领域,拓展自己的就业机会。从事Linux内核开发主要有以下优势:
- 好就业:嵌入式、服务器、云、安全,目前对这块人才(尤其是高端人才)需求很大
- 待遇高:研发核心岗、技术栈要求高
- 吃经验:底层调试、整个系统分析等能力,对个人整体的技术栈和经验要求高
- 不内卷:技术栈要求门槛高,经验贬值少,一旦迈进去,就是天然职业壁垒
- 不加班:远离业务层,不用整天加班伺候甲方,反复改需求,可以自己把握工作节奏
既然Linux内核岗位这么好,为什么没有人大量的人涌入,反而很多名校的博士、研究生都跑去互联网、人工智能公司了呢?原因很简单:人工智能是风口,互联网给的待遇更高,而且从事Linux内核开发也有很大劣势;
- 就业机会相对较少:相对于应用开发、互联网开发,就业市场的岗位相对较少。
- 学习曲线长,投入产出性价比低:内核开发需要的技术栈和技术门槛,相对于其他开发岗会高出不少,而且学习路线比较长,想三月速成基本不可能。自己辛辛苦苦学2年,工资8000,隔壁整天玩游戏的小王学习了Java一年,竟然找到了月薪一万的工作,凭什么?很多人心里确实不好受,也就跟着转行了。
- 远离业务层:内核驱动开发属于底层基础建设,就像搭戏台一样,远离业务层,想靠直播打赏一夜暴富基本不可能,但因为远离业务层,更新迭代慢,可以一直做下去,职业生涯比较稳定。
总之,凡事有利有弊,在没有垄断、人才市场充分竞争的格局下,一个钱多人少不加班的行业,或者是一些风口行业,必然吸引一大批弄潮儿、人才精英涌入,最后市场饱和,待遇也会慢慢拉平。到底是学习互联网、人工智能还是内核,个人建议还是看自己的兴趣、技术背景、擅长什么,综合各方面考虑,找出一个适合自己的职业发展道路。
如果你打算以后从事内核、驱动开发,打算以此作为自己的职业发展道路,或者自己从事的行业跟内核有关联,自己想了解一下内核,本系列教程就是为你准备的,本教程将会持续更新和内核开发的相关技术文章和教程,欢迎继续阅读下去。