Загрузить модуль ядра перед проверкой дерева устройств

Я разработал работающий драйвер для своего пользовательского_оборудования, который опирается на дерево устройств. Поскольку мой драйвер может развиваться, я не хочу, чтобы мой драйвер был частью ядра (когда я говорю «быть частью ядра», я имею в виду, что он должен быть скомпилирован с ядром во время создания ядра).

Вот краткий обзор моего dts:

custom_hardware: custom_hardware@0x41006000 {
    compatible = "mfg,custom";
    reg = <0x41006000 0x1000>;
    #interrupt-cells = <0x1>;
    interrupt-controller;
};

existing_hardware: existing_hardward@41004000 {
    compatible = "mfg,existing";
    reg = <0x41004000 0x1000>;
    interrupt-parent = <&custom_hardware>;
    interrupts = <0>;
};

Драйвер existing_hardware уже скомпилирован с ядром (драйвер existing_hardware был скомпилирован с ядром во время создания ядра).

Что я хотел бы сделать, так это добавить драйвер моего custom_hardware в ramfs и позволить ядру загрузить драйвер custom_hardware перед existing_hardware.

Это важно, поскольку драйвер existing_hardware запрашивает virq из irq_domain драйвера custom_hardware. Чтобы получить irq_domain, сначала необходимо загрузить драйвер custom_hardware.

Обратите внимание, что драйвер existing_hardware загружается во время проверки дерева устройств, что, по-видимому, происходит на ранней стадии последовательности загрузки ядра.


person Z0RrO    schedule 24.03.2014    source источник
comment
Похоже, вы завышаете требования. Я не хочу, чтобы мой драйвер был частью ядра. Загрузить модуль ядра до (до) проверки дерева устройств. Похоже, что единственное существенное требование состоит в том, что Драйвер custom_hardware должен быть установлен перед драйвером existing_hardware, что можно сделать в рамках существующей инфраструктуры. См. этот Вопросы и ответы   -  person sawdust    schedule 24.03.2014


Ответы (2)


Это не так. Порядок загрузки модуля/драйвера не должен иметь значения. Что вам нужно сделать, так это вернуть -EPROBE_DEFER, когда получение IRQ не удается в существующем_оборудовании. Затем он снова будет проверен позже, надеюсь, после того, как будет проверено custom_hardware.

Кроме того, вы можете применить этот патч, который обеспечит сбой request_irq(), поскольку домен еще не существует, и в этом случае вернет -EPROBE_DEFER https://lkml.org/lkml/2014/2/13/114

person Alexandre Belloni    schedule 25.03.2014

У меня была похожая проблема (порядок проверки был неправильным), и единственное простое решение, которое я нашел, - это поместить модули в желаемом порядке проверки в Makefile. Я нашел решение здесь: Каков порядок загрузки встроенного драйвера Linux?< /а>

person Ray    schedule 12.11.2014