我对内核的了解并不很完全所以我也无法写出所有的变化。在修改代码 (更确切的说,是采用Emmanuel Papirakis的修改)时,我遇到了以下的这些修改。 我将它们都列出来以方便模块编写者们,特别是学习该档案先前版本并熟悉我提到的这些技巧 (但已经更换到新版本的)的那些人。
更多的这方面的参考资料在 Richard Gooch's的站点上。
如果你要使用put_user
或get_user
你就需要
#include它。
get_user
在2.2版本中,get_user
同时接收用户内存的指针和用来
设置信息的内核内存中变量的内存指针。变化的原因是因为当我们读取的变量是二或四个字节长的时候,
get_user
也可以读取二或四个字节长的变量。
file_operations
改结构体现在有了一个可以在open
和
close
之间进行的刷新操作函数。
close
in file_operations
2.2版本中,close
返回整形值,所以可以检测是否失败。
read
,write
in file_operations
这些函数的头文件改变了。它们现在返回ssize_t而不是整形值, 且它们的参数表也变了。inode 不再是一个参数,文件中的偏移量也一样。
proc_register_dynamic
queue_task_irq
即使你想在中断处理内部调度一个任务,你也应该使用
queue_task
而不是queue_task_irq
。
你不必在将模块参数声明为全局变量。在2.2中,使用 MODULE_PARM去声明模块参数。这是一个进步, 这样就允许模块接受以数字开头的参数名而不会被弄糊涂。
内核本省已不再是一个spinlock,意味着你的模块也应该考虑 SMP的问题。