В принципе, я согласен с RPJ. Код должен находиться в пользовательском пространстве, если это НЕ ДЕЙСТВИТЕЛЬНО необходимо.
Но, чтобы подчеркнуть ваш вопрос, какое условие?
Некоторые люди утверждают, что драйвер должен быть в ядре, что не соответствует действительности. Некоторые драйверы не чувствительны ко времени, на самом деле, многие драйверы такие.
Например, фреймер, таймер RTC, устройства i2c и т. Д. Эти драйверы могут быть легко перемещены в пользовательское пространство. Есть даже некоторые файловые системы, которые написаны в пространстве пользователя.
Вы должны перейти в пространство ядра, где накладные расходы, например. своп пользовательского ядра становится неприемлемым для правильной работы вашего кода.
Но есть много способов справиться с этим. Например, / dev / mem предоставляет хороший способ доступа к вашей физической памяти, так же, как вы делаете это из пространства ядра.
Когда люди говорят о переходе на RTOS, я обычно скептически отношусь.
В наши дни процессор настолько мощный, что большую часть времени аспект реального времени становится незначительным.
Но даже, скажем, вы имеете дело с SONET, и вам нужно выполнить защитное переключение в течение 50 мс (на самом деле даже меньше, поскольку ограничения 50 мс применяются ко всему кольцу), вы все равно можете выполнять переключение очень быстро , ЕСЛИ ваше оборудование поддерживает это.
Многие разработчики в наши дни могут предоставить вам аппаратную поддержку, которая уменьшает количество операций записи, которые вам необходимо выполнить. Ваша работа в основном реагирует на прерывание как можно быстрее. И Linux совсем не плохой. Задержка прерывания, которую я получил, составляла менее 1 мс, даже если у меня запущено множество других прерываний (например, IDE, Ethernet и т. Д.).
И если этого все еще недостаточно, возможно, ваш аппаратный дизайн неправильный. Некоторые вещи лучше оставить на железе. И когда я говорил об оборудовании, я имел в виду ASIC, FPGA, сетевой процессор или другую продвинутую логику.