前些时间写了一个PCIe的驱动,期间遇到了各种问题。现在将这些问题总结下备将来用。
Makefile
FLAGS
驱动的Makfile里用CCFLAGS
有时不能达到想要的目的,此时需要使用EXTRA_CFLAGS
参数。
DATE与TIME
调试内核时可能会用到__DATE__
和__TIME__
这两个宏,此时编译的时候可能会报出相关的warning
警告。此时可以使用-Wno-err=date-time
关闭日期和时间相关的警告信息。
无参函数
内核中的无参函数虽然可以使用
void func();
这样的声明,但这样的声明会让编译器报出warning
。无参函数建议使用
void func( void );
这样的“标准”形式。
file_operations
file_operations
这个结构体在内核中经常用到,该结构体中有诸多函数指针成员。在对该结构的变量进行初始化时,对于不需要特殊操作的函数指针可初始化成NULL
。这样调用对应函数时,内核将永远返回成功。
struct file_operations fps = {
read: NULL,
write: NULL,
open: NULL,
release: NULL,
}