| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | Submitting Drivers For The Linux Kernel | 
|  | 2 | --------------------------------------- | 
|  | 3 |  | 
|  | 4 | This document is intended to explain how to submit device drivers to the | 
|  | 5 | various kernel trees. Note that if you are interested in video card drivers | 
|  | 6 | you should probably talk to XFree86 (http://www.xfree86.org/) and/or X.Org | 
|  | 7 | (http://x.org/) instead. | 
|  | 8 |  | 
|  | 9 | Also read the Documentation/SubmittingPatches document. | 
|  | 10 |  | 
|  | 11 |  | 
|  | 12 | Allocating Device Numbers | 
|  | 13 | ------------------------- | 
|  | 14 |  | 
|  | 15 | Major and minor numbers for block and character devices are allocated | 
| Randy Dunlap | 84da7c0 | 2005-06-28 20:45:30 -0700 | [diff] [blame] | 16 | by the Linux assigned name and number authority (currently this is | 
|  | 17 | Torben Mathiasen). The site is http://www.lanana.org/. This | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 18 | also deals with allocating numbers for devices that are not going to | 
|  | 19 | be submitted to the mainstream kernel. | 
| Randy Dunlap | 84da7c0 | 2005-06-28 20:45:30 -0700 | [diff] [blame] | 20 | See Documentation/devices.txt for more information on this. | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 21 |  | 
| Randy Dunlap | 84da7c0 | 2005-06-28 20:45:30 -0700 | [diff] [blame] | 22 | If you don't use assigned numbers then when your device is submitted it will | 
|  | 23 | be given an assigned number even if that is different from values you may | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 24 | have shipped to customers before. | 
|  | 25 |  | 
|  | 26 | Who To Submit Drivers To | 
|  | 27 | ------------------------ | 
|  | 28 |  | 
|  | 29 | Linux 2.0: | 
| Xose Vazquez Perez | 5b0ed2c | 2006-01-08 01:02:49 -0800 | [diff] [blame] | 30 | No new drivers are accepted for this kernel tree. | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 31 |  | 
|  | 32 | Linux 2.2: | 
| Xose Vazquez Perez | 5b0ed2c | 2006-01-08 01:02:49 -0800 | [diff] [blame] | 33 | No new drivers are accepted for this kernel tree. | 
|  | 34 |  | 
|  | 35 | Linux 2.4: | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 36 | If the code area has a general maintainer then please submit it to | 
|  | 37 | the maintainer listed in MAINTAINERS in the kernel file. If the | 
|  | 38 | maintainer does not respond or you cannot find the appropriate | 
| Xose Vazquez Perez | 5b0ed2c | 2006-01-08 01:02:49 -0800 | [diff] [blame] | 39 | maintainer then please contact Marcelo Tosatti | 
|  | 40 | <marcelo.tosatti@cyclades.com>. | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 41 |  | 
|  | 42 | Linux 2.6: | 
|  | 43 | The same rules apply as 2.4 except that you should follow linux-kernel | 
|  | 44 | to track changes in API's. The final contact point for Linux 2.6 | 
|  | 45 | submissions is Andrew Morton <akpm@osdl.org>. | 
|  | 46 |  | 
|  | 47 | What Criteria Determine Acceptance | 
|  | 48 | ---------------------------------- | 
|  | 49 |  | 
|  | 50 | Licensing:	The code must be released to us under the | 
|  | 51 | GNU General Public License. We don't insist on any kind | 
| Randy Dunlap | 84da7c0 | 2005-06-28 20:45:30 -0700 | [diff] [blame] | 52 | of exclusive GPL licensing, and if you wish the driver | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 53 | to be useful to other communities such as BSD you may well | 
|  | 54 | wish to release under multiple licenses. | 
| Xose Vazquez Perez | 5b0ed2c | 2006-01-08 01:02:49 -0800 | [diff] [blame] | 55 | See accepted licenses at include/linux/module.h | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 56 |  | 
|  | 57 | Copyright:	The copyright owner must agree to use of GPL. | 
|  | 58 | It's best if the submitter and copyright owner | 
|  | 59 | are the same person/entity. If not, the name of | 
|  | 60 | the person/entity authorizing use of GPL should be | 
|  | 61 | listed in case it's necessary to verify the will of | 
|  | 62 | the copright owner. | 
|  | 63 |  | 
|  | 64 | Interfaces:	If your driver uses existing interfaces and behaves like | 
|  | 65 | other drivers in the same class it will be much more likely | 
|  | 66 | to be accepted than if it invents gratuitous new ones. | 
|  | 67 | If you need to implement a common API over Linux and NT | 
|  | 68 | drivers do it in userspace. | 
|  | 69 |  | 
|  | 70 | Code:		Please use the Linux style of code formatting as documented | 
|  | 71 | in Documentation/CodingStyle. If you have sections of code | 
|  | 72 | that need to be in other formats, for example because they | 
|  | 73 | are shared with a windows driver kit and you want to | 
|  | 74 | maintain them just once separate them out nicely and note | 
|  | 75 | this fact. | 
|  | 76 |  | 
|  | 77 | Portability:	Pointers are not always 32bits, not all computers are little | 
|  | 78 | endian, people do not all have floating point and you | 
|  | 79 | shouldn't use inline x86 assembler in your driver without | 
|  | 80 | careful thought. Pure x86 drivers generally are not popular. | 
|  | 81 | If you only have x86 hardware it is hard to test portability | 
|  | 82 | but it is easy to make sure the code can easily be made | 
|  | 83 | portable. | 
|  | 84 |  | 
|  | 85 | Clarity:	It helps if anyone can see how to fix the driver. It helps | 
|  | 86 | you because you get patches not bug reports. If you submit a | 
|  | 87 | driver that intentionally obfuscates how the hardware works | 
|  | 88 | it will go in the bitbucket. | 
|  | 89 |  | 
|  | 90 | Control:	In general if there is active maintainance of a driver by | 
|  | 91 | the author then patches will be redirected to them unless | 
|  | 92 | they are totally obvious and without need of checking. | 
|  | 93 | If you want to be the contact and update point for the | 
|  | 94 | driver it is a good idea to state this in the comments, | 
|  | 95 | and include an entry in MAINTAINERS for your driver. | 
|  | 96 |  | 
|  | 97 | What Criteria Do Not Determine Acceptance | 
|  | 98 | ----------------------------------------- | 
|  | 99 |  | 
|  | 100 | Vendor:		Being the hardware vendor and maintaining the driver is | 
|  | 101 | often a good thing. If there is a stable working driver from | 
|  | 102 | other people already in the tree don't expect 'we are the | 
|  | 103 | vendor' to get your driver chosen. Ideally work with the | 
|  | 104 | existing driver author to build a single perfect driver. | 
|  | 105 |  | 
|  | 106 | Author:		It doesn't matter if a large Linux company wrote the driver, | 
|  | 107 | or you did. Nobody has any special access to the kernel | 
|  | 108 | tree. Anyone who tells you otherwise isn't telling the | 
|  | 109 | whole story. | 
|  | 110 |  | 
|  | 111 |  | 
|  | 112 | Resources | 
|  | 113 | --------- | 
|  | 114 |  | 
|  | 115 | Linux kernel master tree: | 
|  | 116 | ftp.??.kernel.org:/pub/linux/kernel/... | 
|  | 117 | ?? == your country code, such as "us", "uk", "fr", etc. | 
|  | 118 |  | 
|  | 119 | Linux kernel mailing list: | 
|  | 120 | linux-kernel@vger.kernel.org | 
|  | 121 | [mail majordomo@vger.kernel.org to subscribe] | 
|  | 122 |  | 
|  | 123 | Linux Device Drivers, Third Edition (covers 2.6.10): | 
|  | 124 | http://lwn.net/Kernel/LDD3/  (free version) | 
|  | 125 |  | 
|  | 126 | Kernel traffic: | 
|  | 127 | Weekly summary of kernel list activity (much easier to read) | 
|  | 128 | http://www.kerneltraffic.org/kernel-traffic/ | 
|  | 129 |  | 
|  | 130 | LWN.net: | 
|  | 131 | Weekly summary of kernel development activity - http://lwn.net/ | 
|  | 132 | 2.6 API changes: | 
|  | 133 | http://lwn.net/Articles/2.6-kernel-api/ | 
|  | 134 | Porting drivers from prior kernels to 2.6: | 
|  | 135 | http://lwn.net/Articles/driver-porting/ | 
|  | 136 |  | 
|  | 137 | KernelTrap: | 
|  | 138 | Occasional Linux kernel articles and developer interviews | 
|  | 139 | http://kerneltrap.org/ | 
|  | 140 |  | 
|  | 141 | KernelNewbies: | 
|  | 142 | Documentation and assistance for new kernel programmers | 
|  | 143 | http://kernelnewbies.org/ | 
|  | 144 |  | 
|  | 145 | Linux USB project: | 
| Xose Vazquez Perez | e1b114e | 2006-01-14 12:57:41 +0100 | [diff] [blame] | 146 | http://www.linux-usb.org/ | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 147 |  | 
| Xose Vazquez Perez | 5b0ed2c | 2006-01-08 01:02:49 -0800 | [diff] [blame] | 148 | How to NOT write kernel driver by arjanv@redhat.com | 
|  | 149 | http://people.redhat.com/arjanv/olspaper.pdf | 
|  | 150 |  | 
|  | 151 | Kernel Janitor: | 
|  | 152 | http://janitor.kernelnewbies.org/ | 
|  | 153 |  | 
|  | 154 | -- | 
|  | 155 | Last updated on 17 Nov 2005. |