В принципе, я согласен с rpj. Код должен быть в пользовательском пространстве, если только это НЕОБХОДИМО.
Но, чтобы подчеркнуть ваш вопрос, какое условие?
Некоторые люди утверждают, что драйвер должен находиться в ядре, что неверно. Некоторые драйверы не чувствительны к времени, на самом деле много драйверов.
Например, фреймер, таймер RTC, устройства i2c и т. Д. Эти драйверы можно легко перемещать в пространство пользователя. Есть даже некоторые файловые системы, написанные в пространстве пользователя.
Вы должны перейти в пространство ядра, где накладные расходы, например. user-kernel swap, становится неприемлемым для правильного функционирования вашего кода.
Но есть много способов справиться с этим. Например,/dev/mem предоставляет хороший способ доступа к вашей физической памяти, так же, как вы делаете это из пространства ядра.
Когда люди говорят о переходе на RTOS, я обычно скептически отношусь. В наши дни процессор настолько мощный, что в большинстве случаев аспект в реальном времени становится ничтожным.
Но даже, скажем, вы имеете дело с SONET, и вам нужно сделать переключение защиты в течение 50 мс (на самом деле даже меньше, так как ограничение 50 мс распространяется на все кольцо), вы все равно можете переключиться очень быстро, ЕСЛИ ваше оборудование поддерживает его.
В настоящее время многие производители фреймов могут предоставить вам аппаратную поддержку, которая уменьшает количество записей, которые вам нужно делать. Ваша работа в основном реагирует на прерывание как можно быстрее. И Linux совсем не плох. Задержка прерывания, которую я получил, была меньше 1 мс, даже если у меня запущено множество других прерываний (например, IDE, ethernet и т. Д.).
И если этого еще недостаточно, то, возможно, ваш аппаратный дизайн неправильный. Некоторые вещи лучше оставить на аппаратном уровне. И когда я сказал аппаратное обеспечение, я имею в виду ASIC, FPGA, сетевой процессор или другую передовую логику.
Не говоря уже о проблемах с безопасностью (ваш код на 100% взломает доказательство? Малейшая ошибка может стать огромной задней дверью!), Побочные проблемы с повреждением (тонкая ошибка может затронуть гораздо больше, чем ваше приложение) и т. Д. –