| Submitting Drivers For The Linux Kernel | |
| --------------------------------------- | |
| This document is intended to explain how to submit device drivers to the | |
| various kernel trees. Note that if you are interested in video card drivers | |
| you should probably talk to XFree86 (http://www.xfree86.org/) and/or X.Org | |
| (http://x.org/) instead. | |
| Also read the Documentation/SubmittingPatches document. | |
| Allocating Device Numbers | |
| ------------------------- | |
| Major and minor numbers for block and character devices are allocated | |
| by the Linux assigned name and number authority (currently this is | |
| Torben Mathiasen). The site is http://www.lanana.org/. This | |
| also deals with allocating numbers for devices that are not going to | |
| be submitted to the mainstream kernel. | |
| See Documentation/devices.txt for more information on this. | |
| If you don't use assigned numbers then when your device is submitted it will | |
| be given an assigned number even if that is different from values you may | |
| have shipped to customers before. | |
| Who To Submit Drivers To | |
| ------------------------ | |
| Linux 2.0: | |
| No new drivers are accepted for this kernel tree. | |
| Linux 2.2: | |
| No new drivers are accepted for this kernel tree. | |
| Linux 2.4: | |
| If the code area has a general maintainer then please submit it to | |
| the maintainer listed in MAINTAINERS in the kernel file. If the | |
| maintainer does not respond or you cannot find the appropriate | |
| maintainer then please contact Willy Tarreau <w@1wt.eu>. | |
| Linux 2.6: | |
| The same rules apply as 2.4 except that you should follow linux-kernel | |
| to track changes in API's. The final contact point for Linux 2.6 | |
| submissions is Andrew Morton. | |
| What Criteria Determine Acceptance | |
| ---------------------------------- | |
| Licensing: The code must be released to us under the | |
| GNU General Public License. We don't insist on any kind | |
| of exclusive GPL licensing, and if you wish the driver | |
| to be useful to other communities such as BSD you may well | |
| wish to release under multiple licenses. | |
| See accepted licenses at include/linux/module.h | |
| Copyright: The copyright owner must agree to use of GPL. | |
| It's best if the submitter and copyright owner | |
| are the same person/entity. If not, the name of | |
| the person/entity authorizing use of GPL should be | |
| listed in case it's necessary to verify the will of | |
| the copyright owner. | |
| Interfaces: If your driver uses existing interfaces and behaves like | |
| other drivers in the same class it will be much more likely | |
| to be accepted than if it invents gratuitous new ones. | |
| If you need to implement a common API over Linux and NT | |
| drivers do it in userspace. | |
| Code: Please use the Linux style of code formatting as documented | |
| in Documentation/CodingStyle. If you have sections of code | |
| that need to be in other formats, for example because they | |
| are shared with a windows driver kit and you want to | |
| maintain them just once separate them out nicely and note | |
| this fact. | |
| Portability: Pointers are not always 32bits, not all computers are little | |
| endian, people do not all have floating point and you | |
| shouldn't use inline x86 assembler in your driver without | |
| careful thought. Pure x86 drivers generally are not popular. | |
| If you only have x86 hardware it is hard to test portability | |
| but it is easy to make sure the code can easily be made | |
| portable. | |
| Clarity: It helps if anyone can see how to fix the driver. It helps | |
| you because you get patches not bug reports. If you submit a | |
| driver that intentionally obfuscates how the hardware works | |
| it will go in the bitbucket. | |
| PM support: Since Linux is used on many portable and desktop systems, your | |
| driver is likely to be used on such a system and therefore it | |
| should support basic power management by implementing, if | |
| necessary, the .suspend and .resume methods used during the | |
| system-wide suspend and resume transitions. You should verify | |
| that your driver correctly handles the suspend and resume, but | |
| if you are unable to ensure that, please at least define the | |
| .suspend method returning the -ENOSYS ("Function not | |
| implemented") error. You should also try to make sure that your | |
| driver uses as little power as possible when it's not doing | |
| anything. For the driver testing instructions see | |
| Documentation/power/drivers-testing.txt and for a relatively | |
| complete overview of the power management issues related to | |
| drivers see Documentation/power/devices.txt . | |
| Control: In general if there is active maintenance of a driver by | |
| the author then patches will be redirected to them unless | |
| they are totally obvious and without need of checking. | |
| If you want to be the contact and update point for the | |
| driver it is a good idea to state this in the comments, | |
| and include an entry in MAINTAINERS for your driver. | |
| What Criteria Do Not Determine Acceptance | |
| ----------------------------------------- | |
| Vendor: Being the hardware vendor and maintaining the driver is | |
| often a good thing. If there is a stable working driver from | |
| other people already in the tree don't expect 'we are the | |
| vendor' to get your driver chosen. Ideally work with the | |
| existing driver author to build a single perfect driver. | |
| Author: It doesn't matter if a large Linux company wrote the driver, | |
| or you did. Nobody has any special access to the kernel | |
| tree. Anyone who tells you otherwise isn't telling the | |
| whole story. | |
| Resources | |
| --------- | |
| Linux kernel master tree: | |
| ftp.??.kernel.org:/pub/linux/kernel/... | |
| ?? == your country code, such as "us", "uk", "fr", etc. | |
| http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git | |
| Linux kernel mailing list: | |
| linux-kernel@vger.kernel.org | |
| [mail majordomo@vger.kernel.org to subscribe] | |
| Linux Device Drivers, Third Edition (covers 2.6.10): | |
| http://lwn.net/Kernel/LDD3/ (free version) | |
| LWN.net: | |
| Weekly summary of kernel development activity - http://lwn.net/ | |
| 2.6 API changes: | |
| http://lwn.net/Articles/2.6-kernel-api/ | |
| Porting drivers from prior kernels to 2.6: | |
| http://lwn.net/Articles/driver-porting/ | |
| KernelTrap: | |
| Occasional Linux kernel articles and developer interviews | |
| http://kerneltrap.org/ | |
| KernelNewbies: | |
| Documentation and assistance for new kernel programmers | |
| http://kernelnewbies.org/ | |
| Linux USB project: | |
| http://www.linux-usb.org/ | |
| How to NOT write kernel driver by Arjan van de Ven: | |
| http://www.fenrus.org/how-to-not-write-a-device-driver-paper.pdf | |
| Kernel Janitor: | |
| http://kernelnewbies.org/KernelJanitors | |
| GIT, Fast Version Control System: | |
| http://git-scm.com/ |