Драйвер устройства на основе дерева устройств Hello Word
Я прочитал и почти прошел через всю документацию ядра linux на дереве устройств и наложениях дерева устройств.Я не могу понять, нужно ли создавать новый entree в дереве устройств платформы или создавать новый overlay для устройства для нового драйвера на основе дерева устройств. Я ищу простой пример драйвера LED glowing, где led подключен к GPIO pin, и его конфигурация упоминается в наложении дерева устройств или фрагменте дерева устройств на плате платформа.Как его можно построить / нажать и протестировать с помощью приложения пользовательского пространства.
2 ответов
-
Я создал пользовательское устройство в дереве устройств:
my_device@ffdf0000 { compatible = "my_driver"; reg = <0xffdf0000 0x1000> /* * reg = address of device and size * (Minimum is System's Pagesize = 0x1000 Byte in my case */ }
-
Я написал заглушку ядра для этого устройства:
(здесь я взял
kernel_src/drivers/uio/uio_pdrv_genirq.c
иHans J. Koch: Userspace I/O drivers in a realtime context
(учебник драйвера устройства) в качестве основы.)этот заглушка имеет следующие две структуры:
структура of_device_id:
static struct of_device_id my_match_table[] = { { .compatible = "my_driver", }, {0} }; MODULE_DEVICE_TABLE(of, my_match_table);
и структура драйвера:
static struct platform_driver my_platform_driver = { .probe = my_probe, .remove = my_remove, .driver = { .name = "my_driver", .owner = THIS_MODULE, .of_match_table = of_match_ptr(my_match_table), }, };
-
теперь у меня есть доступ к свойствам устройства дерево в моей функции зонда:
static int my_probe(struct platform_device *dev) { struct uio_info *uioinfo; struct resource *r = &dev->resource[0]; [...] uioinfo->name = dev->dev.of_node->name /* name from device tree: "my_device" */ uioinfo->mem[0].addr = r->start; /* device address from device tree */ uioinfo->mem[0].size = resource_size(r); /* size from device tree */ [...] }
когда есть матч в compatible
С помощью записи заглушки ядра и дерева устройств вызывается функция probe.
используйте QEMU с минимальным пользовательским аппаратным устройством
Я рекомендую вам кодировать свое собственное минимальное платформенное устройство, а также управлять оборудованием и иметь полное представление.
Я предоставил полный запускаемый пример Buildroot QEMU с исходным кодом на GitHub, как подробно описано в этом ответе:как программировать Linux .файлы дерева устройств dts?
пример также задокументирован на репозитории GitHub.