当前位置: 技术问答>linux和unix
linux设备驱动 SCULL问题
来源: 互联网 发布时间:2016-08-17
本文导语: 先用mknod命令创建一个字符设备,然后要把这个文件的file结构中的f_op指向一个file_operations结构,如下: struct file_operations sucll_fops{ .owner = THIS_MODULE; ..................... ..................... }结构中为...
先用mknod命令创建一个字符设备,然后要把这个文件的file结构中的f_op指向一个file_operations结构,如下:
struct file_operations sucll_fops{
.owner = THIS_MODULE;
.....................
.....................
}结构中为什么要加个 ‘.’?什么意思?
sucll_open函数是由谁来执行的?怎么才能把f_op指向file_operations?何时注册scull设备?
请高人,给个一般性描述。
struct file_operations sucll_fops{
.owner = THIS_MODULE;
.....................
.....................
}结构中为什么要加个 ‘.’?什么意思?
sucll_open函数是由谁来执行的?怎么才能把f_op指向file_operations?何时注册scull设备?
请高人,给个一般性描述。
|
结构中为什么要加个 ‘.’?什么意思?
c99的
引用:
当一个类似结构的东西需要临时构造的时候,可以用 (type_name){xx,xx,xx} 这有点像 C++ 的构造函数
初始化结构的时候现在可以这样写:
struct {int a[3], b;} hehe[] = { [0].a = {1}, [1].a = 2 };
struct {int a, b, c, d;} hehe = { .a = 1, .c = 3, 4, .b = 5} // 3,4 是对 .c,.d 的赋值
sucll_fops 将function与设备关联 register_chr_dev(针对字符设备)后就注册了
用户态调用后都需要通过fop结构的成员进行相应操作
c99的
引用:
当一个类似结构的东西需要临时构造的时候,可以用 (type_name){xx,xx,xx} 这有点像 C++ 的构造函数
初始化结构的时候现在可以这样写:
struct {int a[3], b;} hehe[] = { [0].a = {1}, [1].a = 2 };
struct {int a, b, c, d;} hehe = { .a = 1, .c = 3, 4, .b = 5} // 3,4 是对 .c,.d 的赋值
sucll_fops 将function与设备关联 register_chr_dev(针对字符设备)后就注册了
用户态调用后都需要通过fop结构的成员进行相应操作
|
sucll_open函数是由谁来执行的?
scull_open函数是由系统调用open里执行的,一般过程是当用户程序调用open系统调用打开设备文件的时候,进入内核态,执行open系统调用,在open里会确定调用对应的xxx_open这里是scull_open.
怎么才能把f_op指向file_operations?
在模块初始化里,会有相应的代码,或者说这个scull设备有自己的结构体,在结构体里会将file_operation的指针给赋上,模块初始化的时候就会关联f_ops。
何时注册scull设备?
模块初始化的时候调用register_chardev(忘了具体函数名,如果是字符设备就会调用注册函数,如果是其它设备就调用相应的注册函数)
这里只说了个大概,不是很专业,希望对你有用
scull_open函数是由系统调用open里执行的,一般过程是当用户程序调用open系统调用打开设备文件的时候,进入内核态,执行open系统调用,在open里会确定调用对应的xxx_open这里是scull_open.
怎么才能把f_op指向file_operations?
在模块初始化里,会有相应的代码,或者说这个scull设备有自己的结构体,在结构体里会将file_operation的指针给赋上,模块初始化的时候就会关联f_ops。
何时注册scull设备?
模块初始化的时候调用register_chardev(忘了具体函数名,如果是字符设备就会调用注册函数,如果是其它设备就调用相应的注册函数)
这里只说了个大概,不是很专业,希望对你有用
|
赋值方式具体原因不知道
|
其实就是对结构
进行复制。