温馨提示×

linux drivers怎么加载

小樊
33
2026-09-24 22:01:33
栏目: 智能运维

在 Linux 中,“加载驱动”通常指加载内核模块(Kernel Module,.ko 文件)让内核在启动时自动加载驱动。下面按常见场景说明。


一、手动加载驱动(内核模块)

1. 查看已加载模块

lsmod

cat /proc/modules

2. 加载模块

sudo insmod /path/to/driver.ko

或(推荐,自动处理依赖):

sudo modprobe driver_name

modprobe 不需要写 .ko,只要模块在 /lib/modules/$(uname -r)/ 中。

3. 卸载模块

sudo rmmod driver_name

sudo modprobe -r driver_name

4. 查看模块信息

modinfo driver_name

二、开机自动加载驱动

方法 1:写入模块加载配置(推荐)

sudo vim /etc/modules-load.d/my_driver.conf

内容:

my_driver

系统启动时会自动 modprobe my_driver

方法 2:modprobe 配置(带参数)

sudo vim /etc/modprobe.d/my_driver.conf

示例:

options my_driver param=1

三、设备树 / 硬件自动加载(嵌入式 Linux)

ARM / 嵌入式(如树莓派、i.MX、RK) 中:

  • 驱动是否加载取决于 设备树(DTS)
  • 设备树中 compatible 匹配驱动中的 of_match_table
  • 内核编译时需开启对应驱动(=y=m

示例:

&i2c1 {
    my_device@50 {
        compatible = "vendor,my-driver";
        reg = <0x50>;
    };
};

四、编译并安装驱动

如果是自己写的驱动:

make
sudo cp my_driver.ko /lib/modules/$(uname -r)/kernel/drivers/
sudo depmod -a
sudo modprobe my_driver

五、常见问题

1. modprobe: FATAL: Module not found

  • 模块未放入 /lib/modules/$(uname -r)/
  • 未执行 depmod -a
  • 内核版本不匹配

2. insmod: ERROR: could not insert module

  • 查看日志:
dmesg | tail

3. 驱动已编译进内核(=y)

  • 不需要 insmod
  • 设备匹配后自动加载

六、总结一句话

PC Linux: insmod / modprobe
嵌入式 Linux: 设备树 + 内核配置
开机加载: /etc/modules-load.d/

如果你有具体场景(比如 USB、PCI、树莓派、自己写的驱动),可以告诉我,我可以给你更精确的命令。

0