Linux 带重载设备树的动态内核加载

Linux dynamic kernel loading with overloading device tree

我想为我定制的 spi 板制作我自己的协议驱动程序。我要附加它的平台是带有 arm32 的树莓派 Pi4。我想用覆盖设备树动态加载它。 我可以构建驱动程序文件,但以下内容不清楚:

  1. 驱动器到底应该放在哪里?我试过 /lib/modules/5.4.79-v7, /lib/modules/5.4.79-v7/build
  2. 我在 config.txt 中创建了一个条目 dtoverlays= driver.ko 并将 dtbo 放在 /boot/overlays 下。这是正确的吗?
  3. 我将覆盖文件放在正确的文件夹中后,是否可以在运行时加载驱动程序而无需第二次重启?
  4. 调用函数“spi_new_device”是先加载驱动还是可以这样?

如果我调用 sudo insmod .ko 驱动程序加载:

rpi4: loading out-of-tree module taints kernel.

尚未调用探测函数。

  1. 驱动器到底应该放在哪里?我试过 /lib/modules/5.4.79-v7, /lib/modules/5.4.79-v7/build

Answer: The driver is placed under /lib/modules/5.4.79-v7/extra if it is an extra module and build with.

make -C /lib/modules/`uname -r`/build M=$PWD modules_install
  1. 我在 config.txt 中创建了一个条目 dtoverlays= driver.ko 并将 dtbo 放在 /boot/overlays 下。这是正确的吗?

Answer: It can be done in this way with rpi.

  1. 我将覆盖文件放在正确的文件夹中后,是否可以在运行时加载驱动程序而无需第二次重启?

Answer: If the driver is installed under extra it is not loaded. Also it is not loaded after reboot. The driver must be loaded with "modprobe" but without the extension ".ko". Modprobe search the driver under lib/modules.