Linux内核开发入门综述
开学有3周了,还没写过博客,一方面是项目上的事,另一方面是阿里、腾讯都开始内推实习了,准备简历,复习一下。在准备找工作实习, 以及在面试中,能慢慢发现自己的短处和长处,有些面试的很惨,但是这不能说明你很low,只是你投的职位不是你所擅长的领域,职位选择失误。
“人在江湖,身不由己”,有时候你没时间没条件去做自己感兴趣的东西,领着RA,就要给老板干活!既然无法选择环境,那么就去适应它!
兴趣
分两种,一种是天生的兴趣,一见钟情是也;一种是后天培养的兴趣,感觉生活中大多数人都不知道自己的兴趣,或者无法从事自感兴趣的工作,只能培养兴趣。
有点跑偏了,进入正题,现在我对Linux内核开发培养出来了兴趣,本文就是对Linux内核开发入门的一个综述性文章。
综述文章是一类对某主题研究现状进行归纳、总结的文章。 博士在确定研究方向之后一般会先写个综述文章,以便对当前现状有个清楚的认识。
#内核编程的 “用途” 这大概是想学习kernel的人最关心的一个问题
- 学习内核编程能找什么工作?
- 毕业后能去什么公司?
- 薪资会不会比普通研发工程师高?
###工作类型
一般是
- 内核开发
- 内核定制
- 驱动开发
- 虚拟化
- 研究文件系统、调度器、TCP/IP协议栈等等
一般底层研发岗位的招聘要求都会附加一条 有内核开发经验者优先
###毕业去向 去的公司肯定小不了,
- redhat
- vmware
- intel
红帽就不必说了,另外两家不是做虚拟机和芯片的嘛,怎么也要内核开发人员,这两家我都面过,都问过kernel编程经历
除了外企,再看看BAT对内核开发工程师的需求
百度_云平台部_Linux内核方向工程师
工作职责:
- Linux内核安全方案开发定制与移植(grsecurity, SELinux)
- 轻量级虚拟化方案开发(LXC, CGroup)
职位要求:
- 熟悉Linux内核技术,尤其是lxc轻量级虚拟化技术
- 熟悉Linux系统架构与管理,尤其是安全相关技术
- ……
阿里 - 资深分布式存储系统开发工程师
工作职责
- 阿里集团基础数据及存储平台设计开发;
- 通过对通信框架、分布式应用架构、操作系统、硬件架构的优化,满足阿里集团内部高速增长的数据存储、访问需求;
- 直接参与系统设计和核心代码开发;
职位要求
- 三年以上大规模分布式系统开发工作经验;
- 精通C&C++、Unix/Linux操作系统,有内核开发经验者优先;
- 精通Unix/Linux通信机制;
- ……
腾讯 - 架构平台部 - linux内核开发工程师
职责描述
- 负责公司Linux内核的建立、维护和定制化开发,满足业务需求;
- 解决服务器在Linux内核上遇到的问题,给业务开发人员提供内核支持、技术建议等;
- 和业务合作进行系统性能分析和架构优化,特别是新硬件平台和业界新技术上的优化;
- 根据业务需要引入开源社区成果,对开源社区反馈内核研发成果。
职位要求
- 本科及以上学历;
- 3年以上Linux内核开发经验;
- 熟悉Linux内核,精通内核网络、存储、文件系统、内存、调度器等模块之一;
- 熟悉Xen、KVM或Container虚拟化技术;
- 熟练使用Linux底层工具链,了解其原理,熟悉某一CPU体系结构;
- 具备出色的C语言编程能力;
- 有丰富内核故障调试经验者优先;
- 有内核社区补丁提交经验者优先。
###工资待遇
至于工资嘛,在招聘网站上查了一下,好多都是工资面议,应该就是根据水平差别比较大,另外就是需求相对少。
#学习路线 个人觉得学习内核开发分三步走:
- 明确目标:确立一个研究点,是学习文件系统,还是学习调试器,或者是TCP/IP协议栈,甚至是一个独立的模块;
- 有的放矢:围绕目标针对性学习,不要被“不相关内容”吸引(干扰),看书也不一定是从头到尾挨着看,选择对你有用的;
- 调试内核:为你的目标,动手修改内核,或者是编写驱动、模块等;
###理论篇
###实践篇 我打算从下面两个点入手
- Linux Security Module
http://www.ibm.com/developerworks/cn/linux/l-lsm/part1/ - TCP/IP协议栈
这一块内容是庞大的,后文提到的几本书并没有涉及网络协议栈,学习实现的最佳书籍应该是《TCP/IP详解卷II》
#学习资源
###书籍
电子版可在这里下载
书名 | 简介 | 豆瓣评分 | 大牛评价 |
---|---|---|---|
Linux内核设计与实现( Linux Kernel Development) | 本书详细描述了Linux内核的设计与实现。内核代码的编写者、开发者以及程序开发人员都可以通过阅读本书受益,他们可以更好理解操作系统原理,并将其应用在自己的编码中以提高效率和生产率。本书的主题包括进程管理、进程调度、时间管理和定时器、系统调用接口、内存寻址、内存管理和页缓存、VFS、内核同步、移植性相关的问题以及调试技术。 | 8.6 | 可惜结果稍微有点点不那么完美,但是给我入门的教导,足矣。 整本书非常薄,但是内容非常丰富,基本上是在内核的各大部分都走了一遍,而且第二版对2.6增加的若干改进有着非常好的描述。一遍看来下,的确能对内核有个整体的把握,而不至于陷于细节难以翻身。从这个意义上来讲,这本书的目的达到了。更多 |
Linux内核编程(The Linux Kernel Primer) | 本书主要内容包括:Linux基础知识、内核探索工具集、进程的整个生命周期、内存区、页面、Slab分配器、用于输入/输出的各种设备、文件系统、抢占、自旋锁、信号量、内核引导、构建Linux内核,以及向内核添加代码等。同时还简单介绍了一些应用工具和实用程序,从而可以获取理解内核内幕所需的信息。 | 7.1 | 什么叫primer?primer的内涵不在于初等或者低级,而是打底,也就是打基础。本书介绍了从头开始学习Linux内核的所有细节,甚至包括大量的代码分析。虽然没有《情景分析》那么透彻,但其循序渐进的风格很值得借鉴。更多 |
深入理解Linux内核( Understanding The Linux Kernel ) | 本书指导你对内核中使用的最重要的数据结构、算法和程序设计诀窍进行一次遍历。通过对表面特性的探究,作者给那些想知道自己机器工作原理的人提供了颇有价值的见解。 | 9.1 | 看起来非常耗时,非常基础的底层技术:汇编知识(主要是X86体系的硬件接口知识)、C/C++功底、数据结构,因为没有提到网络方面的内核代码,所以对TCP/IP协议没有要求,如果对这三方面缺少认识甚至没有听说过的话,建议看之前还是充充这方面的电,不然会自信心会遭受严重挫折。更多 |
###网站/博客
- 王聪博客 http://wangcong.org
- edsionte’s TechBlog http://edsionte.com/techblog/ 有一个《内核新手区》专栏
- Linux的内核之旅 http://www.kerneltravel.net/
- Linux Kernel Newbies http://kernelnewbies.org/
欢迎补充
留下评论