01🙆♂️起因
在学习字符设备驱动的时候,看到Linux内核中的结构体的指定初始化方式(designated initializer
)使用方式,之前没有见过这种初始化形式,做一点探索。
/* 字符设备操作集 */
static struct file_operations gpio_fops={
.owner = THIS_MODULE,
.open = gpio_open,
.release = gpio_relase,
.read = gpio_read,
.write = gpio_write,
.fasync = gpio_fasync,
.release = gpio_release,
};
上面的结构体,
-
通过
.open = gpio_open,
的方式,进行初始化结构体的成员项。 -
将驱动注册到内核中。
-
然后,应用程序使用
open
的时候,直接通过回调函数的形式来执行我们驱动实现的相关功能gpio_open
。
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
ssize_t (*</