| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2005-06-28 20:45:30 -07:00
										 |  |  | by the Linux assigned name and number authority (currently this is | 
					
						
							|  |  |  | Torben Mathiasen). The site is http://www.lanana.org/. This | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | also deals with allocating numbers for devices that are not going to | 
					
						
							|  |  |  | be submitted to the mainstream kernel. | 
					
						
							| 
									
										
										
										
											2005-06-28 20:45:30 -07:00
										 |  |  | See Documentation/devices.txt for more information on this. | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-06-28 20:45:30 -07:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | have shipped to customers before. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Who To Submit Drivers To | 
					
						
							|  |  |  | ------------------------ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Linux 2.0: | 
					
						
							| 
									
										
										
										
											2006-01-08 01:02:49 -08:00
										 |  |  | 	No new drivers are accepted for this kernel tree. | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | Linux 2.2: | 
					
						
							| 
									
										
										
										
											2006-01-08 01:02:49 -08:00
										 |  |  | 	No new drivers are accepted for this kernel tree. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Linux 2.4: | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	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 | 
					
						
							| 
									
										
										
										
											2007-10-20 02:02:12 +02:00
										 |  |  | 	maintainer then please contact Willy Tarreau <w@1wt.eu>. | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							| 
									
										
										
										
											2008-10-15 22:01:59 -07:00
										 |  |  | 	submissions is Andrew Morton. | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							| 
									
										
										
										
											2005-06-28 20:45:30 -07:00
										 |  |  | 		of exclusive GPL licensing, and if you wish the driver | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 		to be useful to other communities such as BSD you may well | 
					
						
							|  |  |  | 		wish to release under multiple licenses. | 
					
						
							| 
									
										
										
										
											2006-01-08 01:02:49 -08:00
										 |  |  | 		See accepted licenses at include/linux/module.h | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | 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 | 
					
						
							| 
									
										
										
										
											2006-09-29 02:01:43 -07:00
										 |  |  | 		the copyright owner. | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | Interfaces:	If your driver uses existing interfaces and behaves like | 
					
						
							|  |  |  | 		other drivers in the same class it will be much more likely | 
					
						
							| 
									
										
										
										
											2006-09-29 02:01:43 -07:00
										 |  |  | 		to be accepted than if it invents gratuitous new ones. | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 		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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-05-08 00:24:07 -07:00
										 |  |  | 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 . | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | Control:	In general if there is active maintainance of a driver by | 
					
						
							| 
									
										
										
										
											2006-09-29 02:01:43 -07:00
										 |  |  | 		the author then patches will be redirected to them unless | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 		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 | 
					
						
							| 
									
										
										
										
											2006-09-29 02:01:43 -07:00
										 |  |  | 		vendor' to get your driver chosen. Ideally work with the | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 		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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-09-29 02:01:43 -07:00
										 |  |  | Linux kernel mailing list: | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 	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: | 
					
						
							| 
									
										
										
										
											2006-01-14 12:57:41 +01:00
										 |  |  | 	http://www.linux-usb.org/ | 
					
						
							| 
									
										
										
										
											2006-01-08 01:02:49 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-09-29 02:01:43 -07:00
										 |  |  | How to NOT write kernel driver by Arjan van de Ven: | 
					
						
							|  |  |  | 	http://www.fenrus.org/how-to-not-write-a-device-driver-paper.pdf | 
					
						
							| 
									
										
										
										
											2006-01-08 01:02:49 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | Kernel Janitor: | 
					
						
							|  |  |  | 	http://janitor.kernelnewbies.org/ |