С общей точки зрения, я пытаюсь понять, как получить доступ к платформенному устройству из пользовательского пространства. Чтобы быть более конкретным, у меня есть контроллер EMIF и SoC, который я добавил в свое дерево устройств, и я считаю, что он правильно привязан к предварительно написанному драйверу устройства платформы EMIF. Теперь я пытаюсь выяснить, как я могу получить доступ к этому устройству EMIF из приложения пользовательского пространства. Я столкнулся с парой разных тем, которые, кажется, имеют какое-то отношение к этой проблеме, но я не могу понять, как они связаны.
1) Как я читал, кажется, что большая часть операций ввода-вывода выполняется с использованием узлов устройств, созданных mknod()
, нужно ли мне создавать узел устройства, чтобы получить доступ к этому устройству?
2) Я прочитал пару тем, в которых говорится о написании модуля ядра (символ?, блок?), который может взаимодействовать как с пользовательским пространством, так и с драйвером устройства платформы, и использовать его в качестве посредника.
3) Я прочитал о возможности использования mmap()
для сопоставления памяти моего устройства платформы с моим виртуальным пространством памяти. Это возможно?
4) Кажется, что когда создается экземпляр драйвера EMIF, он вызывает функцию probe()
. Какие функции пользовательское приложение будет вызывать в драйвере?