Comprensión de los diversos parámetros de dirección involucrados en los núcleos uBoot y Linux
************************************************* < Br>
arch /arm /Makefile
//El kernel ejecuta la dirección virtual TEXTADDR = 0xC0008000
******************* ******************************
arch /arm /boot /Makefile
//kernel load address ZRELADDR = 0x20008000
************************************* ************
arch /arm /boot /comprimido /Makefile
//Dirección del programa autoextraíble ZTEXTADDR = 0x00000000
(linux -2.4.19- La función autoextraíble gunzip del kernel rmk7 se encuentra en
/lib/inflate.c, que es la versión gzip-1.0.3, y ahora está comprimida en la PC mediante la función gzip
. El archivo no puede ser reconocido por la versión gzip-1.0.3 de gunzip, por lo que linux-2.4.19-rmk7
la función de extracción automática del kernel es equivalente a no ser utilizada. El valor predeterminado ZTEXTADDR = 0x00000000
significa no Uso.
(Solo se puede cargar con la descompresión de gunBip de uBoot)
)
************************* ************ **********
//dirección de almacenamiento de uImage = 0x21000000
********************* **************************
mkimage -A brazo -O linux -C gzip -a 0x20008000 -e 0x20008000 -d Linux.bin.gz uImage
-A: Tipo de CPU
-O: Sistema operativo
-C: Método de compresión utilizado
-a: Dirección de carga del kernel
-e: Dirección de entrada del kernel
*********************** ************************
do_bootm de uBoot (cmd_tbl_t * cmdtp, int flag, int argc, char * argv []);
La función verificará el encabezado de los datos de uImage con formato mkimage almacenados en la dirección 0x21000000
typedef struct image_header {
uint32_t ih_magic; /* Image Header Magic Número * /
uint32_t ih_hcrc; /* Cabecera de comprobación CRC del encabezado de imagen * /
uint32_t ih_time; /* Marca de tiempo de la creación de imagen * /
uint32_t ih_size; /* Tamaño de datos de imagen * /
uint32_t ih_load; /* Dirección de carga de datos * /
uint32_t ih_ep; /* Dirección del punto de entrada * /
uint32_t ih_dcrc; /* Datos de la imagen Control de CRC * /
uint8_t ih_os; /* Sistema operativo * /
uint8_t ih_arch; /* CPU architecture * /
uint8_t ih_type; /* Tipo de imagen * /
uint8_t ih_comp; /* Tipo de compresión * /
uint8_t ih_name [IH_NMLEN]; /* Nombre de la imagen * /
} image_header_t;
(el valor de ih_ep es 0x20008000, el valor de ih_load es 0x20008000)
Si cada cabeza El valor del dominio y crc son legales, entonces do_bootm llamará a la siguiente función de descompresión de gunzip para descomprimir el núcleo comprimido en la dirección
0x21000000 + sizeof (image_header_t):
gunzip ((void *) ntohl (hdr - > ih_load), 0x400000, datos, (int *) &len);
1. Hdr- > ih_load es la dirección de datos de salida 0x20008000
2.0x400000 para el límite superior de datos de salida descomprimidos Gunzip -4M
3. Los datos son los datos de la dirección de los datos de entrada = 0x21000000 + sizeof (image_header_t);
4. Len es la longitud de los datos de entrada len = ntohl (hdr- > ih_size);
El tamaño real de los datos descomprimidos se almacenará una vez que se complete la descompresión
El archivo del kernel de Linux comprimido uImage se descomprime a través de gunzip Después de la función, pase
do_bootm_linux (cmdtp, flag, argc, argv, addr, len_ptr, verificar);
para pasar los cinco parámetros necesarios para la operación del kernel al kernel de Linux
kernel = (void (*) (bd_t *, ulong, ulong, ulong, ulong)) hdr- > ih_ep;
1. Hdr- > ih_ep es 0x20008000
/*
* Parámetros del kernel de Linux:
* r3: ptr para cargar datos de información
* r4: initrd_start O 0 si no hay initrd
* r5: initrd_end: no se utiliza si r4 es 0
* r6: Inicio de la cadena de línea de comando
* r7: Fin de la línea de línea de comando < Br>
* /
(* kernel) (kbd, initrd_start, initrd_end, cmd_start, cmd_end);
Esto completa la transferencia de 5 parámetros necesarios para el inicio del sistema Linux. El trabajo de uBoot ha terminado, y Linux se ejecutará oficialmente en la dirección 0x20008000.
Soy un novato de Linux como muchas personas, pero está muy interesado en esto, no es bueno tirar;
Ver el formato de codificación predeterminado de mysql para mostrar variables como " charac
Linux ha creado un entorno amigable que nos da la posibilidad de elegir. Por ejemplo, la mayoría d
En este artículo se presenta la base de datos DB2 durante el proceso de instalación bajo inux expli
Rookie Classroom: Lenguajes de programación de Linux desatendidos
Comando de linux detallado mkdir
Explique en detalle la seguridad práctica de Linux
Solucione el error ntp, no se encontró el servidor adecuado para la sincronización
Controlador de dispositivo LINUX: carrera, bloque, código de reingreso
Supervisar los registros del sitio web en la línea de comandos de Linux
Proceso zombie de Linux y su solución
Grupo de proceso huérfano y descripción de la sesión de terminal
¿El más fuerte de la historia? De 0 a 33600 Detalles de puerto lógico (5)
Acelerar la velocidad del sistema Win7 debe hacer dos cosas
¿Cómo borrar los registros de acceso de Windows 7?
Resuelva el estancamiento de la actualización del gadget de escritorio en Win7 64-bit Ultimate
Cómo agregar saludos al reloj de la barra de tareas en el sistema Win7 Ultimate
La copia de la máquina virtual de Linux no puede acceder a Internet
¿Cómo configurar la altura de la barra de tareas win7? ¿Qué tan alto debe ser?