| 2.0 和2.2版之间的变化
我并不彻底的知道内核以写出所有的变化。在范例转化的过程中(或者适应Emmanuel
Papirakis的变化)我遇到了下面的差异。我在这儿列出所有的我知道的以帮助模块程序员,特别是从本书的上一版中学习的那些人和使用和我使用的技术大多相似的人,转化到新的版本。
一个为希望转化为2.2版的人有用的附加的资源在 http://www.atnf.csiro.au/~
rgooch/linux/docs/porting-to-2.2.htm.
1.asm/uaccess.h 如果你需要 put_user 或者 get_user
你需要 #include 它。
2.get_user 在 2.2 版中, get_user 接收指向用户内存段的指针和内核内存段的变量以填充信息。原因是如果我们读的变量是两个或四个字节长,
get_user现在可以一次读完。
3.file_operations 这个结构在 open 和 close 函数间有刷新函数。
4.file_operations中的关闭函数 在 2.2版中,关闭函数返回整数,因此它允许失败。
5.file_operations中的读写函数 这些函数的头文件改变了。它们现在返回
ssize_t 而不是整数,而且它们的参数列表也不同。节点不再是参数而是文件偏移量。
6.proc_register_dynamic 这个函数不再存在。你可以调用普通的
proc_register 函数并将结构的节点成员设置为0。
7.Signals 任务结构中的信号不再是32位整数而是 _NSIG_WORDS
整数数组。
8.queue_task_irq 即使你想从中断句柄中让一个任务按进度表发生,你应该使用
queue_task,而不是queue_task_irq.
9.模块参数 你不能只将模块参数声明为全局变量。在 2.2 版中你必须也使用MODULE_PARM
声明它的类型。这是一个巨大的改进,例如它允许模块接收以数字开头的字符串参数而不会混淆。
10.对称多处理 内核不再局限在一个巨大的旋转锁里面,这意味着内核模块必须知道对称多处理。
|