Я читаю 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
non - 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);
//...
}
во время инициализации модуля, тогда мы можем просто поместить их статические определенияпрямо здесь, избегая объявления прототипов. В противном случае они должны (должны?) Быть объявлены с внешней связью.