ChinaUnix.net 首页 | 博客 | Linux | 论坛 | 人才 | 培训 | 知识库 | 资料 | 读书 | 手册 | 精华 | 下载 | 沙龙 | 搜索
Linux首页 | Linux论坛 | 论坛精华 | 开源新闻 | 技术文章 | 专题专栏 | 新手指南 | 迁移方案 | 产品方案 | 开源项目 | 开源图书 | 软件下载 | 人才招聘 | Linux博客
  搜索

  产品与方案
·中科红旗全面打造现代化邮政体系
·红旗助力“网上审批服务” 推动电子政务
·红旗正版化开创呼和浩特网吧建设新起点
·红旗Linux助信息产业部邮件服务器“快跑”
·中标普华Linux 为电子政务信息化保驾护航
·中标普华Linux助力基金产业
·中标普华Office率先支持UOF标准
·中标普华邮件系统助力西藏政府信息化建设
·红旗Linux助力国库集中支付系统改革
·红旗助中信卫星 掀起GIS通信应用风暴
·红旗软件助力烟草总局 全面建设“数字烟草”
·红旗助力“信访阳光工程”打造畅通信访渠道
·红帽联合FIS发布下一代实时核心银行平台
·红旗助力金盾 打造全无忧出入境信息系统
·红旗Linux全力打造中国邮政总局名址信息库
·爱尔兰证交所从Unix迁移到红帽企业Linux
·一流的意大利银行选择使用红帽企业Linux
·PLUS Finanzservice选择使用红帽企业Linux
·红帽助力TransACT Communications 公司
·法国零售业巨头Lapeyre采用Redhat Linux
·旅游预订网站选择使用红帽企业Linux
·马哈拉施特拉邦政府的红帽解决之道
·美国联邦政府案例
·红帽为慕尼黑展览会提供现代化集群系统
·Yuba郡用开源软件和红帽产品提高了效率
·红帽企业Linux助印度理工建立高性能计算中心
·采用红帽Linux 将系统维护时间缩短了65%
·从UNIX迁移到Linux使Peñoles公司获益非浅
·Hikal公司用红帽企业Linux开展任务关键的ERP项目
·KDE3.5.4新版本发布
·芝加哥商业交易所从Unix向Linux迁移
·南方基金管理有限公司成功案例 Red Hat Linux
·广东北电通讯设备有限公司成功案例
·挪威国家石油公司从UNIX迁移到红帽Linux,成本减半
·中央电视台CCTV动画部案例 Red Hat Linux

  图书

鸟哥的Linux私房菜基础学..


Linux程序设计.第3版


Linux设备驱动开发详解


  下载
·Endian Firewall
·linux kernel(Linux 内核)
·CentOS
·Fedora Core 6
·Scientific Linux
·Slackware 11.0
·Gentoo Linux
·ubuntu-6.10-i386服务器版本
·ubuntu-6.10-amd64服务器版
·ubuntu-6.10-i386桌面版
·ubuntu-6.10-amd64桌面版
·Engarde Linux
您的位置: Linux时代 > 技术文档 > 内核研究 >

如何成为一个Linux系统内核开发者

日期:2007-01-31 作者:赛迪网 来自:linux.chinaunix.net


  你想成知道如何成为一个Linux内核开发者么?或者你的老板告诉你,“去为这个设备写一个Linux驱动。“这篇文档的目的,就是通过描述你需要经历的过程和提示你如何和社区一起工作,来教给你为达到这些目的所需要知道的所有知识。本文也尝试解释社区为什么这样工作的一些原因。

  内核几乎全是用C写成的,有一些架构相关的部分是用汇编语言写成的。熟练掌握C语言是内核开发的必备条件。汇编语言(任何架构)的了解不是必须的,除非你准备做某个架构的底层开发。虽然下面这些书不能完全代替扎实的C语言教学和/或者成年累月的经验,他们还是不错的参考,如果用得着的话: - "The C Programming Language" 作者: Kernighan and Ritchie [Prentice Hall]- "Practical C Programming" 作者: Steve Oualline [O'Reilly]

  内核是用 GNU C 和 GNU 工具链写成的。虽然它符合 ISO C89 标准,它还是使用了一些标准中没有的扩展。内核是自成体系的 C 环境,它并不依赖标准C库,所以某些C语言标准是不支持的。任意长度long long类型除法和浮点数是不被允许的。有时候会很难理解内核对于它所使用的工具链和扩展的假定,而且不幸的是也没有关于它们的绝对的参考。请查阅gcc 的info页(`info gcc`)以获取有关信息。

  请记住你是在尝试学习如何与已经存在的开发社区一起工作。这是一群成分复杂的人们,他们对于代码,风格和步骤有高的标准。这些标准是经过时间检验的。

  他们发现遵循这些标准对于这样一个大规模的且地理上分散的团队是最佳的选择。尝试提前学习尽可能多的有关这些标准的知识,因为它们都有很好的文档;不要期望别人会遵照你或者你公司的行事方式。

  法律问题

  Linux内核源代码依照GPL发布。请参考源代码树下的COPYING文件,以获取有关这个许可证的详细信息。如果你对这个许可证有疑问,请联系你的律师,不要在Linux内核邮件列表里询问。邮件列表里的人们不是律师,你不应该依赖于他们对于法律问题的解释。

  文档

  Linux内核源代码树有很多文档,它们对于学习如何与内核社区交流来说有不可估量的价值。当新的功能加进内核的时候,通常建议作者把解释这个新功能的文档也加进内核。如果一个内核变动导致了内核对用户空间界面的改变,建议你把这个信息或者一个解释了这个变动的manpage的补丁发送给手册页的维护者 mtk-manpages@gmx.net。

  这里有一个内核源代码树里需要阅读的文件列表:

  README

  这个文件简单介绍了Linux内核的背景,并描述了配置和编译内核需要做哪些事情。内核新手应该从这里开始。

  Do*****entation/Changes

  这个文件介绍了成功编译和运行内核所需要各种不同软件的列表。

  Do*****entation/CodingStyle

  这个文件描述了Linux内核代码风格,还有背后的一些原因。所有的新代码的要符合这个文档里的准则。大多数维护者只会接受符合这些规则的补丁,很多人只看符合正确风格的代码。

  Do*****entation/SubmittingPatches

  Do*****entation/SubmittingDrivers

  这些文件非常详细的介绍了如何成功的创建和发送一个补丁,包括(但不限于):

  -Email内容

  -Email格式

  -发送给谁

  遵守所有这些规则并不能保证成功(对所有的补丁都需要进行内容和风格的详细检查),但是不遵守这些规则就一定不会成功。

  其他关于如何创建补丁的很好的文章有:

  “The Perfect Patch"

  www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt

  "Linux kernle patch submission format"

  linux.yyz.us/patch-format.html

  Do*****entation/stable_api_nonsense.txt

  这个文件解释了有意识的决定-不在内核里使用稳定的API-的原因,包括:

  -子系统分隔层(为了兼容?)

  -操作系统之间的驱动可移植性

  -缓和(或者阻止)内核源代码树的急速变动

  这个文档对于了解Linux的开发哲学是非常关键的,对于由开发其他操作系统转而开发Linux人也是很重要的。

  Do*****entation/SecurityBugs

  如果你感觉到你发现了Linux内核里的一个安全问题,请遵照这个文档里所描述的步骤来提醒内核开发者,并帮助解决问题。

  Do*****entation/ManagementStyle

  这个文档描述了Linux内核维护者如何运作,以及他们为什么这样做。它对于任何内核开发新手(或者任何对本话题感兴趣的人)来说是非常重要的。

  因为它解释了一些惯有的错误概念,可解决有关内核维护者独特行为的疑惑。

  Do*****entation/stable_kernel_rules.txt

  本文件描述了稳定版本内核释出的规则,还有如果你想对其中的一个版本做一些改动应该做些什么。

  Do*****entation/kernel-docs.txt

  一个有关内核开发的外部文档的列表。如果你在内核内部文档里没有找到? 要找的东西,你可以参考这个列表。

  Do*****entation/applying-patches.txt

  介绍了对于什么是补丁,以及如何应用补丁于不同的内核开发分支。

   

  内核也有很多可以从源代码自动产生的文档。这包括内核内部API的全面描述,有关如何处理好锁定的规则。这些文档会被创建于 Do*****entation/DocBook/文件夹中。在内核主源码树中通过运行下面的命令可以创建出PDF,Postscript, HTML 和manpage等不同格式的文档: make pdfdocsmake psdocsmake htmldocsmake mandocs

  成为一个内核开发者

  如果你对Linux内核开发一无所知,你可以看看Linux KernelNewbies项目:

  kernelnewbies.org

  它包含一个邮件列表,在那里你可以问任何有关内核开发的基础问题(在问问题之前先搜索一下存档,很可能这个问题已经被解答过了。)它还有一个IRC频道,你可以在里面实时的提问。它还有很多有用的文档,对于学习Linux内核开发很有用。

  这个网站有有关代码组织,子系统,当前项目(代码树之内的和之外的)的基本信息。它也描述了一些基本的“物流”信息,比如怎么样编译内核和怎么样打补丁。

  如果你不知道从何处起步,但是你想找一些任务来做以加入内核开发社区,请看一下Linux Kernel Janitor项目:

  janitor.kernelnewbies.org/

  这是一个很好的起步的地方。它描述了一些相对来说简单的内核中需要清理的和解决的问题。和负责这个项目的开发者一起工作,你会学到如何令你的补丁进入Linux内核树的基本知识,而且可能会为你指明下一步的发展方向,如果你自己尚不明确的话。

  如果你已经有了一段代码想要放到内核树里,但是需要某种形式的帮助,那么kernel-mentors项目就可以帮你的忙了。这是一个邮件列表,可以在下面找到:

  selenic.com/mailman/listinfo/kernel-mentors

  在你对Linux内核代码作任何实际的改动之前,必须要了解相关的代码是如何工作的。为了达到这个目的,没有比直接读它(很多困难的地方都有很好的注释)更好的方法了,甚至可能是在某个特殊工具的帮助下来阅读。很值得推荐的这样一种工具是Linux Cross-Reference项目,它可以把源代码以一种自我引用的、索引的网页形式显示出来。一个非常好的最新的内核代码仓库可以在这里找到: //sosdg.org/~coywolf/lxr

  所有这些事情有时候很难做到。要想完美做到这些要求可能需要几年的时间。这是一个持续的发展过程,需要很多耐心和决心。但是不要放弃,这是可以实现的。很多人已经做到了这一点,每个人都经历过你现在这个阶段。

本文被浏览



 相关新闻

Linux内核: 修改TCP/IP调优参数2007-01-29 10:25:13
2007年Linux内核峰会的计划2007-01-24 11:12:31
Jonathan Corbet谈近来Linux内核的改进2007-01-22 09:25:09
打造适合自己Slackware机器的内核2007-01-08 15:21:59
Linux内核2.6.20增加虚拟化解决方案KVM2006-12-18 10:11:17
使用 SystemTap 调试内核2006-12-15 15:23:44
Linux 内核发布 :Linux kernel 2.6.192006-11-30 11:09:23


 相关评论
关于我们 | 联系方式 | 广告合作 | 诚聘英才 | 网站地图 | 免费注册

Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们

京ICP证041476号