2016-12-06 1 views
1

В моей системе ARM (на основе Tegra) я запускаю ядро ​​linux mainline. Он использует систему дерева устройств.Дерево устройств Linux: как сделать файл устройства?

Я включил аппаратный драйвер для общей памяти-шины (часть SoC) в файле .dts, установив свой статус = "okay". Перекомпилировал dtb и загрузил ядро. Но не появляется устройство (/ dev/xx).

Драйвер встроен в ядро ​​и можно увидеть

cat /lib/modules/$(uname -r)/modules.builtin 

командной

cat /sys/firmware/devicetree/base/<path to device>/status 

возвращается "хорошо".

Должен ли я сделать какой-то «mknod»? Что еще необходимо?

+1

Является ли соответствующий драйвер встроенным в ядро ​​или встроен в модуль и загружен? Я предполагаю, что вы на самом деле установили обновленный DTB на машине, вы можете проверить/sys/firmware/devicetree/base/<путь к устройству>/статус для подтверждения. – Notlikethat

+0

Да Я могу видеть запись для своего устройства по этому пути со всеми его свойствами –

+0

Драйвер скомпилирован в ядро ​​(без модуля) –

ответ

0

Традиционная модель устройств «поток байтов» UNIX представляет собой довольно высокоуровневую абстракцию большинства современных аппаратных средств, и поэтому существует множество драйверов, которые не создают/dev записи для устройств, которые они контролируют в основном потому, что они не Эта модель подходит. В частности, драйверы шин очень похожи на то, что они существуют, но только ради обнаружения и доступа к устройствам, расположенным за ними; нет/dev/sata, который позволяет вам взаимодействовать с фактическим контроллером хоста, отправляя необработанные команды на любой старый порт независимо от того, что связано или нет; нет/dev/usb, который позволяет вам произвольно переносить произвольные конечные точки, которые могут или не могут существовать.

Кроме того, ваш типичный контроллер «внешнего интерфейса», как в этом случае, на порядок меньше, чем интерфейс, такой как SATA или USB, сам «устройство» часто представляет собой блок регистра, управляющий некоторыми часами и чипом -выберите мультиплексор. Даже если водитель действительно создал что-то, с чем вы могли бы взаимодействовать напрямую, не так много можно было бы сделать do с ним.

Правильный способ продолжения в этой ситуации - описать ваше FPGA-устройство в DT в качестве ребенка шины GMI, не менее точно отражая аппаратное обеспечение, а затем разработайте для этого собственный драйвер. Сам драйвер шины просто прозрачно посередине. И если вам нужен быстрый и грязный способ начать работу, просто прочитав и наведя адрес шины напрямую, ну, это за областью ввода-вывода с отображением памяти; это именно то, для чего/dev/mem существует.

+0

В случае, если FPGA подключен через PCIe все выше не требуется вообще и будет работать в агностической системе DT/ACPI/etc. – 0andriy

+1

@ Andy True, и это также иллюстрирует мой основной момент - вы не смотрите в/dev/для корневого комплекса, чтобы попробовать и убедите его в том, чтобы совать необработанные адреса шины, вы пишете драйвер, чтобы соответствовать вашему VID: DID и шина просто работают :) – Notlikethat

Смежные вопросы