Вы можете создать своего рода виртуальный последовательный порт, используя методы «почтового ящика». Я опишу половину простого рабочего соединения, вы, вероятно, хотите, чтобы одно из них проходило в каждом направлении, чтобы вы могли отправлять команды и получать ответы.
Зарезервируйте кусок памяти во время инициализации ядра. Скажем, 4 КБ, поскольку это часто страница, но 256 или даже 16 байтов тоже подойдут. Зарезервируйте секунду для другого направления.
Когда «писатель» канала хочет что-то сказать, он сначала проверяет, является ли первое 32-битное слово нулевым. Если это так, то, начиная с 5-го байта, он записывает сообщение - текстовые или двоичные данные, что угодно, максимум до 4k - 4 = 4092 байта. Затем оно устанавливает первое слово равным количеству написанных им байтов.
Приемник отслеживает количество байтов в первом слове канала, который он принимает. Когда он видит ненулевой счетчик байтов, он читает столько байтов из памяти. Затем он устанавливает счетчик байтов равным нулю, чтобы показать автору записи, что теперь новое сообщение может быть написано по своему усмотрению.
Единственное, от чего это зависит, это то, что вы фактически получаете доступ к реальной памяти или работаете через один и тот же кеш, и что у вас есть атомарная операция записи для записи количества байтов (если у вас нет 32-битной атомарной записи, используйте 16-битный счетчик, что в любом случае достаточно, или уменьшите буфер и используйте 8-битный счетчик). Поскольку записывающее устройство может установить ненулевое значение только в том случае, если оно равно нулю, а считывающее устройство может установить нулевое значение только в том случае, если оно ненулевое, все работает.
Это, конечно, простой механизм, и любая сторона может быть заблокирована другой. Но вы можете разработать компоненты, которые отправляют сообщения, чтобы принять это во внимание. Вы также можете расширить его, придумав способ иметь несколько сообщений в полете, или добавив дополнительный приоритет или канал сообщения об ошибках параллельно.
О, прежде чем приступить к выполнению кода и выполнить поиск в Интернете. Я уверен, что уже есть какой-то подобный механизм или что-то еще, доступное для соединения ваших компонентов RT и linux. Но научиться делать это самостоятельно тоже может быть интересно - и необходимо, если вы столкнетесь с такой проблемой на небольшой встроенной системе без ОС, которая предоставляет вам эту функциональность.