Подход на основе BBB DT

Я успешно внедрил драйвер на основе GPIO для своего пользовательского протокола, используя модель устройства платформы. Я хочу обновить его, используя подход дерева устройств. Итак, для начала у меня есть beaglebone black, и я перекрестно скомпилировал ядро, используя конфигурацию дерева устройств, включенную и проверенную во время сообщений консоли uboot, показывающих

Проверка контрольной суммы... ОК

Сглаженный большой двоичный объект дерева устройств с размером 80f80000

Загрузка с использованием большого двоичного объекта fdt по адресу 0x80f80000

Образ ядра XIP... ОК

OK

Использование дерева устройств по адресу 80f80000, конец 80f899de

Я добавил свою запись в общий файл платы с именем узла my_gpio {compatible = "my_gpio" }

Затем я создаю обычный процесс make uImages dtbs LOADADDR....

Наконец я получаю свой uImage с dtb. В моем драйвере я использовал ту же строку «my_gpio», что и свойство .name.

но мой метод зонда не вызывается, что, насколько я знаю, связано с тем, что он не находит совместимых устройств.

Любые предложения помощи были бы замечательными.

В моем драйвере:

static struct platform_driver d_driver = {
        .driver = {
                        .name = "d_gpio",
                        .of_match_table = d_of_match,
        },
        .probe = D_probe,
        .remove = D_remove
};

Спасибо


person RootPhoenix    schedule 18.11.2014    source источник
comment
Пожалуйста, отредактируйте свой вопрос и добавьте ссылку pastebin на ваш полный файл DTS (где определен ваш пользовательский узел). Возможно, ваш узел находится под неправильным родителем или его формат неверен. Также добавьте ссылку pastebin на часть исходного кода, где установлен ваш struct platform_driver (где вы установили .of_match_table, а также ссылочную таблицу).   -  person eepp    schedule 27.11.2014
comment
@eepp отредактировал вопрос. Пожалуйста, посмотрите.   -  person RootPhoenix    schedule 27.11.2014
comment
Это кажется правильным. Я не понимаю, почему ваша функция probe не вызывается. Вы уверены, что используете обновленный DTB и драйвер, и что ваш драйвер вообще загружен?   -  person eepp    schedule 27.11.2014
comment
@eepp да, я добавляю большой двоичный объект дерева устройств к образу ядра ... в одной из внутренних команд make cat dtb › Image вызывается .. также init выполняется в dmesg.   -  person RootPhoenix    schedule 28.11.2014
comment
Я попробую то, что вы делаете позже, и посмотрю, не найду ли я что-нибудь не так. Обычно все под OCP автоматически добавляется в качестве устройства платформы, если в нем отсутствует свойство status (ваш случай) или когда status равно "okay".   -  person eepp    schedule 28.11.2014


Ответы (2)


Вам нужно подготовить структуру типа struct of_device_id и использовать для нее свойство compatible. Попробуйте следующим образом:

static struct of_device_id my_devs[] = {
    { .compatible = "my_gpio" }, /* This should be the name given in the device tree */
    { }
};
MODULE_DEVICE_TABLE(of, my_devs);

Теперь создайте структуру platform_driver и передайте в нее приведенную выше таблицу:

static struct platform_driver my_plat_driver = {
    .probe = my_probe,
    .remove = my_remove,
    .driver = {
        .name = "my_gpio_driver",    /* This name is for sysfs, not for matching */
        .of_match_table = my_devs    /* This turns out as the matching logic */   
    }
};
person raghav3276    schedule 20.11.2014
comment
Привет, я сделал вышеизложенное... написал свой метод зонда, который вызывает parse_dt, где я проверяю эти поля. Но сам зонд не вызывается. Также требуется MODULE_DEVICE_TABLE? поскольку это не было указано в документации ядра BB Black и 3.8. - person RootPhoenix; 21.11.2014
comment
MODULE_DEVICE_TABLE не является обязательным. - person raghav3276; 24.11.2014

Возможно, поддержка вашей платы не понимает этот протокол, поэтому необходимо разместить узел в месте, где код платформы фактически его обрабатывает. Пожалуйста, пройдите обсуждение ниже и добавьте узел «виртуальные устройства» в dtb, надеюсь, это поможет.

http://web.archiveorange.com/archive/v/9IQA2s6aeZUFXdm6P87Z

person Vijay Katoch    schedule 26.11.2014