драйвер linux для uart - общий дизайн - PullRequest
1 голос
/ 25 апреля 2011

** Привет! Я новичок, кодирующий драйвер для платы на основе последовательного PCI с использованием 3 чипов 16550 UART в LINUX. Каждый чип uart поддерживает 4 канала (4 последовательных порта).

В своем коде драйвера для Linux я подумал об использовании потоков для каждого из портов, то есть всего 4х3 = 12 портов. Как вы думаете, выделение выделенного потока для каждого из портов - хорошая идея, я могу использовать один конкретный канал для реализовать нуль-модем, другой канал RS422, другой канал RS485 и т. д.

Причина, по которой я подумал о программировании потоков, заключается в том, что все потоки должны работать независимо, и каждый поток - внутри каждого порта может быть активным или неиспользуемым. Поэтому я стремлюсь сделать их максимально независимыми друг от друга.

Пожалуйста, дайте мне знать, как должен выглядеть общий дизайн для этого типа драйвера. Пожалуйста, дайте ссылки / источники, если реализован подобный тип.

Это первый раз, когда я делаю такую ​​вещь ... моя логика правильная / неправильная или просто неправильный поток, который просто не действителен и звучит абсолютно ужасно Спасибо и всего наилучшего **

Ответы [ 2 ]

0 голосов
/ 25 апреля 2011

Ядро Linux имеет много архитектурного кода, предназначенного для обработки последовательного ввода-вывода. Насколько я помню, в потоке нет явной необходимости, поскольку ядро ​​выполняет уведомления и т. Д. С помощью обратных вызовов и т. Д. Вероятно, не мешало бы взять книгу о разработке драйверов для Linux.

0 голосов
/ 25 апреля 2011

Я предполагаю, что на каждом порту у вас будет запущен какой-то протокол, и в этом случае дизайн с 1 потоком на порт имеет большое значение для IMO, так как позволяет четко структурировать драйвер протокола.

Мы использовали такой дизайн в течение многих лет, и мы используем сообщения System V для связи потоков протокола с потоком диспетчера / супервизора по историческим причинам. Сообщения SysV не без их собственных проблем (например, они не select() способны), поэтому вы можете захотеть взглянуть на эту статью SO для альтернатив.

...