Cómo se utiliza qemu selects arm para seleccionar la imagen del kernel de Linux que ejecuta la plataforma arm
Hay dos formas de descargar el kernel. Una es usar git para descargar directamente el árbol de código del kernel, lo cual es beneficioso para el desarrollo posterior del kernel. La otra es ir directamente a la comunidad del kernel para descargar la versión correspondiente del paquete de código fuente. Utilicé el primer método, pero luego descubrí que no podía ejecutar la versión principal 3.18 y el código posterior usando este método de compilación. Aún no se ha identificado la causa raíz del problema. Si los lectores desean compilar de forma rápida y exitosa, se recomienda utilizar la versión 3.16 del kernel para compilar.
Instalar la cadena de herramientas de compilación cruzada de Arm
Los amigos que participan en el desarrollo integrado deben estar familiarizados con las cadenas de herramientas de compilación cruzada. Si solicita una cadena de herramientas de compilación cruzada, se recomienda utilizar el software de código abierto crosstool-ng para compilarla. Pero se recomienda instalar directamente la cadena de herramientas de compilación cruzada de arm:
sudoapt-getinstallgcc-arm-linux-gnueabi
Compilar el kernel de Linux
Generar Archivo de configuración de la placa de desarrollo vexpress:
makeCROSS_COMPILE=arm-linux-gnueabi-ARCH=armvexpress_defconfig
Compilar:
makeCROSS_COMPILE=arm-linux-gnueabi-ARCH= arm
La imagen del kernel generada se encuentra en arch/arm/boot/zImage, que es necesaria para el posterior arranque de qemu.
Descarga e instala el emulador qemu
Ubuntu 12.04 en realidad tiene un instalador para qemu. 04 En realidad, existe un instalador de qemu, pero debido a que la versión es inferior, no es compatible con la placa de desarrollo vexpress, por lo que se recomienda que descargue una versión superior de qemu:
wget
En la configuración Antes de qemu, es necesario instalar varios paquetes:
sudoapt-getinstallzlib1g-dev
sudoapt-getinstalllibglib2.0-0
sudoapt- getinstalllibglib2.0- dev
Configure qemu, que admite la simulación de la arquitectura arm en todas las placas:
./configure--target-list=arm-softmmu--audio-drv-list =
Compilar e instalar:
make
makeinstall
Pruebe si qemu y el kernel se ejecutan correctamente
Ahora qemu tiene La instalación y la compilación del kernel fueron exitosas. También podríamos probar si el kernel compilado es normal o si qemu es lo suficientemente amigable como para admitir la placa vexpress.
Ejecutar el comando es muy sencillo:
qemu-system-arm-mvexpress-a9-m512M-kernel/home/ivan/kernel_git/linux/arch/arm/boot/zImage -nographic -append" console=ttyAMA0"
Si ve la copia impresa del proceso de inicio del kernel, la compilación anterior fue exitosa.
La siguiente es una breve descripción de los parámetros del comando qemu:
-Mvexpress-a9 simula la placa vexpress-a9. Puede usar el parámetro -M? por esta versión de qemu
-m512M Una sola placa que ejecuta 512 M de memoria física
-kernel/ home/ivan/kernel_git/linux/arch/arm/boot/zImage le indica el. Imagen del kernel de la placa qemu ejecutándose La ruta de
-nographic no utiliza la interfaz gráfica de usuario
Agregue el parámetro de inicio del kernel "console=ttyAMA0", que se usa para indicarle. kernel cuál es el dispositivo de puerto serie cuando se ejecuta vexpress veneer.
Nota:
Cada vez que compilo, olvido qué tty se debe completar para el parámetro console= en los parámetros de inicio del kernel, porque los diferentes tipos de controladores seriales de veneer son diferentes. Los nombres de los dispositivos tty, por supuesto, son diferentes. ¿Cuál es el nombre del dispositivo tty de la placa vexpress? De hecho, este valor se puede encontrar en la macro CONFIG_CONSOLE del archivo .config generado.
Si construyes otras placas, debes prestar atención al valor del parámetro console= en los parámetros de inicio del kernel, que también se puede encontrar en el archivo .config generado.
Crear el sistema de archivos raíz
¿Ya está hecho? De hecho, en la prueba anterior, verá que el kernel informa un pánico porque no puede encontrar el sistema de archivos raíz y no puede iniciar el proceso de arranque.
Hay dos aspectos del sistema de archivos raíz que deben considerarse:
1. El sistema de archivos raíz es muy simple, con solo unos pocos conjuntos de comandos y dinámicas de estado. La razón por la que LinuxFromScratch es tan complejo es que debe crear una versión de Linux. Pero en el mundo integrado, casi todo es una versión mini, y el sistema de archivos raíz no es una excepción.
El sistema de archivos raíz de este artículo = Busybox (incluidos los comandos básicos de Linux) biblioteca de tiempo de ejecución algunos dispositivos de caracteres
2. Dónde colocar el sistema de archivos raíz.
De hecho, depende del dispositivo de almacenamiento que soporte cada placa de desarrollo, puedes ponerlo en NorFlash, o en una tarjeta SD, o incluso en un disco externo. La clave es que necesitas saber exactamente qué dispositivos de almacenamiento admite tu placa.
En este artículo, utilizamos directamente la tarjeta SD como espacio de almacenamiento y el formato del archivo es ext3
Descarga, compila e instala Busybox
wget
makedefconfig
makeCROSS_COMPILE=arm-linux-gnueabi-
makeinstallCROSS_COMPILE=arm-linux-gnueabi-
Una vez completada la instalación, créelo en el directorio de togetherbox _directorio de instalación. Los programas en este directorio son los comandos necesarios para ejecutar la placa.
Forme la estructura del directorio raíz
Primero, forme una estructura de directorios en el entorno host de Ubuntu, donde los archivos y directorios almacenados sean exactamente los mismos que la estructura de directorios requerida para ejecutarse en el placa única y luego empaquetada en una imagen (parece una tarjeta SD para la placa de desarrollo), esta estructura de directorio temporal se llama directorio raíz
1. Cree el directorio rootfs (directorio raíz)
sudomkdirrootfs
2. Copie el comando togetherbox al directorio raíz
sudocpbusybox-1.20.2/_install/*-rrootfs/
3. Copie la biblioteca en tiempo de ejecución de la cadena de herramientasCopiar de la cadena de herramientas Ejecute la biblioteca en el directorio lib
sudocp-P/usr/arm-linux-gnueabi/lib/*-rootfs/lib/
4. Crear 4 dispositivos terminales tty
sudomknodrootfs/dev/tty1c41
sudomknodrootfs/dev/tty2c42
sudomknodrootfs/dev/tty3c43
sudomknodrootfs/dev/tty4c44
Crear una imagen del sistema de archivos raíz
1. Generar una imagen de 32 M
ddif=/dev/zeroof=a9rootfs .ext3bs=1Mcount=32
2 . Formateado como sistema de archivos ext3
mkfs.ext3a9rootfs.ext3
3. Copiar archivos al espejo
sudomkdirtmpfs
sudomount-text3a9rootfs.ext3tmpfs/-oloop
cp-rrootfs/*tmpfs/
sudoumounttmpfs
El sistema está en funcionamiento
¡Listo! Después de completar todos los pasos anteriores, puede utilizar los siguientes parámetros de comando para iniciar la placa de desarrollo vexpress de emulación qemu:
qemu-system-arm-mvexpress-a9-m512m-kernel/home/ivan/qemu/ linux/arch/ arm/boot/ zImage-nographic-append "root=/dev/mmcblk0console=ttyAMA0"-sda9rootfs.ext3
Comienza a imprimir desde el kernel y cuando aparece la línea de comando, siento emocionado... ...
Escríbelo más tarde
A través de los pasos anteriores, puedes construir un entorno de desarrollo mínimo de qemu arm. Puedes modificar el kernel o agregar algunos programas de prueba. en lo anterior. Ejecute en una sola placa, incluso usando un dispositivo flash en la placa.
Aquí puede llevar a cabo el desarrollo del kernel con arquitectura de brazo puro, el desarrollo del kernel independiente de la arquitectura y el desarrollo de controladores relacionados con una sola placa.