/dev/port vs /dev/mem
Мне нужно немного разъяснений. Я могу напрямую написать /dev/port
чтобы получить прямой доступ к параллельному порту, и он работает нормально (я могу включить светодиоды, подключенные к разъему порта). Тем не менее, я думал, что могу сделать то же самое с /dev/mem
? (Http://tldp.org/LDP/khg/HyperNews/get/devices/fake.html). Когда я пытаюсь читать и писать /dev/mem
Я не получаю ошибок, но записи никогда не отражаются на внешнем разъеме. Я спрашиваю только потому, что это не то, что я ожидал, основываясь на том, что я прочитал о записи в /dev/mem
,
Вы не можете получить доступ к ioports через /dev/mem
?
2 ответа
Вбрасывание горстки предложений (не проверено). Может быть так...
- Запись в позицию памяти 0x378 напрямую требует нахождения в реальном режиме, чтобы получить желаемый эффект (поскольку он может быть переназначен в защищенном режиме).
- Использование
/dev/mem
требует, чтобы оборудование было отображено в MMIO, и вам также необходимо знать адрес MMIO (обычно это не 0x378).
РЕДАКТИРОВАТЬ: это относится только к процессорам x86 (и, возможно, несколько других).
Отображаемый в память ввод / вывод не совсем совпадает с вводом / выводом порта на процессорах x86.
Йоргенсен прав в том, что память перераспределяется в защищенном режиме - однако порты ввода-вывода не могут быть переназначены таким образом. /dev/port
относится непосредственно к портам ввода / вывода, тогда как /dev/mem
отображается на (я полагаю) физической памяти (т.е. не переназначен), поэтому в этом случае вы хотите использовать /dev/port
,
Что касается предоставленной вами ссылки, она использует /dev/mem
для отображенного в память ввода-вывода (опять же, не то же самое, что порты ввода-вывода).