Debian Build U-Boot: Difference between revisions

From Variscite Wiki
(Update/Align to the Debian script)
No edit summary
 
(17 intermediate revisions by the same user not shown)
Line 1: Line 1:
<!-- Set release according to "release" parameter in URL and use RELEASE_BUSTER_V2.0_DART-MX8M as default
<!-- Set release according to "release" parameter in URL and use RELEASE_BUSTER_V3.1_DART-MX8M as default


This guide was derivat from the Yocto one and aligned to the Debian script.
This guide was derivat from the Yocto one and aligned to the Debian script.


--> {{INIT_RELEASE_PARAM|RELEASE_BUSTER_V2.0_DART-MX8M}}<!--
--> {{INIT_RELEASE_PARAM|RELEASE_BUSTER_V3.1_DART-MX8M}}<!--
--> {{#lst:Debian_Platform_Customization|{{#var:RELEASE_PARAM}}}} <!--
--> {{#lst:Debian_Platform_Customization|{{#var:RELEASE_PARAM}}}} <!--
--> {{#vardefine:DEBIAN_GIT_WGET|{{#replace:{{#var:DEBIAN_GIT}}|.git|}}}} <!--
--> {{PageHeader|{{#var:PLATFORM_OS}} Build U-Boot from source code}} {{DocImage|category1=Debian|category2={{#var:HARDWARE_NAME}}}} <!--
--> {{PageHeader|{{#var:PLATFORM_OS}} Build U-Boot from source code}} {{DocImage|category1=Debian|category2={{#var:HARDWARE_NAME}}}} <!--
--> __toc__
--> __toc__
Line 20: Line 21:
Configure compilation environment:
Configure compilation environment:
  $ export ARCH={{#var:ARCH}}
  $ export ARCH={{#var:ARCH}}
  $ export CROSS_COMPILE={{#var:BUILD_FOLDER}}/toolchain/{{#var:TOOLCHAIN}}/{{#var:CROSS_COMPILE}}
  $ export CROSS_COMPILE={{#var:BUILD_FOLDER}}/toolchain/{{#var:TOOLCHAIN}}/bin/{{#var:CROSS_COMPILE}}


Cleanup everything:
Cleanup everything:
Line 59: Line 60:
| imx8=
| imx8=
Obtain SC firmware:<br>
Obtain SC firmware:<br>
{{#ifexpr: {{#var:DEBIAN_VERSION}} < 11 |Either build|Build}} SCFW by following the {{Varlink|Yocto_Build_SCFW|{{#var:RELEASE_LINK}}|Build SCFW from source code}} page and copy the SCFW image to the imx-boot-tools directory{{#ifexpr: {{#var:DEBIAN_VERSION}} < 11 |, or download the pre-built binary by running:<br>
{{#ifexpr: {{#var:DEBIAN_VERSION}} < 11 |Either build|Build}} SCFW by following the {{Varlink|Yocto_Build_SCFW|{{#var:RELEASE_LINK}}|Build SCFW from source code}} page and copy the SCFW image to the imx-boot-tools directory{{#ifexpr: {{#var:DEBIAN_VERSION}} < 11 |, or download the pre-built binary by running:
<!-- For Buster (Debian 10) obtain from the debian-var repo -->
<!-- For Buster (Debian 10) obtain from the debian-var repo -->
  $ wget {{#var:DEBIAN_GIT}}/raw/{{#var:DEBIAN_BRANCH}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/{{#switch:{{#var:SOC}}|mx8m=scfw_tcm.bin|mx8qxp=mx8qx-scfw-tcm.bin}} -O scfw_tcm.bin|
{{#switch:{{#var:SOC}}
.<br><br>}}
| mx8qxp=
<br>
For i.MXQXP SOC revB:<br>
  $ wget {{#var:DEBIAN_GIT_WGET}}/raw/{{#var:DEBIAN_BRANCH}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools-b0/{{#var:SC_FIRMWARE}} -O scfw_tcm.bin
For i.MXQXP SOC revB:<br>
$ wget {{#var:DEBIAN_GIT_WGET}}/raw/{{#var:DEBIAN_BRANCH}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/{{#var:SC_FIRMWARE}} -O scfw_tcm.bin
| mx8qm=
&nbsp;
$ wget {{#var:DEBIAN_GIT_WGET}}/raw/{{#var:DEBIAN_BRANCH}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/scfw_tcm.bin
}} <!-- end of switch SOC -->
|.<br><br>}}


Download SECO firmware:<br>
Download SECO firmware:
  <!-- For Buster (Debian 10) download from the debian-var repo -->
  <!-- For Buster (Debian 10) download from the debian-var repo -->
{{#ifexpr: {{#var:DEBIAN_VERSION}} < 11 |
{{#ifexpr: {{#var:DEBIAN_VERSION}} < 11 |
{{#switch:{{#var:SOC}}
{{#switch:{{#var:SOC}}
| mx8qxp=
| mx8qxp=
<br>
For i.MXQXP SOC revB:<br>
For i.MXQXP SOC revB:<br>
  $ wget {{#var:DEBIAN_GIT}}/raw/{{#var:DEBIAN_BRANCH}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/mx8qxc0-ahab-container.img -O mx8qxb0-ahab-container.img
  $ wget {{#var:DEBIAN_GIT_WGET}}/raw/{{#var:DEBIAN_BRANCH}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools-b0/{{#var:SECO_FIRMWARE_IMG_B0}}
For i.MXQXP SOC revC:<br>
For i.MXQXP SOC revC:<br>
  $ wget {{#var:DEBIAN_GIT}}/raw/{{#var:DEBIAN_BRANCH}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/mx8qxc0-ahab-container.img -O mx8qxc0-ahab-container.img
  $ wget {{#var:DEBIAN_GIT_WGET}}/raw/{{#var:DEBIAN_BRANCH}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/{{#var:SECO_FIRMWARE_IMG}}
| mx8qm=
| mx8qm=
  $ wget {{#var:DEBIAN_GIT}}/raw/{{#var:DEBIAN_BRANCH}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/mx8qxc0-ahab-container.img -O mx8qm-ahab-container.img
&nbsp;
  $ wget {{#var:DEBIAN_GIT_WGET}}/raw/{{#var:DEBIAN_BRANCH}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/{{#var:SECO_FIRMWARE}}
}}
}}
|
| <!-- For Bullseye (Debian 11) and above download from NXP -->
<!-- For Bullseye (Debian 11) and above download from NXP -->
<br>
  $ wget {{#var:SECO_FIRMWARE_URL}}/{{#var:SECO_FIRMWARE}}.bin
  $ wget {{#var:SECO_FIRMWARE_URL}}/{{#var:SECO_FIRMWARE}}.bin
  $ chmod +x {{#var:SECO_FIRMWARE}}.bin
  $ chmod +x {{#var:SECO_FIRMWARE}}.bin
Line 84: Line 97:
}}
}}
| imx9=
| imx9=
<br>
Download Sentinel firmware:
Download Sentinel firmware:
  $ wget {{#var:IMX_SENTINEL_URL}}
  $ wget {{#var:IMX_SENTINEL_URL}}
Line 94: Line 108:
  $ ./{{#var:NXP_FIRMWARE}}.bin
  $ ./{{#var:NXP_FIRMWARE}}.bin
  $ cp {{#var:NXP_FIRMWARE}}/firmware/ddr/synopsys/* .
  $ cp {{#var:NXP_FIRMWARE}}/firmware/ddr/synopsys/* .
| #default=
| #default= <!-- Download the DDR/HDMI firmware from the debian-var repository (Debian Buster and above) -->
<!-- Download the DDR/HDMI firmware from the debian-var repository (Debian Buster and above) -->
<br>
Download DDR {{#switch: {{#var:SOC}}|mx8mq|mx8m= and HDMI/DP|#default=}} firmware:
Download DDR {{#switch: {{#var:SOC}}|mx8mq|mx8m= and HDMI/DP|#default=}} firmware:
  $ git clone {{#var:DEBIAN_GIT}} -b {{#var:DEBIAN_BRANCH}}
  $ git clone {{#var:DEBIAN_GIT}} -b {{#var:DEBIAN_BRANCH}}
  $ cp debian-var/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/*ddr4* .
  $ cp debian-var/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/*ddr4* .
  {{#switch: {{#var:SOC}}|mx8m= $ cp debian-var/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/signed_* .|#default=}}
  {{#switch: {{#var:SOC}}|mx8m= $ cp debian-var/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/signed_* .|#default=}}
{{#vardefine:HAS_DEBIAN_CLONE}}
}}
}}


<!-- imx-mkimage tool -->
<!-- ATF firmware -->
{{#switch: {{#var:SOC_FAMILY}}
Download {{#ifexpr: {{#var:DEBIAN_VERSION}} >= 11 |and build}} ATF:<!--
| imx8=
- Buster commonly provides the ATF firmware pre-built in the variscite/<MACHINE>/imx-boot-tools(-b0), except for the mx8m
Download and build imx-mkimage:
- Bullseye commonly builds the ATF from scratch, except for the mx8mp and mx8mm lf-5.4.y
$ git clone {{#var:NXP_IMX_GIT}}/imx-mkimage -b {{#var:NXP_IMX_BRANCH}}
- In the future (>= Bullseye), the ATF firmware will most likely be built by the build script
$ cd imx-mkimage
-->
$ make
{{#ifexpr: {{#expr:{{#var:DEBIAN_VERSION}} < 11 and {{#switch:{{#var:SOC}}|mx8m=0|#default=1}}}}
$ cp mkimage_imx8 {{#var:IMX_MKIMAGE_SOC}}/soc.mak {{#var:IMX_MKIMAGE_SOC}}/*.sh scripts/pad_image.sh ..
or {{#rpos:{{#var:SOC}}|8mp}} >= 0
$ cd ..
or {{#expr:{{#rpos:{{#var:SOC}}|8mm}} >= 0 and {{#rpos:{{#var:KERNEL_BRANCH}}|lf-5.4.y}} >= 0}}
| imx9=
| <!-- For Buster (Debian 10) -->
Download and build imx-mkimage:
{{#switch:{{#var:SOC}}
  $ git clone {{#var:NXP_IMX_GIT}}/imx-mkimage -b {{#var:NXP_IMX_BRANCH}}
| mx8qxp=
$ cd imx-mkimage
<br>
  $ make soc={{#var:IMX_MKIMAGE_SOC}}
For i.MXQXP SOC revB:<br>
$ cp {{#var:IMX_MKIMAGE_SOC}}/soc.mak mkimage_imx8 ..
  $ wget {{#var:DEBIAN_GIT_WGET}}/raw/{{#var:DEBIAN_BRANCH}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools-b0/bl31-imx8qx.bin -O bl31.bin
$ cd ..
For i.MXQXP SOC revC:<br>
  $ wget {{#var:DEBIAN_GIT_WGET}}/raw/{{#var:DEBIAN_BRANCH}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/bl31-imx8qx.bin -O bl31.bin
| #default=
| #default=
Download imx-mkimage:
&nbsp;
  $ git clone {{#var:NXP_IMX_GIT}}/imx-mkimage -b {{#var:NXP_IMX_BRANCH}} <!--
  {{#vardefine:DEBIAN_SRC_ATF_PATH|variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/bl31-i{{#var:SOC}}.bin}}
Patch imx-mkimage for mx8mn, mx8mm, mx8mp, mx8mq
{{#varexists:HAS_DEBIAN_CLONE|$ cp debian-var/{{#var:DEBIAN_SRC_ATF_PATH}} bl31.bin|$ wget {{#var:DEBIAN_GIT_WGET}}/raw/{{#var:DEBIAN_BRANCH}}/{{#var:DEBIAN_SRC_ATF_PATH}} -O bl31.bin}}
-->{{#ifexpr: {{#var:DEBIAN_VERSION}} >= 11
| <!-- For Bullseye (Debian 11) and above, use patches located at debian-var -->
$ git clone {{#var:DEBIAN_GIT}} -b {{#var:DEBIAN_BRANCH}}
$ cd imx-mkimage
$ git apply ../{{#var:DEBIAN_GIT}}/{{#var:IMX_MKIMAGE_SOC_PATCH}}<!--
  -->{{#varexists:IMX_MKIMAGE_SOC_PATCH_1 |
<br>$ git apply ../{{#var:DEBIAN_GIT}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/{{#var:IMX_MKIMAGE_SOC_PATCH_1}}
}}<!--
  -->{{#varexists:IMX_MKIMAGE_SOC_PATCH_2 |
<br>$ git apply ../{{#var:DEBIAN_GIT}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/{{#var:IMX_MKIMAGE_SOC_PATCH_2}}
}}
$ cd ..
| <!-- For Buster (Debian 10), overwrite soc.mak (only for mx8mn) -->
{{#switch:{{#var:SOC}}
$ git clone {{#var:DEBIAN_GIT}} -b {{#var:DEBIAN_BRANCH}}
|mx8mn= $ cp {{#var:DEBIAN_GIT}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/{{#var:MACHINE_NAME}}/soc.mak imx-mkimage/iMX8M/soc.mak
}}
}} <!-- end of DEBIAN_VERSION -->
$ cp imx-mkimage/iMX8M/*.c imx-mkimage/iMX8M/*.sh imx-mkimage/iMX8M/soc.mak . <!-- dtb-check.sh -->
}}
}}
 
| <!-- For Bullyese (Debian 11) and above -->
<!-- ATF firmware -->
&nbsp;
Download {{#ifexpr: {{#var:DEBIAN_VERSION}} >= 11 |and build}} ATF:<!--
  $ git clone {{#var:VARISCITE_ATF_GIT|{{#var:NXP_IMX_GIT}}/imx-atf}} -b {{#var:VARISCITE_ATF_BRANCH|{{#var:NXP_IMX_BRANCH}}}}
Use VARISCITE_ATF_GIT from yocto platform customization if exists for Variscite hosted repo, else default to NXP:
-->
{{#ifexpr: {{#var:DEBIAN_VERSION}} > 10
| <!-- For Bullyese (Debian 11) and above -->
  $ git clone {{#var:VARISCITE_ATF_GIT}} -b {{#var:VARISCITE_ATF_BRANCH}}  
  $ cd imx-atf
  $ cd imx-atf
{{#ifeq: {{#var:SOC}}|mx8m|
{{#ifeq: {{#var:KERNEL_BRANCH}}|imx_4.19.35_1.1.0_var01|$ git apply ../debian-var/variscite/imx8mq-var-dart/imx-boot-tools/imx-atf/*|}}|}}
  $ unset LDFLAGS
  $ unset LDFLAGS
  $ make PLAT={{#var:IMX_ATF_PLAT}} bl31
  $ make PLAT={{#var:IMX_ATF_PLAT}} bl31
  $ cp build/{{#var:IMX_ATF_PLAT}}/release/bl31.bin ..
  $ cp build/{{#var:IMX_ATF_PLAT}}/release/bl31.bin ..
  $ cd ..
  $ cd ..
| <!-- For Buster (Debian 10) -->
}}
$ wget {{#var:DEBIAN_GIT}}/raw/{{#var:DEBIAN_BRANCH}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/bl31-{{#var:SOC}}.bin -O bl31.bin
}}


<!-- Build imx-boot -->
<!-- Copy U-Boot binaries -->
Copy U-Boot binaries:
Copy U-Boot binaries:
  $ cp ../tools/mkimage mkimage_uboot
  $ cp ../tools/mkimage mkimage_uboot
Line 182: Line 174:
|#default=
|#default=
  $ cp ../spl/u-boot-spl.bin .
  $ cp ../spl/u-boot-spl.bin .
}}
<!-- imx-mkimage tool -->
{{#switch: {{#var:SOC_FAMILY}}
| imx8=
Download and build imx-mkimage:
$ git clone {{#var:NXP_IMX_GIT}}/imx-mkimage -b {{#var:NXP_IMX_BRANCH}}
$ cd imx-mkimage
$ make
$ cp mkimage_imx8 {{#var:IMX_MKIMAGE_SOC}}/soc.mak {{#var:IMX_MKIMAGE_SOC}}/*.sh scripts/pad_image.sh ..
$ cd ..
| imx9=
Download and build imx-mkimage:
$ git clone {{#var:NXP_IMX_GIT}}/imx-mkimage -b {{#var:NXP_IMX_BRANCH}}
$ cd imx-mkimage
$ make soc={{#var:IMX_MKIMAGE_SOC}}
$ cp {{#var:IMX_MKIMAGE_SOC}}/soc.mak mkimage_imx8 ..
$ cd ..
| #default=
Download imx-mkimage:
$ git clone {{#var:NXP_IMX_GIT}}/imx-mkimage -b {{#var:NXP_IMX_BRANCH}}
<!-- Patch imx-mkimage for mx8mn, mx8mm, mx8mp, mx8mq -->
{{#ifexpr: {{#var:DEBIAN_VERSION}} >= 11 and not {{#expr: {{#rpos:{{#var:SOC}}|8mm}} >= 0 and {{#rpos:{{#var:KERNEL_BRANCH}}|lf-5.4.y}} >= 0}}
| <!-- For Bullseye (Debian 11) and above, use patches located at debian-var (except for mx8mm and kernel lf-5.4.y) -->
{{#varexists:HAS_DEBIAN_CLONE||$ git clone {{#var:DEBIAN_GIT}} -b {{#var:DEBIAN_BRANCH}}}}
$ cd imx-mkimage
$ git apply ../debian-var/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/imx-boot/{{#explode:{{#var:IMX_MKIMAGE_SOC_PATCH}}|/|-1}}<!--
  -->{{#varexists:IMX_MKIMAGE_SOC_PATCH_1 |
<br>$ git apply ../debian-var/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/imx-boot/{{#explode:{{#var:IMX_MKIMAGE_SOC_PATCH_1}}|/|-1}}
}}<!--
  -->{{#varexists:IMX_MKIMAGE_SOC_PATCH_2 |
<br>$ git apply ../debian-var/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/imx-boot/{{#explode:{{#var:IMX_MKIMAGE_SOC_PATCH_2}}|/|-1}}
}}
$ cd ..
$ cp imx-mkimage/iMX8M/*.c imx-mkimage/iMX8M/*.sh imx-mkimage/iMX8M/soc.mak imx-mkimage/scripts/*.sh .
{{#ifexpr: {{#var:YOCTO_VERSION}} >= 3.3 |$ cp dtb_check.sh ../scripts/|}}
| <!-- For Buster (Debian 10), use the pre-patched version of soc.mak -->
$ cp debian-var/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/{{#var:MACHINE_NAME}}/soc.mak .
$ cp imx-mkimage/iMX8M/*.c imx-mkimage/iMX8M/*.sh imx-mkimage/scripts/*.sh .
}} <!-- end of DEBIAN_VERSION -->
}}
}}


Line 257: Line 289:
{{#ifeq: {{#var:SPL_SD_IMAGE_NAME}} | N/A  
{{#ifeq: {{#var:SPL_SD_IMAGE_NAME}} | N/A  
|<br>
|<br>
  $ sudo cp {{#var:U-BOOT_IMAGE_NAME}} /media/rootfs/opt/images/Debian
  $ sudo cp {{#var:U-BOOT_IMAGE_NAME|{{#var:U-BOOT_SD_IMAGE_NAME}}}} /media/rootfs/opt/images/Debian
|<br>
|<br>
  $ sudo cp SPL /media/rootfs/opt/images/Debian
  $ sudo cp SPL /media/rootfs/opt/images/Debian

Latest revision as of 23:22, 7 May 2023

Warning: This page is designed to be used with a 'release' URL parameter.

This page is using the default release RELEASE_BUSTER_V3.1_DART-MX8M.
To view this page for a specific Variscite SoM and software release, please follow these steps:

  1. Visit variwiki.com
  2. Select your SoM
  3. Select the software release
Build U-Boot from source code

Toolchain installation for out of builds

To install the toolchain, follow the Debian Toolchain installation guide.

Build U-Boot out of tree

Obtain sources:

$ git clone https://github.com/varigit/uboot-imx.git -b imx_v2019.04_4.19.35_1.1.0-var01
$ cd uboot-imx

Configure compilation environment:

$ export ARCH=arm64
$ export CROSS_COMPILE=~/debian_imx8mq-var-dart/toolchain/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-

Cleanup everything:

$ make mrproper

Select configuration:

$ make imx8m_var_dart_defconfig

Build U-Boot:

$ make -j$(nproc)

Build boot image

The final boot image contains multiple firmware files, as explained by NXP in IMX_LINUX_USERS_GUIDE.pdf (Search for "How to build imx-boot image by using imx-mkimage").

The following procedure builds the final image:

Create imx-boot-tools directory:

$ mkdir imx-boot-tools
$ cd imx-boot-tools


Download DDR and HDMI/DP firmware:

$ git clone https://github.com/varigit/debian-var.git -b debian_buster_var02
$ cp debian-var/variscite/imx8m-var-dart/imx-boot-tools/*ddr4* .
$ cp debian-var/variscite/imx8m-var-dart/imx-boot-tools/signed_* .

Download ATF:  

$ git clone https://github.com/nxp-imx/imx-atf -b imx_4.19.35_1.1.0
$ cd imx-atf
$ git apply ../debian-var/variscite/imx8mq-var-dart/imx-boot-tools/imx-atf/*
$ unset LDFLAGS
$ make PLAT=imx8mq bl31
$ cp build/imx8mq/release/bl31.bin ..
$ cd ..

Copy U-Boot binaries:

$ cp ../tools/mkimage mkimage_uboot
$ cp ../u-boot.bin .
$ cp ../u-boot-nodtb.bin ../spl/u-boot-spl.bin ../arch/arm/dts/fsl-imx8mq-var-dart.dtb .

Download imx-mkimage:

$ git clone https://github.com/nxp-imx/imx-mkimage -b imx_4.19.35_1.1.0 
$ cp debian-var/variscite/imx8m-var-dart/imx-boot-tools/imx8m-var-dart/soc.mak .
$ cp imx-mkimage/iMX8M/*.c imx-mkimage/iMX8M/*.sh imx-mkimage/scripts/*.sh .

Build boot image:

$ make -f soc.mak clean
$ make -f soc.mak SOC=iMX8MQ dtbs=fsl-imx8mq-var-dart.dtb MKIMG=./mkimage_imx8 PAD_IMAGE=./pad_image.sh CC=gcc OUTIMG=imx-boot-sd.bin flash_evk 

Install the built U-Boot on an SD card


$ sudo dd if=imx-boot-sd.bin of=/dev/sdX bs=1K seek=33 conv=fsync
(Replace /dev/sdX with the correct device)

If you want to use our recovery SD card to flash the built U-Boot to NAND flash/eMMC, then copy it to the appropriate location in the SD card:

$ sudo cp imx-boot-sd.bin /media/rootfs/opt/images/Debian

And eject the SD card gracefully from host machine.


Note: If you manually upgrade an existing U-Boot, and you have an old environment saved, it is a good idea to reset your environment to the new default (see Environment handling commands)

Update your U-Boot out of Debian tree

$ cd uboot-imx
$ git pull