我正在阅读LKM
开发手册,并在编写设备驱动程序时遇到以下示例:
/*
* Prototypes - this would normally go in a .h file
*/
int init_module(void);
void cleanup_module(void);
static int device_open(struct inode *, struct file *);
static int device_release(struct inode *, struct file *);
static ssize_t device_read(struct file *, char *, size_t, loff_t *);
static ssize_t device_write(struct file *, const char *, size_t, loff_t *);
我被迷惑的事情是,建议把static
非-inline
声明成一个头文件。是什么原因呢?
如果我们不应该在驱动程序以外的任何地方使用这些与驱动程序相关的功能,
struct file_operations fops = {
.open = device_open,
.release = device_release,
.read = device_read,
.write = device_write
};
static int init_module(void){
int register_result = register_chrdev(&fops);
//...
}
在模块初始化期间,我们可以将它们的静态定义直接放在此处,而无需进行原型声明。否则,应该(应该?)使用外部链接声明它们。
绝对没有必要将static
非inline
声明放入单独的头文件中。
如果驱动程序非常复杂,则device_*
可以将方法的定义安排到不同的源文件中(file_operations
也可以将结构的定义安排到其自己的源文件中),但在这种情况下,static
应删除说明符。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句