当前位置: 技术问答>linux和unix
如何成为一个Linux系统内核开发者
来源: 互联网 发布时间:2016-01-03
本文导语: 你想成知道如何成为一个Linux内核开发者么?或者你的老板告诉你,“去为这个设备写一个Linux驱动。“这篇文档的目的,就是通过描述你需要经历的过程和提示你如何和社区一起工作,来教给你为达到这些目的所需...
你想成知道如何成为一个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"
http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt
"Linux kernle patch submission format"
http://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
内核几乎全是用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"
http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt
"Linux kernle patch submission format"
http://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的应用开发,不知离内核开发有多远?
正在搞linux开发,是基于linux的应用开发,不知离内核开发有多远?
|
没有什么了不起的,只是时间问题,
写驱动也没有什么大不了,
应用程序写callback给系统调用,
而驱动就是写函数给应用程序调用。
写驱动也没有什么大不了,
应用程序写callback给系统调用,
而驱动就是写函数给应用程序调用。
|
我把嵌入式C的一些书买来,看了一阵,一无所获;
我把Linux内核开发的一些书买来,看了一阵,一无所获。
最后决定,自己还是工作在ansi c、c++语言和标准库上好了,另外做一个Unix系统管理员。
我把Linux内核开发的一些书买来,看了一阵,一无所获。
最后决定,自己还是工作在ansi c、c++语言和标准库上好了,另外做一个Unix系统管理员。
|
开发内核,是多少个程序员中的一个美丽的神话和梦想,但这个梦想绝大多数终要破灭的。
|
其实没有这么复杂的了, linux驱动就有几个接口,内核里都提供标准的接口,也有例子了。
写驱动什么的难点不在这里,关键是你要熟悉你的硬件了。单纯做软件的比较困难了,你必须有一点的硬件基础吧,了解你的硬件的运行机制,通讯接口了。
写驱动什么的难点不在这里,关键是你要熟悉你的硬件了。单纯做软件的比较困难了,你必须有一点的硬件基础吧,了解你的硬件的运行机制,通讯接口了。
|
这片帖子还是不错的。
Do*****entation是Documentation
Do*****entation是Documentation
|
mark
|
好文章啊!
今天台湾海峡地震了,上不了外网!
mark了!
今天台湾海峡地震了,上不了外网!
mark了!
|
关注
|
mark
|
学习
|
马克
|
学习!
|
mark,接分
|
顶
|
UP
|
mark
|
不错!
|
mark 学习。
|
mark
|
支持一下