Linux内核开发入门综述

少于 1 分钟读完

开学有3周了,还没写过博客,一方面是项目上的事,另一方面是阿里、腾讯都开始内推实习了,准备简历,复习一下。在准备找工作实习, 以及在面试中,能慢慢发现自己的短处和长处,有些面试的很惨,但是这不能说明你很low,只是你投的职位不是你所擅长的领域,职位选择失误。

“人在江湖,身不由己”,有时候你没时间没条件去做自己感兴趣的东西,领着RA,就要给老板干活!既然无法选择环境,那么就去适应它!
兴趣分两种,一种是天生的兴趣,一见钟情是也;一种是后天培养的兴趣,感觉生活中大多数人都不知道自己的兴趣,或者无法从事自感兴趣的工作,只能培养兴趣。

有点跑偏了,进入正题,现在我对Linux内核开发培养出来了兴趣,本文就是对Linux内核开发入门的一个综述性文章。


综述文章是一类对某主题研究现状进行归纳、总结的文章。 博士在确定研究方向之后一般会先写个综述文章,以便对当前现状有个清楚的认识。

#内核编程的 “用途” 这大概是想学习kernel的人最关心的一个问题

  • 学习内核编程能找什么工作?
  • 毕业后能去什么公司?
  • 薪资会不会比普通研发工程师高?

###工作类型

一般是

  • 内核开发
  • 内核定制
  • 驱动开发
  • 虚拟化
  • 研究文件系统、调度器、TCP/IP协议栈等等

一般底层研发岗位的招聘要求都会附加一条 有内核开发经验者优先

###毕业去向 去的公司肯定小不了,

  • redhat
  • vmware
  • intel

红帽就不必说了,另外两家不是做虚拟机和芯片的嘛,怎么也要内核开发人员,这两家我都面过,都问过kernel编程经历

除了外企,再看看BAT对内核开发工程师的需求

百度_云平台部_Linux内核方向工程师

工作职责:

  1. Linux内核安全方案开发定制与移植(grsecurity, SELinux)
  2. 轻量级虚拟化方案开发(LXC, CGroup)

职位要求:

  1. 熟悉Linux内核技术,尤其是lxc轻量级虚拟化技术
  2. 熟悉Linux系统架构与管理,尤其是安全相关技术
  3. ……

阿里 - 资深分布式存储系统开发工程师

工作职责

  1. 阿里集团基础数据及存储平台设计开发;
  2. 通过对通信框架、分布式应用架构、操作系统、硬件架构的优化,满足阿里集团内部高速增长的数据存储、访问需求;
  3. 直接参与系统设计和核心代码开发;

职位要求

  1. 三年以上大规模分布式系统开发工作经验;
  2. 精通C&C++、Unix/Linux操作系统,有内核开发经验者优先;
  3. 精通Unix/Linux通信机制;
  4. ……

腾讯 - 架构平台部 - linux内核开发工程师

职责描述

  1. 负责公司Linux内核的建立、维护和定制化开发,满足业务需求;
  2. 解决服务器在Linux内核上遇到的问题,给业务开发人员提供内核支持、技术建议等;
  3. 和业务合作进行系统性能分析和架构优化,特别是新硬件平台和业界新技术上的优化;
  4. 根据业务需要引入开源社区成果,对开源社区反馈内核研发成果。

职位要求

  1. 本科及以上学历;
  2. 3年以上Linux内核开发经验;
  3. 熟悉Linux内核,精通内核网络、存储、文件系统、内存、调度器等模块之一;
  4. 熟悉Xen、KVM或Container虚拟化技术;
  5. 熟练使用Linux底层工具链,了解其原理,熟悉某一CPU体系结构;
  6. 具备出色的C语言编程能力;
  7. 有丰富内核故障调试经验者优先;
  8. 有内核社区补丁提交经验者优先。

###工资待遇

至于工资嘛,在招聘网站上查了一下,好多都是工资面议,应该就是根据水平差别比较大,另外就是需求相对少。

#学习路线 个人觉得学习内核开发分三步走:

  1. 明确目标:确立一个研究点,是学习文件系统,还是学习调试器,或者是TCP/IP协议栈,甚至是一个独立的模块;
  2. 有的放矢:围绕目标针对性学习,不要被“不相关内容”吸引(干扰),看书也不一定是从头到尾挨着看,选择对你有用的;
  3. 调试内核:为你的目标,动手修改内核,或者是编写驱动、模块等;

###理论篇

  1. 成为Linux内核高手的四个方法
  2. 如何学习内核编程
  3. 自己研究并实现一个TCP/IP协议栈

###实践篇 我打算从下面两个点入手

  1. Linux Security Module
    http://www.ibm.com/developerworks/cn/linux/l-lsm/part1/
  2. 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协议没有要求,如果对这三方面缺少认识甚至没有听说过的话,建议看之前还是充充这方面的电,不然会自信心会遭受严重挫折。更多

###网站/博客

  1. 王聪博客 http://wangcong.org
  2. edsionte’s TechBlog http://edsionte.com/techblog/ 有一个《内核新手区》专栏
  3. Linux的内核之旅 http://www.kerneltravel.net/
  4. Linux Kernel Newbies http://kernelnewbies.org/

欢迎补充

标签:

分类:

更新时间:

留下评论