设备驱动开发3-驱动模块的加载与卸载

 1、Linux驱动的两种运行方式

1.将驱动编译进Linux内核中,当内核启动就会自动运行驱动程序;2.将驱动编译成模块(.ko文件),在内核启动以后使用“insmod”命令加载驱动模块。

2、注册模块加载和卸载函数

module_init(xxx_init);    //注册模块加载函数. xxx_init:需要注册的具体函数
module_exit(xxx_exit);  //注册模块卸载函数. xxx_exit:需要注册的具体函数

  当使用“insmod”命令加载驱动的时候,xxx_init会被调用;当使用“rmmod”命令加载驱动的时候,xxx_exit会被调用

3、添加LICENSE和作者信息

MODULE_LICENSE("GPL");  //LICENSE采用GPL协议
MODULE_AUTHOR("mk");   //添加作者信息

4、示例

/*************************************************************
* @brief  //TODO:驱动入口函数
*************************************************************/
 static int __init led_init(void)
 {
     //驱动入口函数具体内容
     return 0;
 }

 /*************************************************************
 * @brief  //TODO:驱动出口函数
 *************************************************************/
static void __exit led_exit(void)
{
    //驱动出口函数具体内容
}

module_init(led_init);
module_init(led_exit);

MODULE_LICENSE("GPL");  //LICENSE采用GPL协议
MODULE_AUTHOR("mk");   //添加作者信息

5、驱动模块加载和卸载命令

  加载驱动模块的通常流程:

1.将.ko文件拷贝进/lib/module/4.1.15/kernel/driver/...目录下

  根据具体用途区别分为net、ide、scsi、usb、video、parport、md、block、ata等

2. 运行depmod -a,更新模块依赖,主要是更新module.dep文件

3. 运行modprobe加载内核模块

4.驱动记载成功以后会在/dev目录下创建相应的节点文件xxx,输入命令ls/dev/xxx -l可以查看节点信息。

4.1 insmod

insmod drv.ko //加载drv.ko模块

  insmod不能解决模块的依赖关系

4.2 modprobe

  modprobe会分析模块的依赖关系,默认去/lib/modules/4.1.15目录中查找模块,然后会将所有的依赖模块都加载到内核中。一般自己制作的根文件系统中不会有这个目录,需要自己创建。

4.3 rmmod

  卸载驱动模块

4.4 modprobe -r

  卸载驱动模块所依赖的其他模块

4.5 lsmod

  列出内核已载入模块的状态

 

posted @ 2020-05-15 10:34  Mike_2019  阅读(764)  评论(0编辑  收藏  举报