Я впервые работаю с модулями ядра в ядре. Я пытаюсь запустить датчик 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 загрузит драйвер, и все будет нормально) *
Я прочитал в этом ТАКОМ сообщении, что если у модуля есть другие модули, которые еще не загружены в качестве зависимостей, то эти проблемы могут возникнуть. Это проблема, я не уверен. Пожалуйста, руководство.