Функция проверки модуля ядра никогда не вызывается

Я пытаюсь загрузить образец драйвера дерева устройств, но функция проверки никогда не вызывается.

Запись в файле dts выглядит так

dummy1 {
    compatible = "ti,dummy";
    reg = <0x9f200000 0x1000>,
        <0x9f201000 0x8>;
};

И соответствующий код драйвера:

#define DRV_NAME  "dummy"
static const struct of_device_id dummy_of_match[] = {
{
.compatible = "ti,dummy",
}, {
},
};

static struct platform_driver dummy_driver = {
.driver = {
.name = DRV_NAME,
.of_match_table = dummy_of_match,
},
.probe   = dummy_probe,
.remove   = dummy_remove,
};
MODULE_DEVICE_TABLE(of, dummy_of_match);
module_platform_driver(dummy_driver);

Я перекомпилировал файл dtb (dtdiff показывает, что он содержит мое устройство) и скопировал его в целевой объект, но ничего не происходит, когда я изменяю драйвер. Я тоже не могу найти его в / sys / firmware / devicetree /


person Bord81    schedule 08.08.2018    source источник
comment
что вы имеете в виду под словом "скопировано в целевой"?   -  person yashC    schedule 09.08.2018
comment
@yashC Я запускаю ядро ​​на beaglebone black, которое подключено через последовательный порт к хост-машине. Система загружается с использованием Busybox / NFS. Под копированием в целевой я подразумеваю копирование перекомпилированного файла am335x-boneblack.dtb в папку / boot на NFS.   -  person Bord81    schedule 09.08.2018
comment
поскольку его нет в devicetree/, мы можем предположить, что это как-то связано с тем, что ядро ​​не анализирует его. вы можете попробовать несколько вещей. 1. Явно укажите status=okay. 2. Если этот узел определен как дочерний узел какого-либо другого узла, проверьте, отключен ли этот узел или около того (поместите его под узлом soc, если он уже не отключен).   -  person yashC    schedule 09.08.2018
comment
@yashC Сделал но без малейших изменений. Более того - DT успешно загружается даже при удалении файла dtb из NFS! Можно ли его запечь в zImage?   -  person Bord81    schedule 09.08.2018
comment
не исключено, что это могло быть так. Вы можете попробовать удалить файл zimage и добавить новый файл образа ядра. тогда он должен работать.   -  person yashC    schedule 09.08.2018
comment
@yashC Наконец-то я понял - проблема была в том, что uboot незаметно забирал файл dtb из emmc. После его удаления он начал загружаться из NFS по мере необходимости.   -  person Bord81    schedule 09.08.2018
comment
Вы можете добавить это в качестве ответа, если кто-то еще столкнется с той же проблемой   -  person yashC    schedule 11.08.2018
comment
@yashC Еще раз спасибо!   -  person Bord81    schedule 11.08.2018


Ответы (1)


Пытаясь решить проблему, я даже удалил файл dtb ... и волшебным образом ядро ​​продолжило загружаться, как ни в чем не бывало. Я думал, что dtb можно встроить в zImage, что возможно с некоторыми дополнительными настройками, но это было не так.

Решение. Наконец, я обнаружил, что uboot сначала проверяет каталог ./boot на карте emmc! Удаление dtb оттуда сразу сделало файл в NFS «видимым».

P.S .: Если вы столкнетесь с подобными проблемами, постарайтесь внимательно прочитать результаты. Я начал понимать проблему, когда увидел ошибку загрузки .dtb, когда удалил ее на NFS, но после этого появилось сообщение, что она успешно загружена в память.

person Bord81    schedule 11.08.2018