@kriptonus

Как регистры SOC отображаются на память Linux?

Добрый день. Не могу разобраться, как регистры SOC отображаются в адресное пространство памяти Linux. Наример, для SOM Rockchip RK3568 есть такое описание в dts модуля WDT:
watchdog@fe600000 {
compatible = "snps,dw-wdt";
reg = <0x00 0xfe600000 0x00 0x100>;
clocks = <0x1f 0x116 0x1f 0x115>;
clock-names = "tclk\0pclk";
interrupts = <0x00 0x95 0x04>;
status = "okay";
phandle = <0x1c9>;
};
Как узнать, какой адрес этих регистров уже после инициализации устройств и загрузки ОС?
Или обратная задача: есть процесс, который пишет в некоторую область памяти, как узнать, возможно, это какие-то регистры SOM, то есть получить возможный адрес в пространстве SOM и проверить на возможный модуль через datasheet?
  • Вопрос задан
  • 51 просмотр
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Как узнать, какой адрес этих регистров уже после инициализации устройств и загрузки ОС?

Физический адрес -- как и написано в dts: 0xfe600000. Виртуальный адрес -- какой-то сравнительно случайный, выделенный вызовом ioremap() или какой-нибудь его обёрткой. Если драйверу нужен доступ к регистрам -- драйвер просто вызывает ioremap() сам и получает адрес. Если доступ нужен в юзерспейсе -- можно (при наличии разрешений) сделать mmap() файлу /dev/mem по смещению равному физическому адресу устройства.

Или обратная задача: есть процесс, который пишет в некоторую область памяти, как узнать, возможно, это какие-то регистры SOM

Сделать cat /proc/<pid>/maps и посмотреть, что отображено в эту область виртуальных адресов.

Но обычно люди не отображают регистры устройств напрямую в пользовательскую память, максимум -- отображают файл обрабатываемый драйвером устройства, а драйвер уже может выступить дополнительным слоем абстракции и подставить в отображение часть адресного пространства устройства, если такое им поддерживается. В этом случае для понимания что куда отображается без чтения исходников драйвера не обойтись.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы