searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

ko自动load的原理、方式、配置手段

2025-04-27 10:30:24
0
0

Linux内核模块(.ko文件)的自动load涉及多个组件和配置步骤,以下是其原理、方式及配置手段的详细说明:

一、自动load原理

  1. 模块与硬件的匹配:
    • 内核模块通过MODULE_DEVICE_TABLE宏声明其支持的设备标识符(如USB设备的vendorID:productID或PCI设备的ID)。
    • 这些信息会被编译到模块中,并通过depmod工具生成到/lib/modules/$(uname -r)/modules.alias文件中。
  2. 事件触发机制:
    • 当硬件被检测到(如插入USB设备),内核通过sysfs生成设备节点,并触发udev事件。
    udev根据设备属性(如ID)查询modules.alias,找到匹配的模块名。
  3. 依赖处理:
    depmod生成的modules.dep文件记录模块依赖关系,modprobe在load模块时会自动解析并load依赖项。

二、自动load方式

  1. 启动时静态load:
    • systemd-modules-load:在系统启动时读取/etc/modules-load.d/*.conf,load列出的模块。
    • initramfs:在早期启动阶段load关键驱动(如磁盘控制器驱动),需通过dracutupdate-initramfs更新。
  2. 运行时动态load:
    • udev规则:udev根据设备事件调用modprobeload模块。默认规则位于/usr/lib/udev/rules.d/80-drivers.rules
    • 手动触发:通过modprobe <模块名>手动load。

三、配置手段

  1. 模块列表配置:
    • 在/etc/modules-load.d/中创建.conf文件,每行写入需启动时load的模块名。例如:
    # /etc/modules-load.d/my-driver.conf
    my_driver
    
  2. 模块别名与黑名单:
    • 在/etc/modprobe.d/中创建配置文件,设置别名或将模块加入blacklist:
    # 将模块加入blacklist
    blacklist problematic_module
    # 设置别名
    alias pci:v00001234d* my_driver
    
  3. udev规则定制:
    • 创建自定义规则文件(如/etc/udev/rules.d/99-my-driver.rules):
    # 匹配USB设备并load模块
    ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1234", ATTR{idProduct}=="5678", RUN+="/sbin/modprobe my_driver"
    
  4. 更新模块数据库:
    • 安装新模块后,需运行:
    sudo depmod -a
    sudo systemctl restart systemd-udevd
    
0条评论
0 / 1000
c****w
5文章数
0粉丝数
c****w
5 文章 | 0 粉丝
原创

ko自动load的原理、方式、配置手段

2025-04-27 10:30:24
0
0

Linux内核模块(.ko文件)的自动load涉及多个组件和配置步骤,以下是其原理、方式及配置手段的详细说明:

一、自动load原理

  1. 模块与硬件的匹配:
    • 内核模块通过MODULE_DEVICE_TABLE宏声明其支持的设备标识符(如USB设备的vendorID:productID或PCI设备的ID)。
    • 这些信息会被编译到模块中,并通过depmod工具生成到/lib/modules/$(uname -r)/modules.alias文件中。
  2. 事件触发机制:
    • 当硬件被检测到(如插入USB设备),内核通过sysfs生成设备节点,并触发udev事件。
    udev根据设备属性(如ID)查询modules.alias,找到匹配的模块名。
  3. 依赖处理:
    depmod生成的modules.dep文件记录模块依赖关系,modprobe在load模块时会自动解析并load依赖项。

二、自动load方式

  1. 启动时静态load:
    • systemd-modules-load:在系统启动时读取/etc/modules-load.d/*.conf,load列出的模块。
    • initramfs:在早期启动阶段load关键驱动(如磁盘控制器驱动),需通过dracutupdate-initramfs更新。
  2. 运行时动态load:
    • udev规则:udev根据设备事件调用modprobeload模块。默认规则位于/usr/lib/udev/rules.d/80-drivers.rules
    • 手动触发:通过modprobe <模块名>手动load。

三、配置手段

  1. 模块列表配置:
    • 在/etc/modules-load.d/中创建.conf文件,每行写入需启动时load的模块名。例如:
    # /etc/modules-load.d/my-driver.conf
    my_driver
    
  2. 模块别名与黑名单:
    • 在/etc/modprobe.d/中创建配置文件,设置别名或将模块加入blacklist:
    # 将模块加入blacklist
    blacklist problematic_module
    # 设置别名
    alias pci:v00001234d* my_driver
    
  3. udev规则定制:
    • 创建自定义规则文件(如/etc/udev/rules.d/99-my-driver.rules):
    # 匹配USB设备并load模块
    ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1234", ATTR{idProduct}=="5678", RUN+="/sbin/modprobe my_driver"
    
  4. 更新模块数据库:
    • 安装新模块后,需运行:
    sudo depmod -a
    sudo systemctl restart systemd-udevd
    
文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0