Arranque del kernel de Linux para retener el gran resumen de métodos de memoria

  

Buscado en Internet durante mucho tiempo, solo entiendo lentamente la forma de mantener la memoria en el arranque, ¡ahora resuma el proceso de aprendizaje en esta etapa! (Estoy experimentando en el tablero del brazo, la versión del kernel es 2.6.38)

Hay tres formas de reservar memoria en el arranque:

1. reserve_bootmem (addr, size, Bandera)

Este método, no he tenido éxito en hacer experimentos …

Si hay éxito, espero que el mensaje de Dios, ¡pida orientación!

2. alloc_bootmem (tamaño)

De hecho, es relativamente simple, en int /main.c:

//Establecer variable global

char * reserve_memory;

EXPORT_SYMBOL_GPL (reserve_memory);

void __init start_kernel ()

{


trap_init ();

//Agregue código aquí, mantenga 40M de memoria en la zona

reserve_memory = alloc_bootmem (0x2800000);

mem_init ();


}

Pero después de obtener reserve_memory en el kernel, cómo asignarlo al espacio del kernel, no hay ninguna pista y …

Alguien dijo en Internet,

Con la dirección devuelta por allco_bootmem,

En el modo kernel, encuentre la tarea task_struct para usar esta memoria;

y luego obligue a crear la tabla de páginas;

Si hay un dios Entienda esta oración, o mejor método de mapeo, por favor deje un mensaje, ¡gracias!

3. Establezca los parámetros del kernel de Linux en el momento del inicio

mem = 180M /* Solo se le da al sistema espacio de memoria de 180M cuando se inicia, y el resto está reservado * /

Simple, pero cuando se configura y se usa, debe ser compatible con el tamaño físico de la memoria del hardware.

En el controlador del kernel, puede asignar al espacio del kernel en forma de ioremap (), o mmap () para leer y escribir en el espacio del usuario.

Copyright © Conocimiento de Windows All Rights Reserved