1. 模块的装载竞争(竞态)
竞态是驱动程序设计极其重要的方面,始终要铭记:在注册完成后,内核的某些部分可能会立即使用我们刚刚注册的任何设施。换句话说,在初始化函数还在运行的时候,内核就完全可能会调用我们的模块。因此,在首次注册完成后,代码就应该准备好被内核其他部分调用;在用来支持某个设施的所有内部初始化完成之前,不要注册任何设施。
同时可能出现初始化失败,但是内核的某些部分已经使用了模块所注册的某个设施时的情况。理论上既然已经使用了注册的某个设施,不应该出现初始化失败的情况,毕竟模块已经成功导出了可用的功能及符号。这种情况暂时按下不表,后续深入学习。
2. 模块参数
insmod和modprobe在装载模块时可以赋值参数,并且modprobe还能从指定文件中读取参数。驱动程序中通过module_param宏来声明参数,例如:
static char *whom = "world"; static int howmany = 1; module_param(howmany, int, S_IRUGO); module_param(whom, charp, S_IRUGO);
/* module_param 宏的最后一个参数为成员访问许可证
* 其中S_IRUGO表示所有用户均可读取参数,但不能修改参数。
* S_IRUGO | S_IWUSR 表示允许root用户修改该参数。
* 在严谨的情况下,我们不允许参数可写,此处按住不表,因为涉及到修改sysfs而使参数被修改,并且不予通知的情况。目前内核是否对此做了修改需要查证。
*/
当参数涉及到数组时,也有特定的宏 module_param_arry,具体不细表。
标签:驱动程序,04,module,参数,param,模块,LINUX,内核 From: https://www.cnblogs.com/hw-blog/p/17711586.html