O kernel do Linux tem opções para restringir quais intervalos de endereços físicos ele usará como RAM, mas isso não impedirá que drivers com bugs ou acesso através de /dev/mem
escapem desses intervalos. Você não ganhará nada com a modificação da configuração da MMU durante o estágio de inicialização, porque o kernel assumirá o controle da MMU depois disso, de qualquer maneira. Se você quer ter certeza absoluta de que o sistema Linux não irá acessar certos intervalos de memória, você precisa de algum controle externo.
Sua arquitetura oferece uma maneira de restringir o que o kernel do Linux pode acessar: TrustZone (ou, mais precisamente, TrustZone plus o firewall de memória) ¹. Eu duvido que você encontre uma solução pronta para o que você está fazendo, você precisará fazer um pouco de codificação. Felizmente, a documentação sobre o TrustZone no Zync está disponível. Aqui está a ideia básica:
- O processador inicializa no modo S. Configure os registros de controle TrustZone para desativar o acesso não seguro nesse intervalo de 2 GB.
- Depois disso, mude para o modo NS e se ramifique para o bootloader normal.
- Se o Linux tentar acessar o intervalo de 2GB bloqueado, a solicitação será bloqueada antes de atingir o barramento de memória e, em vez disso, acionará um aborto (anulação imprecisa, se houver armazenamento em cache ou pré-busca).
¹ Os recentes processadores ARM oferecem uma outra maneira, que é executar um hypervisor, mas que não está disponível em um Cortex-A9.