如何将设备驱动程序加载到linux内核中?

时间:2013-07-10 06:52:12

标签: linux linux-kernel linux-device-driver

任何人都可以告诉我,如何将设备驱动程序加载到Linux内核中?表示函数调用流程。谁调用了什么?等,用于静态和pnp驱动程序。用一些例子会很棒,就像插入USB笔式驱动器一样。 感谢

1 个答案:

答案 0 :(得分:2)

  • 首先,要加载到内核中,必须将驱动程序编译为模块。
  • 已编译的模块将具有 .ko 扩展名。
  • 模块的通常位置在 / lib / modules 目录中。
  • 您可以使用命令 lsmod
  • 获得所有插入模块的列表
  • 系统或用户插入模块时加载模块(命令 insmod modprobe
  • module_init()函数指定插入模块时要调用的函数:

    static int __init hello_init(void)
    {
        printk(KERN_ALERT "Hello world!\n");
        return 0;
    }
    module_init(hello_init);
    
  • 同样,函数 module_exit()指定卸载模块时要执行的函数

  • 该功能定义为静态,因为它不应在文件
  • 之外显示
  • __ init 令牌告诉内核在加载模块后可以删除该函数

  • 内核函数 sys_init_module()

    • 分配(通过 vmalloc())内存来保存模块;
    • 将模块复制到该内存区域;
    • 通过内核符号表解析模块中的内核引用(类似于链接器 ld
    • 调用模块的初始化函数。