Debian Build U-Boot: Difference between revisions

From Variscite Wiki
(mx8qm: fix wget url for seco firmware)
No edit summary
 
(11 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|}}}} <!--
--> {{#vardefine:DEBIAN_GIT_WGET|{{#replace:{{#var:DEBIAN_GIT}}|.git|}}}} <!--
Line 21: 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 114: Line 114:
  $ 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}}
}}
}}


<!-- ATF firmware -->
<!-- ATF firmware -->
Download {{#ifexpr: {{#var:DEBIAN_VERSION}} >= 11 |and build}} ATF:<!--  
Download {{#ifexpr: {{#var:DEBIAN_VERSION}} >= 11 |and build}} ATF:<!--
Use VARISCITE_ATF_GIT from yocto platform customization if exists for Variscite hosted repo, else default to NXP:
- Buster commonly provides the ATF firmware pre-built in the variscite/<MACHINE>/imx-boot-tools(-b0), except for the mx8m
- Bullseye commonly builds the ATF from scratch, except for the mx8mp and mx8mm lf-5.4.y
- In the future (>= Bullseye), the ATF firmware will most likely be built by the build script
-->
-->
{{#ifexpr: {{#var:DEBIAN_VERSION}} > 10
{{#ifexpr: {{#expr:{{#var:DEBIAN_VERSION}} < 11 and {{#switch:{{#var:SOC}}|mx8m=0|#default=1}}}}
| <!-- For Bullyese (Debian 11) and above -->
or {{#rpos:{{#var:SOC}}|8mp}} >= 0
&nbsp;
or {{#expr:{{#rpos:{{#var:SOC}}|8mm}} >= 0 and {{#rpos:{{#var:KERNEL_BRANCH}}|lf-5.4.y}} >= 0}}
$ git clone {{#var:VARISCITE_ATF_GIT}} -b {{#var:VARISCITE_ATF_BRANCH}}  
$ cd imx-atf
$ unset LDFLAGS
$ make PLAT={{#var:IMX_ATF_PLAT}} bl31
$ cp build/{{#var:IMX_ATF_PLAT}}/release/bl31.bin ..
$ cd ..
| <!-- For Buster (Debian 10) -->
| <!-- For Buster (Debian 10) -->
{{#switch:{{#var:SOC}}
{{#switch:{{#var:SOC}}
Line 139: Line 136:
| #default=
| #default=
&nbsp;
&nbsp;
  $ wget {{#var:DEBIAN_GIT_WGET}}/raw/{{#var:DEBIAN_BRANCH}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/bl31-{{#var:SOC}}.bin -O bl31.bin
  {{#vardefine:DEBIAN_SRC_ATF_PATH|variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/bl31-i{{#var:SOC}}.bin}}
{{#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}}
}}
}}
| <!-- For Bullyese (Debian 11) and above -->
&nbsp;
$ git clone {{#var:VARISCITE_ATF_GIT|{{#var:NXP_IMX_GIT}}/imx-atf}} -b {{#var:VARISCITE_ATF_BRANCH|{{#var:NXP_IMX_BRANCH}}}}
$ 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
$ make PLAT={{#var:IMX_ATF_PLAT}} bl31
$ cp build/{{#var:IMX_ATF_PLAT}}/release/bl31.bin ..
$ cd ..
}}
}}


Line 186: Line 194:
| #default=
| #default=
Download imx-mkimage:
Download imx-mkimage:
  $ git clone {{#var:NXP_IMX_GIT}}/imx-mkimage -b {{#var:NXP_IMX_BRANCH}} <!--  
  $ git clone {{#var:NXP_IMX_GIT}}/imx-mkimage -b {{#var:NXP_IMX_BRANCH}}  
Patch imx-mkimage for mx8mn, mx8mm, mx8mp, mx8mq  
<!-- Patch imx-mkimage for mx8mn, mx8mm, mx8mp, mx8mq -->
-->{{#ifexpr: {{#var:DEBIAN_VERSION}} >= 11
{{#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 -->
  | <!-- For Bullseye (Debian 11) and above, use patches located at debian-var (except for mx8mm and kernel lf-5.4.y) -->
  $ git clone {{#var:DEBIAN_GIT}} -b {{#var:DEBIAN_BRANCH}}
  {{#varexists:HAS_DEBIAN_CLONE||$ git clone {{#var:DEBIAN_GIT}} -b {{#var:DEBIAN_BRANCH}}}}
  $ cd imx-mkimage
  $ cd imx-mkimage
  $ git apply ../{{#var:DEBIAN_GIT}}/{{#var:IMX_MKIMAGE_SOC_PATCH}}<!--
  $ 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 |
   -->{{#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}}
  <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 |
   -->{{#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}}
  <br>$ git apply ../debian-var/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/imx-boot/{{#explode:{{#var:IMX_MKIMAGE_SOC_PATCH_2}}|/|-1}}
  }}
  }}
  $ cd ..
  $ cd ..
  | <!-- For Buster (Debian 10), overwrite soc.mak (only for mx8mn) -->
  $ cp imx-mkimage/iMX8M/*.c imx-mkimage/iMX8M/*.sh imx-mkimage/iMX8M/soc.mak imx-mkimage/scripts/*.sh .
  {{#switch:{{#var:SOC}}
  {{#ifexpr: {{#var:YOCTO_VERSION}} >= 3.3 |$ cp dtb_check.sh ../scripts/|}}
$ git clone {{#var:DEBIAN_GIT}} -b {{#var:DEBIAN_BRANCH}}
| <!-- For Buster (Debian 10), use the pre-patched version of soc.mak -->
  |mx8mn= $ cp {{#var:DEBIAN_GIT}}/variscite/{{#var:MACHINE_NAME}}/imx-boot-tools/{{#var:MACHINE_NAME}}/soc.mak imx-mkimage/iMX8M/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 -->
  }} <!-- end of DEBIAN_VERSION -->
$ cp imx-mkimage/iMX8M/*.c imx-mkimage/iMX8M/*.sh imx-mkimage/iMX8M/soc.mak . <!-- dtb-check.sh -->
}}
}}



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