модуль ядра не регистрируется в ядре при сборке как модуль, хотя если он встроен, он работает - PullRequest
1 голос
/ 08 марта 2019

Я впервые работаю с модулями ядра в ядре. Я пытаюсь запустить датчик BMC150, для которого ядро ​​уже имеет драйвер IIO-framework: https://elixir.bootlin.com/linux/latest/source/drivers/iio/magnetometer

Я вижу это:

static const struct of_device_id bmc150_magn_of_match[] = {
    { .compatible = "bosch,bmc150_magn" },
    { .compatible = "bosch,bmc156_magn" },
    { .compatible = "bosch,bmm150_magn" },
    { }
};

Итак, я создал свой узел дерева устройств следующим образом:

 magn@13 {
             compatible = "bosch,bmc150_magn";
             reg = <0x13>;
             status = "ok";
         };

Теперь, если я построил модуль как встроенный, я вижу драйвер под /sys/bus/i2c/drivers, и происходит зонд, и я вижу устройство под /sys/bus/iio/devices, и все работает нормально, и я могу получить показания от датчика.

Однако, если бы я собирал модуль как «M» (не встроенный), я не вижу модуль под /sys/bus/i2c/drivers и также не генерируются никакие устройства IIO. Похоже, ядро ​​не знает о драйвере. В чем здесь проблема? (Я использую rootbox для busybox, и я использовал make modules_install для установки модулей в rootfs. Если я это сделаю, "modprobe загрузит драйвер, и все будет нормально) *

Я прочитал в этом ТАКОМ сообщении, что если у модуля есть другие модули, которые еще не загружены в качестве зависимостей, то эти проблемы могут возникнуть. Это проблема, я не уверен. Пожалуйста, руководство.

...