|
| |||
|
|
linux, drivers, ARM Чего бы такого прочитать про драйвера в линуксе и их идеологию? как писать тупой блочный драйвер - понятно. как сделать тупой псевдофайл в sysfs - понятно. как делать юзерлевел фс - непонятно, но и пока что не нужно. а вот есть такая недодуманная и недодизайненная задачка. есть некая железяка (разберри пи), из нее торчит недошина spi, недошина i2c, несколько gpio. всю эту группку "низкоуровневого железа" можно сконфигурировать разными способами прямо на ходу. к этой группе выводов подключены несколько внешних устройств. эти устройства полуразумны, идея работы с ними "сконфигурил, выдал ЦУ, забыл. когда понадобилось - опросил состояние". Очевидно что эти устройства не могут работать одновременно (в смысле, одновременно общаться по шине сразу с несколькими из них нельзя, надо закончить общение с одним, перевести его в одно из каноничных состояний и только потом общаться с другим). Точнее, начав некую транзакцию общения с одним из них, ее нельзя прерывать, переключаясь на другое устройство. Как я понимаю, именно для таких случаев придумано понятие "шины" и "драйвера шины". На этой "шине" сидит как минимум два сорта устройств - один "кадровый буфер", в который надо долго но низкоприоритетно попиксельно или блоками заливать картинку плюс несколько "расширений", каждое из которых можно переконфигурировать как "7 линий ввода" или "7 линий вывода" или "7 ацп" или "7 ШИМов" или некие сочетания указанных состояний. Соответственно, хочется чтоб куда-то в юзерлевел торчала пачка псевдофайлов, каждый из которых соответствовал бы одному каналу управления и при переконфигурировании всего этого цирка динамически появлялось что нужно. В общем, как корректнее всего разбить этот веселый зоопарк на отдельные драйвера, какие "сорта" драйверов мне понадобятся, какие еще есть архитектурные идеи, какую литературу читать по теме? (англицкий, русский, болгарский языки годятся, прочие - лучче не надо) |
||||||||||||||