如何加载和卸载内核中内置的 linux 个驱动程序

How to load and unload linux drivers that are built into kernel

我想在设备终端加载和卸载 linux 驱动程序,我有两个选择,但我不想做第一个

  1. 将驱动程序构建为模块 CONFIG_DRIVER =米 我可以使用 rmmod 和 modprobe 卸载和加载设备驱动程序。

  2. 将设备驱动程序构建到内核本身 CONFIG_DRIVER = Y

我想按照第二个选项,但我不知道如何卸载和加载设备驱动程序,请开源社区帮助我!

就这么简单。您找到一个设备和 driver 想要解除绑定。例如,在我的 Intel Minnownboard (v1) 上我有 PCH UDC 控制器(一个 PCI 设备):

% lspci -nk
...
02:02.4 0c03: 8086:8808 (rev 02)
        Subsystem: 1cc8:0001
        Kernel driver in use: pch_udc

现在我知道必要的信息了:

  • 设备所在的总线:PCI
  • 设备名称:0000:02:02.4(注意lspci给出了减少的PCI地址,即没有域或i.o.w。BDF,而 driver 期望 domain:BDF)
  • driver 姓名:pch_udc

一共可以解绑设备:

% echo 0000:02:02.4 > /sys/bus/pci/drivers/pch_udc/unbind
[ 3042.531872] configfs-gadget 0000:02:02.4: unregistering UDC driver [g1]
[ 3042.540979] udc 0000:02:02.4: releasing '0000:02:02.4'

您可以重新绑定。简单使用bind节点在同一个文件夹。

该功能出现在 15 多年前,这里是 LWN 上的 the article 对其进行了解释。