Portabilidad del sistema Linux: programación del sistema

Portabilidad del sistema Linux: programación del sistema

Resumen:

Este capítulo utiliza la herramienta MfgTool proporcionada oficialmente por NXP para programar el sistema al dispositivo a través del puerto USB OTG

  • Puede comprender el principio general de descargar Mfgtool a la placa de desarrollo

  • Según la comprensión del principio de descarga, modifique la herramienta de descarga para que se adapte a nuestra propia placa de desarrollo para descargar

1. Adquisición de Mfgtool

Vaya al sitio web oficial de NXP y descargue el kit de herramientas de IMX6ULL

20220409213344

Dirección de descarga: dirección de descarga de Mfgtool , después de la descarga, descomprímala de la siguiente manera:

20220409214033

Uno con programación de sistema de archivos, uno sin

2. Principio de descarga de MfgTool

2.1 Conecte la placa de desarrollo y configure el método de descarga

MfgTool graba el sistema en el EMMC a través de la interfaz USB OTG. Antes de escribir, modifique el sistema a USB para descargar:

20220410121613

Después de la configuración, conecte la placa de desarrollo a través de USB y la conexión se muestra a continuación:

20220409210841

2.2 Ejecutar archivo VBS

Luego ingrese a L4.1.15_2.0.0-ga_mfg-tools\mfgtools-with-rootfs\mfgtoolsla carpeta, hay muchos archivos .vbs en la carpeta, .vbs se usa para configurar los parámetros de descarga, por ejemplo, hay los siguientes archivos .vbs en la carpeta recién descargada, puede configurar diferentes métodos de descarga:

20220409214737

El contenido del script vbs es el siguiente:

Set wshShell = CreateObject("WScript.shell")
wshShell.run "mfgtool2.exe -c ""linux"" -l ""eMMC"" -s ""board=sabresd"" -s ""mmc=1"" -s ""6uluboot=14x14evk"" -s ""6uldtb=14x14-evk"""
Set wshShell = Nothing

Se llama al software mfgtool2.exe, y la descarga se realiza después de pasar los parámetros. Luego tomamos el método de mfgtool2-yocto-mx-evk-emmc.vbsdescarga como ejemplo. Después de la ejecución, abra el programa y aparecerá la siguiente marca, que indica que la conexión a la placa de desarrollo es exitoso:

20220409215247

Después de hacer clic en Inicio, se programará el sistema y se programarán los cuatro archivos de uboot, kernel de Linux, .dtb y rootfs .

MfgTool primero descarga uboot, kernel y .dtb (árbol de dispositivos), que son tres archivos, al DDR de la placa de desarrollo a través de USB OTG. Tenga en cuenta que no es necesario descargar rootfs. Es equivalente a iniciar el sistema Linux directamente en la DDR de la placa de desarrollo y luego programar el sistema completo en la EMMC después de que se inicie el sistema Linux.

En el L4.1.15_2.0.0-ga_mfg-tools/mfgtools-with-rootfs/mfgtools/Profiles/Linux/OS Firmwaredirectorio se encuentran los siguientes archivos:

20220409215912

La carpeta de firmware tiene muchos archivos uboot que terminan en .imx, un archivo de imagen zImage y muchos archivos de árbol de dispositivos que terminan en .dtb, y el directorio de archivos es básicamente el mismo que el firmware, excepto que el firmware se usa para descargar a DDR y el archivo se utiliza para descargar a EMMC

2.3 Archivo de configuración ucl2.xml

Este archivo es principalmente para determinar qué chip de la serie I.MX está actualmente programando el sistema.ucl2.xml comienza con <UCL> y termina con </UCL>. Entre <CFG> y </CFG> hay contenido relacionado con la configuración

20220410091507

Al leer el VID y el PID del chip, puede determinar qué sistema de procesador se está programando actualmente. Si VID = 0X15A2, PID = 0080, significa que el sistema debe programarse para I.MX6ULL

Y las instrucciones relacionadas con la descarga de configuración, entre <LIST> y </LIST> hay comandos de programación para diferentes chips de memoria

20220410094523

Como se mencionó anteriormente, la descarga se divide en dos pasos. El primer paso es descargar al DDR, iniciar el sistema y prepararse para la descarga posterior al EMMC. Las instrucciones de descarga relevantes son las siguientes:

<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6ul%lite%%6uluboot%_emmc.imx" ifdev="MX6ULL">Loading U-boot</CMD>

<CMD state="BootStrap" type="load" file="firmware/zImage" address="0x80800000" loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SL MX6SX MX7D MX6UL MX6ULL">Loading Kernel.</CMD>

<CMD state="BootStrap" type="load" file="firmware/zImage-imx6ul%lite%-%6uldtb%-emmc.dtb" address="0x83000000" loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6ULL">Loading device tree.</CMD>

BootStrap significa la primera etapa de descarga , archivo significa la ubicación del archivo que se descargará, busque el archivo cfg.ini L4.1.15_2.0.0-ga_mfg-tools\mfgtools-with-rootfs\mfgtools-with-rootfs\mfgtoolsdebajo , que contiene los valores de parámetros relevantes en el archivo, como lite=l, 6uluboot=14x14evk en el archivo , por lo que el primer valor final del archivo de instrucciones esu-boot-imx6ull14x14evk _emmc.imx

Una vez completada la descarga, inicie el sistema

<CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>

Después de iniciar, cree una partición en EMMC y luego actualice uboot, zImage, .dtb (árbol de dispositivos) y el sistema de archivos raíz

3. Personaliza el sistema de programación Mfgtool

Obtuvimos Mfgtool arriba, y también entendimos aproximadamente el principio básico de su ejecución y descarga. Modifiquemos Mfgtool a continuación.

3.1 Preparación del archivo de descarga

  • Archivo de arranque de uboot : u-boot.imx (generado por la compilación del código fuente de uboot)
  • Archivo de imagen zImage : archivo de ejecución del kernel del sistema (generado al compilar el código fuente de Linux)
  • Archivo de árbol de dispositivos dtb : el árbol de dispositivos requerido para que se ejecute el kernel (generado al compilar el código fuente de Linux)
  • rootfs root file system : el sistema de archivos requerido para el correcto funcionamiento del kernel (hecho y empaquetado por Busybox)

Aquí uso el uboot, el sistema de archivos, la imagen del kernel y el árbol de dispositivos que hice anteriormente

20220410103012

Coloque el L4.1.15_2.0.0-ga_mfg-tools\mfgtools-with-rootfs\mfgtools\Profiles\Linux\OS Firmware、my_filearchivo en la carpeta, my_file es nuestra propia carpeta recién creada

3.2 Crear un nuevo EBV

Copie el archivo mfgtool2-yocto-mx-evk-emmc.vbs y cámbielo por el archivo mfgtool2-my-alpha-emmc.vbs El contenido del archivo es el siguiente:

20220410102713

No necesitamos modificarlo, solo use este archivo directamente. Aunque pasó algunos parámetros, no se usará más adelante y cambiará directamente el archivo de configuración xml.

3.3 Modificar ucl2.xml

La identificación del hardware sigue utilizando el original

  <CFG>
    <STATE name="BootStrap" dev="MX6SL" vid="15A2" pid="0063"/>
    <STATE name="BootStrap" dev="MX6D" vid="15A2" pid="0061"/>
    <STATE name="BootStrap" dev="MX6Q" vid="15A2" pid="0054"/>
    <STATE name="BootStrap" dev="MX6SX" vid="15A2" pid="0071"/>
    <STATE name="BootStrap" dev="MX6UL" vid="15A2" pid="007D"/>
    <STATE name="BootStrap" dev="MX7D" vid="15A2" pid="0076"/>
    <STATE name="BootStrap" dev="MX6ULL" vid="15A2" pid="0080"/>
    <STATE name="Updater"   dev="MSC" vid="066F" pid="37FF"/>
  </CFG>

El xml de la herramienta oficial se divide en varias partes:

20220410104307

Solo debemos prestar atención a los relacionados con EMMC y modificar el comando ifdev="MX6ULL", que está relacionado con IMX6ULL, porque la descarga se divide en dos etapas, la primera etapa se utiliza para iniciar el sistema en DDR, la descarga de la segunda etapa Nuestro sistema de archivos, mantenemos la primera etapa sin cambios, usamos el proporcionado por NXP, simplemente reemplace la ruta del archivo de la segunda etapa con la nuestra

Las instrucciones de la primera etapa:

<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6ul%lite%%6uluboot%_emmc.imx" ifdev="MX6ULL">Loading U-boot</CMD>
<CMD state="BootStrap" type="load" file="firmware/zImage" address="0x80800000" loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6ULL">Loading Kernel.</CMD>
<CMD state="BootStrap" type="load" file="firmware/%initramfs%" address="0x83800000" loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6ULL">Loading Initramfs.</CMD>
<CMD state="BootStrap" type="load" file="firmware/zImage-imx6ul%lite%-%6uldtb%-emmc.dtb" address="0x83000000" loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6ULL">Loading device tree.</CMD>

<CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>

directiva de segunda etapa

Crear un entorno de descarga

<!-- create partition -->
<CMD state="Updater" type="push" body="send" file="mksdcard.sh.tar">Sending partition shell</CMD>
<CMD state="Updater" type="push" body="$ tar -xf $FILE "> Partitioning...</CMD>
<CMD state="Updater" type="push" body="$ sh mksdcard.sh /dev/mmcblk1"> Partitioning...</CMD>

Descarga uboot y cambia la ruta a la nuestra:

<!-- burn uboot -->
<CMD state="Updater" type="push" body="$ dd if=/dev/zero of=/dev/mmcblk1 bs=1k seek=768 conv=fsync count=8">clear u-boot env</CMD>
<CMD state="Updater" type="push" body="$ echo 0 > /sys/block/mmcblk1boot0/force_ro">access boot partition 1</CMD>
<CMD state="Updater" type="push" body="send" file="my_file/u-boot.imx" ifdev="MX6ULL">Sending u-boot.bin</CMD>
<CMD state="Updater" type="push" body="$ dd if=$FILE of=/dev/mmcblk1boot0 bs=512 seek=2">write U-Boot to sd card</CMD>
<CMD state="Updater" type="push" body="$ echo 1 > /sys/block/mmcblk1boot0/force_ro"> re-enable read-only access </CMD>
<CMD state="Updater" type="push" body="$ mmc bootpart enable 1 1 /dev/mmcblk1">enable boot partion 1 to boot</CMD>

Formatee y monte la partición del sistema de archivos del núcleo:

<!-- format and mount boot partition -->
<CMD state="Updater" type="push" body="$ while [ ! -e /dev/mmcblk1p1 ]; do sleep 1; echo \"waiting...\"; done ">Waiting for the partition ready</CMD>
<CMD state="Updater" type="push" body="$ mkfs.vfat -F 32 /dev/mmcblk1p1">Formatting rootfs partition</CMD>
<CMD state="Updater" type="push" body="$ mkdir -p /mnt/mmcblk1p1"/>
<CMD state="Updater" type="push" body="$ mount -t vfat /dev/mmcblk1p1 /mnt/mmcblk1p1"/>

Configure el LOGOTIPO durante el proceso de descarga:

<!-- burn logo -->
<!--<CMD state="Updater" type="push" body="send" file="files/alientek.bmp">Sending Boot Logo</CMD>
<CMD state="Updater" type="push" body="$ cp $FILE /mnt/mmcblk1p1/alientek.bmp">write boot logo to sd card</CMD> >

Descargue la imagen de zImage y reemplácela con nuestra propia ruta

<!-- burn zImage -->
<CMD state="Updater" type="push" body="send" file="my_file/zImage">Sending kernel zImage</CMD>
<CMD state="Updater" type="push" body="$ cp $FILE /mnt/mmcblk1p1/zImage">write kernel image to sd card</CMD>

Descargue el árbol de dispositivos y reemplácelo con nuestra propia ruta del árbol de dispositivos:

<!-- burn dtb -->
<CMD state="Updater" type="push" body="send" file="my_file/imx6ull-my-emmc.dtb" ifdev="MX6ULL">Sending Device Tree file</CMD>
<CMD state="Updater" type="push" body="$ cp $FILE /mnt/mmcblk1p1/imx6ull-my-emmc.dtb" ifdev="MX6ULL">write device tree to eMMC card</CMD>

<CMD state="Updater" type="push" body="$ sleep 1">delay</CMD>
<CMD state="Updater" type="push" body="$ sync">Sync...</CMD>
<CMD state="Updater" type="push" body="$ umount /mnt/mmcblk1p1">Unmounting vfat partition</CMD>

Formatee y monte la partición del sistema de archivos raíz

<!-- format and mount rootfs partition -->
<CMD state="Updater" type="push" body="$ mkfs.ext3 -F -E nodiscard /dev/mmcblk1p2">Formatting rootfs partition</CMD>
<CMD state="Updater" type="push" body="$ mkdir -p /mnt/mmcblk1p2"/>
<CMD state="Updater" type="push" body="$ mount -t ext3 /dev/mmcblk1p2 /mnt/mmcblk1p2"/>

Descargue el sistema de archivos raíz y reemplácelo con nuestra ruta del sistema de archivos raíz

<!-- burn rootfs -->
<CMD state="Updater" type="push" body="pipe tar -jxv -C /mnt/mmcblk1p2" file="my_file/rootfs.tar.bz2" ifdev="MX6ULL">Sending and writting rootfs</CMD>
<CMD state="Updater" type="push" body="frf">Finishing rootfs write</CMD>
<CMD state="Updater" type="push" body="$ sleep 1">delay</CMD>
<CMD state="Updater" type="push" body="$ sync">Sync...</CMD>
<CMD state="Updater" type="push" body="$ umount /mnt/mmcblk1p2">Unmounting rootfs partition</CMD>
<CMD state="Updater" type="push" body="$ echo Update Complete!">Done</CMD>

Guarde después de la modificación y ejecute nuestro script VBS

La descarga se completa de la siguiente manera:

20220410115405

Ajuste el interruptor BOOT DIP, inicie el sistema, muestra que falta el árbol de dispositivos, porque uso uboot compilado por atomic, y su nombre de árbol de dispositivos es diferente. Lo modifico directamente en la línea de comando de arranque, configuro el árbol de dispositivos, y comenzar directamente.

setenv fdt_file imx6ull-my-emmc.dtb
boot

El sistema se inició con éxito:

20220410121218

Supongo que te gusta

Origin blog.csdn.net/qq_45396672/article/details/124075922
Recomendado
Clasificación