Tengo un controlador de dispositivo Linux que se conecta a un dispositivo que, en teoría, puede realizar DMA usando direcciones de 64 bits. Me gustaría probar para ver que esto realmente funciona.¿Forzar a Linux a usar solo memoria sobre 4G?
¿Existe alguna manera simple de forzar a una máquina Linux a no utilizar ninguna memoria por debajo de la dirección física 4G? Está bien si la imagen del kernel está en memoria baja; Solo quiero forzar una situación en la que conozco todos mis buffers asignados dinámicamente, y cualquier kernel o buffers de usuario asignados para mí no son direccionables en 32 bits. Esta es una pequeña fuerza bruta, pero sería más completa que cualquier otra cosa que se me ocurra.
Esto debería ayudarme a detectar (1) el hardware que no se configuró correctamente o cargó con la dirección completa (o simplemente se rompe) así como (2) el uso accidental y innecesario de los búferes de rebote (porque no hay lugar para rebote a).
aclaración: Estoy ejecutando x86_64, por lo que no me preocupo por la mayoría de los viejos problemas de direccionamiento de 32 bits. Solo quiero probar que un controlador puede interactuar correctamente con multitud de búferes usando direcciones físicas de 64 bits.
Eso parece estar muy cerca de lo que necesito. Hay dos advertencias: primero, memmap = nn $ ss puede evitar que el kernel lea dispositivos mapeados en memoria, incluyendo todo en el bus PCI/PCIe. En segundo lugar, no tengo manera de evitar que la memoria necesaria en el arranque, pero luego liberado (como la imagen initrd) de ser reciclado como memorias intermedias DMA. Todavía una respuesta útil, gracias. –