/ dev / port vs / dev / mem - PullRequest
       24

/ dev / port vs / dev / mem

1 голос
/ 21 февраля 2012

Мне нужно немного разъяснений. Я могу напрямую написать /dev/port, чтобы получить прямой доступ к параллельному порту, и он работает нормально (я могу включить светодиоды, подключенные к разъему порта). Однако я думал, что смогу сделать то же самое с /dev/mem? (http://tldp.org/LDP/khg/HyperNews/get/devices/fake.html). Когда я пытаюсь читать и писать на /dev/mem, я не получаю ошибок, но записи никогда не отражаются на внешнем разъеме. Я спрашиваю только потому, что это не то, что я ожидал, исходя из того, читать о записи в /dev/mem.

Вы не можете получить доступ к ioports через /dev/mem?

Ответы [ 2 ]

2 голосов
/ 21 февраля 2012

Вбрасывание горстки предложений (не проверено). Может быть так ...

  • Запись в позицию памяти 0x378 напрямую требует нахождения в реальном режиме для достижения желаемого эффекта (поскольку он может быть переназначен в защищенном режиме).
  • Использование /dev/mem требует, чтобы оборудование было отображено в MMIO, и вам также необходимо знать адрес MMIO (обычно это не 0x378).
1 голос
/ 12 июня 2013

EDIT: это относится только к процессорам x86 (и, возможно, к некоторым другим).

Операции ввода-вывода с отображением в памяти не совсем совпадают с операциями ввода-вывода портов на процессорах x86.

jørgensen прав в том, что память перераспределяется в защищенном режиме - однако порты ввода / вывода не могут быть переназначены таким образом. /dev/port относится непосредственно к портам ввода / вывода, тогда как /dev/mem сопоставляется с (я полагаю) физическим ОЗУ (т.е. НЕ переназначается), поэтому в этом случае вы хотите использовать /dev/port.

Что касается предоставленной вами ссылки, то для ввода-вывода с отображением в памяти используется /dev/mem (опять же, не то же самое, что порты ввода-вывода).

...