| Li Yang | 09792200 | 2007-10-24 00:51:11 +0800 | [diff] [blame] | 1 | Chinese translated version of Documentation/SubmittingDrivers | 
|  | 2 |  | 
|  | 3 | If you have any comment or update to the content, please contact the | 
|  | 4 | original document maintainer directly.  However, if you have a problem | 
|  | 5 | communicating in English you can also ask the Chinese maintainer for | 
|  | 6 | help.  Contact the Chinese maintainer if this translation is outdated | 
|  | 7 | or if there is a problem with the translation. | 
|  | 8 |  | 
|  | 9 | Chinese maintainer: Li Yang <leo@zh-kernel.org> | 
|  | 10 | --------------------------------------------------------------------- | 
|  | 11 | Documentation/SubmittingDrivers 的中文翻译 | 
|  | 12 |  | 
|  | 13 | 如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文 | 
|  | 14 | 交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻 | 
|  | 15 | 译存在问题,请联系中文版维护者。 | 
|  | 16 |  | 
|  | 17 | 中文版维护者: 李阳  Li Yang <leo@zh-kernel.org> | 
|  | 18 | 中文版翻译者: 李阳  Li Yang <leo@zh-kernel.org> | 
|  | 19 | 中文版校译者: 陈琦 Maggie Chen <chenqi@beyondsoft.com> | 
|  | 20 | 王聪 Wang Cong <xiyou.wangcong@gmail.com> | 
|  | 21 | 张巍 Zhang Wei <Wei.Zhang@freescale.com> | 
|  | 22 |  | 
|  | 23 | 以下为正文 | 
|  | 24 | --------------------------------------------------------------------- | 
|  | 25 |  | 
|  | 26 | 如何向 Linux 内核提交驱动程序 | 
|  | 27 | ----------------------------- | 
|  | 28 |  | 
|  | 29 | 这篇文档将会解释如何向不同的内核源码树提交设备驱动程序。请注意,如果你感 | 
|  | 30 | 兴趣的是显卡驱动程序,你也许应该访问 XFree86 项目(http://www.xfree86.org/) | 
|  | 31 | 和/或 X.org 项目 (http://x.org)。 | 
|  | 32 |  | 
|  | 33 | 另请参阅 Documentation/SubmittingPatches 文档。 | 
|  | 34 |  | 
|  | 35 |  | 
|  | 36 | 分配设备号 | 
|  | 37 | ---------- | 
|  | 38 |  | 
|  | 39 | 块设备和字符设备的主设备号与从设备号是由 Linux 命名编号分配权威 LANANA( | 
|  | 40 | 现在是 Torben Mathiasen)负责分配。申请的网址是 http://www.lanana.org/。 | 
|  | 41 | 即使不准备提交到主流内核的设备驱动也需要在这里分配设备号。有关详细信息, | 
|  | 42 | 请参阅 Documentation/devices.txt。 | 
|  | 43 |  | 
|  | 44 | 如果你使用的不是已经分配的设备号,那么当你提交设备驱动的时候,它将会被强 | 
|  | 45 | 制分配一个新的设备号,即便这个设备号和你之前发给客户的截然不同。 | 
|  | 46 |  | 
|  | 47 | 设备驱动的提交对象 | 
|  | 48 | ------------------ | 
|  | 49 |  | 
|  | 50 | Linux 2.0: | 
|  | 51 | 此内核源码树不接受新的驱动程序。 | 
|  | 52 |  | 
|  | 53 | Linux 2.2: | 
|  | 54 | 此内核源码树不接受新的驱动程序。 | 
|  | 55 |  | 
|  | 56 | Linux 2.4: | 
|  | 57 | 如果所属的代码领域在内核的 MAINTAINERS 文件中列有一个总维护者, | 
|  | 58 | 那么请将驱动程序提交给他。如果此维护者没有回应或者你找不到恰当的 | 
|  | 59 | 维护者,那么请联系 Willy Tarreau <w@1wt.eu>。 | 
|  | 60 |  | 
|  | 61 | Linux 2.6: | 
|  | 62 | 除了遵循和 2.4 版内核同样的规则外,你还需要在 linux-kernel 邮件 | 
|  | 63 | 列表上跟踪最新的 API 变化。向 Linux 2.6 内核提交驱动的顶级联系人 | 
|  | 64 | 是 Andrew Morton <akpm@osdl.org>。 | 
|  | 65 |  | 
|  | 66 | 决定设备驱动能否被接受的条件 | 
|  | 67 | ---------------------------- | 
|  | 68 |  | 
|  | 69 | 许可:		代码必须使用 GNU 通用公开许可证 (GPL) 提交给 Linux,但是 | 
|  | 70 | 我们并不要求 GPL 是唯一的许可。你或许会希望同时使用多种 | 
|  | 71 | 许可证发布,如果希望驱动程序可以被其他开源社区(比如BSD) | 
|  | 72 | 使用。请参考 include/linux/module.h 文件中所列出的可被 | 
|  | 73 | 接受共存的许可。 | 
|  | 74 |  | 
|  | 75 | 版权:		版权所有者必须同意使用 GPL 许可。最好提交者和版权所有者 | 
|  | 76 | 是相同个人或实体。否则,必需列出授权使用 GPL 的版权所有 | 
|  | 77 | 人或实体,以备验证之需。 | 
|  | 78 |  | 
|  | 79 | 接口:		如果你的驱动程序使用现成的接口并且和其他同类的驱动程序行 | 
|  | 80 | 为相似,而不是去发明无谓的新接口,那么它将会更容易被接受。 | 
|  | 81 | 如果你需要一个 Linux 和 NT 的通用驱动接口,那么请在用 | 
|  | 82 | 户空间实现它。 | 
|  | 83 |  | 
|  | 84 | 代码:		请使用 Documentation/CodingStyle 中所描述的 Linux 代码风 | 
|  | 85 | 格。如果你的某些代码段(例如那些与 Windows 驱动程序包共 | 
|  | 86 | 享的代码段)需要使用其他格式,而你却只希望维护一份代码, | 
|  | 87 | 那么请将它们很好地区分出来,并且注明原因。 | 
|  | 88 |  | 
|  | 89 | 可移植性:	请注意,指针并不永远是 32 位的,不是所有的计算机都使用小 | 
|  | 90 | 尾模式 (little endian) 存储数据,不是所有的人都拥有浮点 | 
|  | 91 | 单元,不要随便在你的驱动程序里嵌入 x86 汇编指令。只能在 | 
|  | 92 | x86 上运行的驱动程序一般是不受欢迎的。虽然你可能只有 x86 | 
|  | 93 | 硬件,很难测试驱动程序在其他平台上是否可用,但是确保代码 | 
|  | 94 | 可以被轻松地移植却是很简单的。 | 
|  | 95 |  | 
|  | 96 | 清晰度:	做到所有人都能修补这个驱动程序将会很有好处,因为这样你将 | 
|  | 97 | 会直接收到修复的补丁而不是 bug 报告。如果你提交一个试图 | 
|  | 98 | 隐藏硬件工作机理的驱动程序,那么它将会被扔进废纸篓。 | 
|  | 99 |  | 
|  | 100 | 电源管理:	因为 Linux 正在被很多移动设备和桌面系统使用,所以你的驱 | 
|  | 101 | 动程序也很有可能被使用在这些设备上。它应该支持最基本的电 | 
|  | 102 | 源管理,即在需要的情况下实现系统级休眠和唤醒要用到的 | 
|  | 103 | .suspend 和 .resume 函数。你应该检查你的驱动程序是否能正 | 
|  | 104 | 确地处理休眠与唤醒,如果实在无法确认,请至少把 .suspend | 
|  | 105 | 函数定义成返回 -ENOSYS(功能未实现)错误。你还应该尝试确 | 
|  | 106 | 保你的驱动在什么都不干的情况下将耗电降到最低。要获得驱动 | 
|  | 107 | 程序测试的指导,请参阅 | 
|  | 108 | Documentation/power/drivers-testing.txt。有关驱动程序电 | 
|  | 109 | 源管理问题相对全面的概述,请参阅 | 
|  | 110 | Documentation/power/devices.txt。 | 
|  | 111 |  | 
|  | 112 | 管理:		如果一个驱动程序的作者还在进行有效的维护,那么通常除了那 | 
|  | 113 | 些明显正确且不需要任何检查的补丁以外,其他所有的补丁都会 | 
|  | 114 | 被转发给作者。如果你希望成为驱动程序的联系人和更新者,最 | 
|  | 115 | 好在代码注释中写明并且在 MAINTAINERS 文件中加入这个驱动 | 
|  | 116 | 程序的条目。 | 
|  | 117 |  | 
|  | 118 | 不影响设备驱动能否被接受的条件 | 
|  | 119 | ------------------------------ | 
|  | 120 |  | 
|  | 121 | 供应商:	由硬件供应商来维护驱动程序通常是一件好事。不过,如果源码 | 
|  | 122 | 树里已经有其他人提供了可稳定工作的驱动程序,那么请不要期 | 
|  | 123 | 望“我是供应商”会成为内核改用你的驱动程序的理由。理想的情 | 
|  | 124 | 况是:供应商与现有驱动程序的作者合作,构建一个统一完美的 | 
|  | 125 | 驱动程序。 | 
|  | 126 |  | 
|  | 127 | 作者:		驱动程序是由大的 Linux 公司研发还是由你个人编写,并不影 | 
|  | 128 | 响其是否能被内核接受。没有人对内核源码树享有特权。只要你 | 
|  | 129 | 充分了解内核社区,你就会发现这一点。 | 
|  | 130 |  | 
|  | 131 |  | 
|  | 132 | 资源列表 | 
|  | 133 | -------- | 
|  | 134 |  | 
|  | 135 | Linux 内核主源码树: | 
|  | 136 | ftp.??.kernel.org:/pub/linux/kernel/... | 
|  | 137 | ?? == 你的国家代码,例如 "cn"、"us"、"uk"、"fr" 等等 | 
|  | 138 |  | 
|  | 139 | Linux 内核邮件列表: | 
|  | 140 | linux-kernel@vger.kernel.org | 
|  | 141 | [可通过向majordomo@vger.kernel.org发邮件来订阅] | 
|  | 142 |  | 
|  | 143 | Linux 设备驱动程序,第三版(探讨 2.6.10 版内核): | 
|  | 144 | http://lwn.net/Kernel/LDD3/ (免费版) | 
|  | 145 |  | 
|  | 146 | LWN.net: | 
|  | 147 | 每周内核开发活动摘要 - http://lwn.net/ | 
|  | 148 | 2.6 版中 API 的变更: | 
|  | 149 | http://lwn.net/Articles/2.6-kernel-api/ | 
|  | 150 | 将旧版内核的驱动程序移植到 2.6 版: | 
|  | 151 | http://lwn.net/Articles/driver-porting/ | 
|  | 152 |  | 
|  | 153 | KernelTrap: | 
|  | 154 | Linux 内核的最新动态以及开发者访谈 | 
|  | 155 | http://kerneltrap.org/ | 
|  | 156 |  | 
|  | 157 | 内核新手(KernelNewbies): | 
|  | 158 | 为新的内核开发者提供文档和帮助 | 
|  | 159 | http://kernelnewbies.org/ | 
|  | 160 |  | 
|  | 161 | Linux USB项目: | 
|  | 162 | http://www.linux-usb.org/ | 
|  | 163 |  | 
|  | 164 | 写内核驱动的“不要”(Arjan van de Ven著): | 
|  | 165 | http://www.fenrus.org/how-to-not-write-a-device-driver-paper.pdf | 
|  | 166 |  | 
|  | 167 | 内核清洁工 (Kernel Janitor): | 
| Justin P. Mattock | 0ea6e61 | 2010-07-23 20:51:24 -0700 | [diff] [blame] | 168 | http://kernelnewbies.org/KernelJanitors |