insmod命令执行后,会调用kernel/module.c里的一个系统调用init_module,它会调用load_module函数,将用户空间传入的整个内核模块文件创建成一个内核模块,并返回一个struct module结构体,从此,内核中便以这个结构体代表这个内核模块。 再看看THIS_MODULE宏是什么意思,它在include/linux/module.h里的定义是 85 #define TH...
load_module函数中完成模块的部分创建工作后,把状态置为MODULE_STATE_COMING,sys_init_module函数中完成模块的全部初始化工作后(包括把模块加入全局的模块列表,调用模块本身的初始化函数),把模块状态置为MODULE_STATE_LIVE,最后,使用rmmod工具卸载模块时,会调用系统调用delete_module,会把模块的状态置为MODULE_STATE_GOIN...
insmod命令执行后,会调用kernel/module.c里的一个系统调用init_module,它会调用load_module函数,将用户空间传入的整个内核模块文件创建成一个内核模块,并返回一个struct module结构体,从此,内核中便以这个结构体代表这个内核模块。 再看看THIS_MODULE宏是什么意思,它在include/linux/module.h里的定义是 85 #define TH...
在module.h 中 THIS_MODULE的定义如下: externstructmodule __this_module;#defineTHIS_MODULE (&__this_module) 即是保存了__this_module这个对象的地址,那这个__this_module在哪里定义呢?这就要从module的编译说起啦,如果编译过模块就会发现,会生成*.mod.c这样的一个文件,打开这个文件,就会发现,类似下面的定...
在Linux 驱动开发中,`owner` 字段是 `struct file_operations` 结构体的一个成员,它指向一个 `struct module` 结构体,表示拥有这个文件操作集的内核模块。这个字段的主要目的是防止在文件操作仍然在使用时,内核模块被卸载。 当你在驱动的 `file_operations` 结构体中设置 `owner = THIS_MODULE` 时,你告诉内核:...
struct class *myclass = class_create(THIS_MODULE, “my_device_driver”); class_device_create(myclass, NULL, MKDEV(major_num, 0), NULL, “my_device”); 这样的module被加载时,udev daemon就会自动在/dev下创建my_device设备文件。 下面以一个简单字符设备驱动来展示如何使用这几个函数: ...
struct snd_card*card;int err;...err=snd_card_create(index,id,THIS_MODULE,0,&card); index:一个整数值,该声卡的编号 id:字符串,声卡的标识符 第四个参数:该参数决定在创建snd_card实例时,需要同时额外分配的私有数据的大小,该数据的指针最终会赋值给snd_card的private_data数据成员 card...
0; } //设备操作函数 static struct file_operations led_fops = { .owner = THIS_MODULE, ...
(KERN_NOTICE"Can't allocate major number %d for Memory Technology Devices.\n",MTD_CHAR_MAJOR);return-EAGAIN;}mtd_class=class_create(THIS_MODULE,"mtd");//创建类if(IS_ERR(mtd_class)){printk(KERN_ERR"Error creating mtd class.\n");unregister_chrdev(MTD_CHAR_MAJOR,"mtd");returnPTR_ERR(...
{/*__FILE__ :表示文件*__FUNCTION__ :当前函数名*__LINE__ :在文件的哪一行*/printk("%s %s %d\n",__FILE__,__FUNCTION__, __LINE__);return 0;}static const struct file_operations hello_drv = {.owner = THIS_MODULE,.read = hello_read,.write = hello_write,.open = hello_open,....