¿Cómo trabajar en kernel con un dispositivo integrado? - linux, depuración, linux-kernel, embedded

En este momento, estoy compilando con printk"s, copie el kernel resultante en una memoria USB, montando la memoria USB en el dispositivo, montando la partición que contiene el kernel, copiando el nuevo kernel desde la memoria USB a la partición, rebooting, luego inspeccionando la traza al capturar dmesg salida a un archivo.

En la estación de trabajo:

make my-kernel
cp new_kernel /path/to/usb/stick

En dispositivo integrado:

mount /dev/sda1/ /mnt
mount kernelpartition /tmp/kernel
cp /mnt/new_kernel /tmp/kernel
sync
umount /tmp/kernel
umount /dev/sda1
reboot

dmesg > mytrace
less mytrace

¿Se supone que esto es doloroso de desarrollar? No entiendo cómo se desarrolla alguna cantidad significativa de código kernel no trivial.

Respuestas

4 para la respuesta № 1

El mejor flujo de trabajo dependerá de las capacidades del dispositivo con el que está trabajando. A menudo tendrán un gestor de arranque con opciones para arrancar desde una red o puerto serie.

También estoy haciendo un desarrollo integrado, yesto es lo que se me ocurrió. El dispositivo con el que estoy trabajando tiene un flash incorporado que, por defecto, arranca, pero también tiene un puerto USB y una ranura para tarjeta SD. Tiene un gestor de arranque bastante primitivo.

  • En el puerto USB, conecté un dongle wifi. Me aseguro de compilar los núcleos con los módulos necesarios para que el dongle USB funcione.

  • He creado un núcleo mínimo y un sistema de archivos raíz que he flasheado en el dispositivo. Este kernel tiene la opción CONFIG_KEXEC habilitado El sistema de archivos raíz tiene herramientas kexec. Construyo el sistema usando buildroot.

  • Cuando se inicia este sistema, intenta montar el SDCARD y comprueba si puede encontrar un kernel en el directorio raíz. Si puede, entonces usa Kexec para arrancar este segundo kernel Esto se hace utilizando un script de inicio personalizado que he escrito.

Si no tiene una ranura para tarjeta SD en su dispositivo, probablemente pueda hacer algo similar con una memoria USB.

Con esta configuración, puedo usar sftp para transferir una nueva imagen del kernel a la tarjeta sd, y kexec para arrancarla. Me ahorra la molestia de volver a aplicar el dispositivo cada vez que cambio el kernel.


preguntas relacionadas
Menú