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