zoukankan      html  css  js  c++  java
  • 驱动模块的加载与卸载

     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

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

  • 相关阅读:
    js(一)
    css (一)
    html
    Spring MVC(四)
    Spring MVC(三)
    Spring MVC(二)
    Spring MVC(一)
    Druid应用
    C3P0使用
    jdbc(二)
  • 原文地址:https://www.cnblogs.com/Mike2019/p/12893455.html
Copyright © 2011-2022 走看看