Недавно я начал учиться писать драйверы устройств Linux для конкретного проекта, над которым я работаю. Раньше большая часть моей работы была связана с устройствами, не использующими ОС, поэтому драйверы и разработка Linux для меня несколько нова. Для проекта, над которым я работаю, у меня встроенная система под управлением операционной системы на базе Linux. У меня есть внешнее устройство с управлением через RS232, для которого мне нужно написать драйвер.Драйвер устройства Linux для устройства RS232 во встроенной системе
Вопросы:
1) Есть ли способ получить доступ к последовательным портам из жгутов пространства ядра (и, возможно, использовать serial.h, serial_core.h и т.д.), как это обычно делается, какие-нибудь хорошие примеры?
2) Из того, что я нашел, было бы намного проще получить доступ к последовательным портам в пользовательском пространстве, просто открыв dev/ttyS * и записывая на него. При написании драйвера для такого устройства (устройство RS232) предпочтительнее делать это в пользовательском пространстве или есть способ написать модуль ядра? Как принято решение написать драйвер в качестве модуля ядра поверх пользовательского пространства или наоборот?
Являются ли драйверы только для таких универсальных устройств, как UART/serial, а затем выше, чем пользовательское пространство, или этот драйвер должен быть записан как модуль ядра? Я ценю помощь, я не смог найти много информации, чтобы ответить на мои вопросы.
Ваше встроенное устройство работает без ОС хоста? (в этом случае не будет/dev/ttySx и, конечно же, не драйвер устройства, поддерживающий этот узел устройства) – wildplasser
Возможно, вам не нужно писать никаких «ядро» * ядра * для этого последовательного устройства. Ядро выполняется в режиме привилегированного процессора и не должно подвергаться риску с ненужными функциями, которые принадлежат в пользовательском пространстве. Вы (должны) хотите, чтобы ваш код был переносимым, и это означает, что это пространство пользователя, где API-интерфейсы стабильны. Также вы, похоже, смущены тем, что делает «драйвер устройства RS232». Драйвер должен передавать только данные; он работает на физическом уровне. Он не должен анализировать или обрабатывать данные каким-либо образом (это для уровня данных или линии линии). – sawdust
Если у вас/dev/ttyS *, то у вас ** уже есть драйвер устройства для UART. – DoxyLover