Linux 驱动中的一些“坑”

前些时间写了一个PCIe的驱动,期间遇到了各种问题。现在将这些问题总结下备将来用。

Makefile

FLAGS

驱动的Makfile里用CCFLAGS有时不能达到想要的目的,此时需要使用EXTRA_CFLAGS参数。

DATETIME

调试内核时可能会用到__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,
}
添加新评论