1.注意并发
2.一个良好设计的模块可以在装载时进行配置,这比编译时的配置为用户提供了更多的灵活性。
3.模块的退出函数必须仔细的撤销初始或函数所做的一切,否则在系统引导之前某些东西就会残留在系统中。
4.如果模块打算和多个内核版本一起工作,则需要使用宏以及#ifdef来做版本测。
5.使用层叠技术。
6.系统调用以sys_开头可以用grep sys_查找,注册函数以register_开头可以用grep register_查找,各模块导出的符号表可以用grep EXPORT_SYMBOL查找。
7.当我们在内核中注册设施时要注意注册可能会失败,所以要采用合适的方法处理错误。
8.模块初始化函数完注册设施后,内核的某些部分可能会立即使用我们刚刚注册的设施。所以在初始化函数运行时,内核就完全可能会调用我们的模块。因此在完成某个设施的所有内部初始化前,不要注册此设施,因为一旦注册的话此设施可能立刻被用到。
9.模块参数要有个默认值,这样可判定是不是一个显式指定的参数。
10.sysfs可以访问到传给模块的参数,可以修改模块的参数,但是不会通知模块,故不应该让模块是可写的。
11.如果用户空间想访问内存,则需要mmap映射/dev/mem才能直接访问。
12.如果用户空间想访问端口需要调用ioperm或iopl。