-4

谁能告诉,如何将设备驱动程序加载到 linux 内核中?表示函数调用流程。谁调用了什么?等,用于静态和 pnp 驱动程序。有一些例子会很棒,比如插入 USB 笔式驱动器之类的东西。谢谢

4

1 回答 1

2
  • 首先,要加载到内核中,驱动程序必须被编译为模块。
  • 编译后的模块将具有.ko扩展名。
  • 模块的通常位置在/lib/modules目录中。
  • 您可以使用命令lsmod获得所有插入模块的列表。
  • 当系统或用户插入模块时加载模块(命令insmodmodprobe
  • 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
    • 调用模块的初始化函数。
于 2013-07-10T07:00:43.920 回答