Так как пока не разобрался, как сделать модуль, через который можно было бы принимать данные по DMA (модуль загружается, но /dev/axidma не появляется. Как отладить, не знаю. Может быть надо что-то ещё указать?), решил попробовать запустить прямой доступ напрямую, обращаясь к регистрам контроллера через /dev/mem. Но для этого надо знать физический адрес памяти.
Нашёл в Справочнике по параметрам ядра параметр memmap
Предположил, что Linux после загрузки не будет использовать указанную память.memmap=nn[KMG]$ss[KMG] [KNL,ACPI]
Помечает определенную память как зарезервированную. Регион памяти помечается от ss до ss+nn. Пример: исключить память 0x18690000-0x1869ffff
memmap=64K$0x18690000
или
memmap=0x10000$0x18690000
Некоторые загрузчики (bootloaders) могут нуждаться в escape-символе перед '$', наподобие Grub2, иначе '$' и последующее число будет съедено.
Установил (точнее, модифицировал) строку параметров ядра:
console=ttyPS0,115200 earlyprintk memmap=0x80M$0x20000000 root=/dev/mmcblk0p2 rw rootwait
думая, что линукс не будет распределять 128 МиБ памяти через malloc.
Но с помощью тестов убедился, что это не так. Память, распределяемая через malloc, выделяется и в этой части.
Поэтому и возник вопрос. Для каких целей может быть использован этот параметр?
Может быть можно как-то иначе создать зарезервированный участок с известным физическим адресом?