Я предполагаю, Ubuntu для рабочего стола, и CentOS и Ubuntu для серверов
Ваше предположение корректно. Ядро является единственным программным обеспечением, которое может отправить аппаратные запросы. Это не только сохраняется для Linux. Фактически никакая операционная система, более новая, чем DOS, не позволяет Вам аппаратные средства доступа непосредственно, потому что, поскольку Вы также подозреваете, это вполне довольно опасно.
Однако нет никакой проблемы в записи Вашего собственного драйвера, и много документации доступно. Например, это учебное руководство в xatlantis кажется недавним (это важно!) и хороший источник.
Да, но это редко полезно. В 32-разрядных x86 системах можно использовать ioperm(2)
системный вызов для установки текущего процесса, чтобы позволить этому выполнять порт I/O непосредственно. Я полагаю, что это не работает над 64-разрядными системами. Можно также сделать lseek/read/write
комбинации против /dev/port
и я думаю, что это аналогично не очень портативно. См. http://tldp.org/HOWTO/IO-Port-Programming-2.html еще для некоторых деталей. Оба из этих подходов намного медленнее и менее гибки, чем запись драйвера устройства, конечно (/dev/port
самый медленный из всех). Ни один из этих механизмов пространства пользователя не позволяет Вам обрабатывать прерывания или что-либо как этот, конечно. Если производительность является проблемой, Вы собираетесь закончить тем, что писали драйвер устройства.