Как узнать, какой адрес этих регистров уже после инициализации устройств и загрузки ОС?
Физический адрес -- как и написано в dts: 0xfe600000. Виртуальный адрес -- какой-то сравнительно случайный, выделенный вызовом
ioremap()
или какой-нибудь его обёрткой. Если драйверу нужен доступ к регистрам -- драйвер просто вызывает
ioremap()
сам и получает адрес. Если доступ нужен в юзерспейсе -- можно (при наличии разрешений) сделать
mmap()
файлу
/dev/mem
по смещению равному физическому адресу устройства.
Или обратная задача: есть процесс, который пишет в некоторую область памяти, как узнать, возможно, это какие-то регистры SOM
Сделать
cat /proc/<pid>/maps
и посмотреть, что отображено в эту область виртуальных адресов.
Но обычно люди не отображают регистры устройств напрямую в пользовательскую память, максимум -- отображают файл обрабатываемый драйвером устройства, а драйвер уже может выступить дополнительным слоем абстракции и подставить в отображение часть адресного пространства устройства, если такое им поддерживается. В этом случае для понимания что куда отображается без чтения исходников драйвера не обойтись.