/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 для отображенного в память ввода-вывода (опять же, не то же самое, что порты ввода-вывода).

Другие вопросы по тегам