 
 
 
 
 
 
 
 
 
 
 Next: Where From Here?
 Up: Linux Kernel Module Programming
 Previous: Common Pitfalls
    
Changes between 2.0 and 2.2
I don't know the entire kernel well enough do document all of the changes. 
In the course of converting the examples (or actually, adapting 
Emmanuel Papirakis's changes) I came across the following differences. I 
listed all of them here together to help module programmers, especially those
who learned from previous versions of this book and are most familiar with
the techniques I use, convert to the new version.
An additional resource for people who wish to convert to 2.2 is in 
http://www.atnf.csiro.au/~ rgooch/linux/docs/porting-to-2.2.html.
- 
 
- 1.
- asm/uaccess.h If you need put_user
	or get_user you have to #include it.
	  
	  
 
- 2.
- get_user In version 2.2, get_user receives both the
	pointer into user memory and the variable in kernel memory to fill
	with the information. The reason for this is that get_user 
	can now read two or four bytes at a time if the variable we read
	is two or four bytes long.
 
- 3.
- file_operations This structure now has a flush function between
	the open and close functions. 
	  
 
- 4.
- close in file_operations In version 2.2, the close
	function returns an integer, so it's allowed to fail.
	 
 
- 5.
- read and write in file_operations The headers
	for these functions changed. They now return ssize_t instead
	of an integer, and their parameter list is different. The inode
	is no longer a parameter, and on the other hand the offset into
	the file is.
	   
 
- 6.
- proc_register_dynamic This function no longer exists. Instead,
	you call the regular proc_register and put zero in the inode
	field of the structure. 
	  
 
- 7.
- Signals The signals in the task structure are no longer a 32 bit
	integer, but an array of _NSIG_WORDS integers.
	  
 
- 8.
- queue_task_irq Even if you want to scheduale a task to happen
	from inside an interrupt handler, you use queue_task, not
	queue_task_irq.
	   
	 
 
- 9.
- Module Parameters You no longer just declare module parameters
	as global variables. In 2.2 you have to also use MODULE_PARM
	to declare their type. This is a big improvement, because it allows
	the module to receive string parameters which start with a digits,
	for example, without getting confused.
	  
	 
 
- 10.
- Symmetrical Multi-Processing The kernel is no longer inside one
	huge spinlock, which means that kernel modules have to be aware of
	SMP.
	  
 
 
 
 
 
 
 
 
 
 
 
 Next: Where From Here?
 Up: Linux Kernel Module Programming
 Previous: Common Pitfalls
1999-05-19