я совсем не понимаю (не читал и не разбирался) механизм работы mmap. главное то, что через него я получаю и отправляю данные. данные доходят до реального железа, следовательно и считываются с реального
Это отображение какого-то участка памяти в адресном пространстве текущего процесса. Если кратко в вашем контексте - это прямой доступ к регистрам из юзерспейс, со стороны системы никаких задержек нет.
Потому что размер страницы 4 кб, это минимально возможный размер. Есть физические адреса и виртуальные, процессор всегда работает с виртуальными адресами (кроме случая когда mmu отключено, тогда виртуальный адрес равен физическому), вся память поделена на страницы, чтобы процессор смог обратиться к какойто области физической памяти эта страница физической памяти должна быть прописана в таблице страниц - тоесть ей должен соотвествовать какой-то виртуальномый адрес, этим и занимается mmap. У arm регистры периферии отображаются по физическим адресам памяти (в адресном пространстве процессора), поэтому работа с ними ничем не отличается от доступа к памяти.
Прочитав эту ветку форума появились следующие вопросы:
1) Насколько это правильно использовать файл /dev/mem нельзя причинить вред работающей системе?
2) если у нас один процесс открыл файл /dev/mem сможет ли его открыть другой процесс, если ему необходим доступ к другой периферии например к другому порту или АЦП ...
3) Не лучше ли написать модуль ядра для работы с портами, который отобразит файлы устройств портов?
1. не знаю.. полагаю, что систему рутом положить сложно, но можно. а вот работая напрямую с железом надо четко понимать последствия..
2. попробуйте запустить две копии программы с разных терминалок, но с обращением к разным блоками регистов.
т.е. open(/dev/mem) одинаковый, а mmap в разные регистры. если проги успешно запустятся, то все ок. если что не пойдет, то ругнется на fd..
3. напишите, написание нового софта и драйверов только приветствуется..