内核模块中的静态函数原型

圣安东尼奥

我正在阅读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);
    //...
}

在模块初始化期间,我们可以将它们的静态定义直接放在此处,而无需进行原型声明。否则,应该(应该?)使用外部链接声明它们。

齐瓦列夫

绝对没有必要将staticinline声明放入单独的头文件中。

如果驱动程序非常复杂,则device_*可以将方法的定义安排到不同的源文件中(file_operations也可以将结构的定义安排到其自己的源文件中),但在这种情况下,static应删除说明符。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章