2013-05-30 2 views
4

Я разрабатываю PowerPC 405, встроенный в FPGA Virtex4 с ядром Linux 2.6.33.Связать существующую структуру устройства Linux с файлом устройства

До сих пор я писал драйверы для устройств платформы, реализованных в FPGA в виде загружаемых модулей ядра. Устройства регистрируются с использованием файла Open Open Firmware Device Tree. Чтобы создать файл устройства, я использую функции OF, чтобы получить узел устройства, а затем зарегистрировать новый miscdevice, который затем автоматически регистрирует номер младшего устройства и создает для него файл устройства. Это также создает device, встроенный в miscdevice (то есть miscdevice.this_device)

Проблема Теперь мне нужно выполнить операции DMA. Я попытался вызвать функцию dma_alloc_coherent(), используя miscdevice.this_device, но это устройство не связано ни с одной шиной и всегда возвращает ошибку. Я сделал кое-что, и оказалось, что struct of_device также имеет встроенный в него struct device (то есть of_device.dev). Когда я попытался использовать это с dma_alloc_coherent(), он работал отлично.

Итак, теперь у меня есть две разные структуры struct device, одна для управления файлом персонального устройства и одна для управления базовыми системными вызовами Open Firmware, транзакциями шины и DMA. Разумеется, эти устройства не связаны друг с другом в sysf.

Вопрос в том, можно ли как-то запросить создать файл устройства для структуры device, который я получаю с уровня OF, а не создавать новое устройство с API-интерфейсом Misc? Таким образом, все будет связано с одной структурой device.

+0

Не будет ли это ядро ​​Linux 2.6.33? –

+0

@PeterL. Да спасибо. Исправлена! –

+0

Как насчет регистрации символьного устройства под '/ dev /' с помощью 'register_chrdev()' и с использованием существующего 'of_device.dev' для всего остального? ... – TheCodeArtist

ответ

3

Я думаю, что ваше исправление о dma_alloc_coherent() верное.

Но я не думаю, что неправильно использовать структуру устройства, встроенную в структуру of_device, для замены созданного вами miscdevice. Параметр of_device - это описание объектов в базе данных Open Firmware. И, согласно модели драйвера устройства Linux, структура устройства встроена в различные объекты устройств в ядре Linux. И я думаю, что вы регистрируете miscdevice как одно символьное устройство, должна быть связана структура file_operations.

Одним словом, это разные взгляды, и они не могут заменить друг друга.

+0

Хм, мне кажется, если бы это было так, тогда быть каким-то образом связать шину с символьным устройством. BTW Я не женат на API-интерфейсе misc dev. Я использую его только так, как это удобно. Если есть еще один API, который позволяет мне это делать, я бы хотел его услышать. –

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