Единственный способ получить доступ к оборудованию напрямую в большинстве современных операционных систем, включая Linux и Windows, - это через код ядра. Драйверы устройств Linux является отличной отправной точкой для написания такого кода в Linux, даже если он немного устарел.
В противном случае ОС предоставляет различные средства ввода-вывода и контролирует распределениересурсы для пользовательских приложений, используя интерфейс системного вызова.Интерфейс системного вызова является вездесущим в своей основной концепции среди всех операционных систем, которые фактически имеют своего рода разделение между ядром и пользовательским кодом.Использование программных прерываний является стандартным способом реализации системных вызовов на текущем оборудовании.
Вам необходим системный вызов для выделения малейшего объема памяти и даже для чтения или записи одного символа.Не говоря уже о том, что даже программе, которая абсолютно ничего не делает , обычно требуется всего несколько системных вызовов для загрузки.
Вы могли бы получить более прямой доступ к оборудованию, если бы использовали DOS или exokernel дизайн.
Но почему вы все равно хотите это сделать?Современное оборудование далеко не тривиально, чтобы работать с ним напрямую.