Как я понимаю, драйверы устройств платформы могут быть автоматически загружены, когда поле «совместимое» в дереве устройств совпадает с «совместимым» поле в модуле ядра. Вот pwm-overlay.dts
файла с Raspberry Pi дистрибутива:Механизм автозагрузки драйвера устройства платформы
/ {
[email protected] {
target = <&gpio>;
__overlay__ {
pwm_pins: pwm_pins {
brcm,pins = <18>;
brcm,function = <2>; /* Alt5 */
};
};
};
[email protected] {
target = <&pwm>;
__overlay__ {
pinctrl-names = "default";
pinctrl-0 = <&pwm_pins>;
status = "okay";
};
};
[email protected] {
target = <&clk_pwm>;
frag2: __overlay__ {
clock-frequency = <100000000>;
};
};
__overrides__ {
pin = <&pwm_pins>,"brcm,pins:0";
func = <&pwm_pins>,"brcm,function:0";
clock = <&frag2>,"clock-frequency:0";
};
};
Прежде всего, я не вижу «совместимое» поля, но в pwm-bcm2835.c
файле есть такие строки:
static const struct of_device_id bcm2835_pwm_of_match[] = {
{ .compatible = "brcm,bcm2835-pwm", },
{ /* sentinel */ }
};
Кроме того, когда я load overlay, и автозагрузка также успешно загружена. Как это работает? Как он знает, какой драйвер для загрузки?
Можете ли вы поделиться файлом dts (tree tree)? Я ожидаю ответа – levengli