Yocto Build U-Boot: Difference between revisions

From Variscite Wiki
No edit summary
(Build U-Boot out of Yocto tree: fix "make: ./../scripts/dtb_check.sh: Command not found" when building the boot image)
(68 intermediate revisions by 8 users not shown)
Line 1: Line 1:
<!-- Set release according to "release" parameter in URL and use RELEASE_MORTY_V1.0_VAR-SOM-MX6 as default
<!-- Set release according to "release" parameter in URL and use RELEASE_MORTY_V1.0_VAR-SOM-MX6 as default
--> {{#vardefine:RELEASE_PARAM|{{#urlget:release}}}} <!--
--> {{#vardefine:RELEASE_PARAM|{{#urlget:release|RELEASE_MORTY_V1.0_VAR-SOM-MX6}}}} <!--
--> {{#lst:Yocto_Platform_Customization|{{#var:RELEASE_PARAM|RELEASE_MORTY_V1.0_VAR-SOM-MX6}}}} <!--
--> {{#lst:Yocto_Platform_Customization|{{#var:RELEASE_PARAM}}}} <!--
--> {{#lst:B2QT_Platform_Customization|{{#var:RELEASE_PARAM}}}} <!--
--> {{PageHeader|Yocto Build U-Boot from source code}} {{DocImage|category1=Yocto|category2={{#var:HARDWARE_NAME}}}} __toc__
--> {{PageHeader|Yocto Build U-Boot from source code}} {{DocImage|category1=Yocto|category2={{#var:HARDWARE_NAME}}}} __toc__
= Toolchain installation for out of Yocto builds =
= Toolchain installation for out of Yocto builds =
Line 25: Line 26:


Build U-Boot:
Build U-Boot:
  $ make -j4
  $ make -j$(nproc)
|
|
Select one of the following configurations:
Select one of the following configurations:
Line 37: Line 38:
Build U-Boot:
Build U-Boot:


  $ make -j4
  $ make -j$(nproc)
}}
}}


Line 44: Line 45:
The final boot image contains multiple firmware files. The following procedure builds the final image.
The final boot image contains multiple firmware files. The following procedure builds the final image.


Create imx-boot-tools directory
Create imx-boot-tools directory:
  $ mkdir imx-boot-tools
  $ mkdir imx-boot-tools
  $ cd imx-boot-tools
  $ cd imx-boot-tools
Line 50: Line 51:
{{#ifeq: {{#var:SOC_FAMILY}} | imx8 |
{{#ifeq: {{#var:SOC_FAMILY}} | imx8 |


Download SC firmware
Obtain SC firmware:<br>
  $ git clone {{#var:META_VARISCITE_GIT}} -b {{#var:META_VARISCITE_BRANCH}}
{{#ifexpr: {{#var:YOCTO_VERSION}} < 3.1 |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:YOCTO_VERSION}} < 3.1 |, or download the pre-built binary by running:<br>
$ cp meta-variscite-imx/recipes-bsp/imx-sc-firmware/imx-sc-firmware/{{#var:SC_FIRMWARE}} scfw_tcm.bin
  $ wget {{#var:META_VARISCITE_GIT}}/raw/{{#var:META_VARISCITE_BRANCH}}/recipes-bsp/imx-sc-firmware/imx-sc-firmware/{{#var:SC_FIRMWARE}} -O scfw_tcm.bin|
.<br><br>}}


Download SECO firmware
{{#ifexpr: {{#rpos: {{#var:NXP_FIRMWARE}} | firmware-imx-8.1.1}} >= 0
| <!-- SECO is in NXP_FIRMWARE for original Sumo release -->&nbsp;
Download SECO firmware:
  $ wget {{#var:NXP_FIRMWARE_URL}}/{{#var:NXP_FIRMWARE}}.bin
  $ wget {{#var:NXP_FIRMWARE_URL}}/{{#var:NXP_FIRMWARE}}.bin
  $ chmod +x {{#var:NXP_FIRMWARE}}.bin
  $ chmod +x {{#var:NXP_FIRMWARE}}.bin
  $ ./{{#var:NXP_FIRMWARE}}.bin --auto-accept --force
  $ ./{{#var:NXP_FIRMWARE}}.bin
  $ cp {{#var:NXP_FIRMWARE}}/firmware/seco/{{#var:SECO_FIRMWARE}} .
  $ cp {{#var:NXP_FIRMWARE}}/firmware/seco/{{#var:SECO_FIRMWARE}} .
| <!-- SECO is in SECO_FIRMWARE for other releases --> &nbsp;
Download SECO firmware:
$ wget {{#var:SECO_FIRMWARE_URL}}/{{#var:SECO_FIRMWARE}}.bin
$ chmod +x {{#var:SECO_FIRMWARE}}.bin
$ ./{{#var:SECO_FIRMWARE}}.bin
$ cp {{#var:SECO_FIRMWARE}}/firmware/seco/mx8q*-ahab-container.img .
}}
|
|
Download DDR and HDMI firmware
Download DDR {{#ifeq: {{#var:SOC}}|mx8mq|and HDMI|}} firmware:
  $ wget {{#var:NXP_FIRMWARE_URL}}/{{#var:NXP_FIRMWARE}}.bin
  $ wget {{#var:NXP_FIRMWARE_URL}}/{{#var:NXP_FIRMWARE}}.bin
  $ chmod +x {{#var:NXP_FIRMWARE}}.bin
  $ chmod +x {{#var:NXP_FIRMWARE}}.bin
  $ ./{{#var:NXP_FIRMWARE}}.bin --auto-accept --force
  $ ./{{#var:NXP_FIRMWARE}}.bin
  $ cp {{#var:NXP_FIRMWARE}}/firmware/ddr/synopsys/lpddr4_pmu_train_* .
  $ cp {{#var:NXP_FIRMWARE}}/firmware/ddr/synopsys/* .
  $ cp {{#var:NXP_FIRMWARE}}/firmware/hdmi/cadence/signed_* .
  {{#ifeq: {{#var:SOC}}|mx8mq|$ cp {{#var:NXP_FIRMWARE}}/firmware/hdmi/cadence/signed_* .|}}
}}
}}


{{#ifeq: {{#var:SOC_FAMILY}}|imx8|
{{#ifeq: {{#var:SOC_FAMILY}}|imx8|
Download and build imx_mkimage
Download and build 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}}
  $ cd imx-mkimage
  $ cd imx-mkimage
Line 76: Line 87:
  $ cd ..
  $ cd ..
|
|
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}}
  $ cp imx-mkimage/iMX8M/*.c imx-mkimage/iMX8M/*.sh imx-mkimage/iMX8M/soc.mak {{#ifeq: {{#var:YOCTO_NAME}}|Morty||imx-mkimage/scripts/pad_image.sh}} .
  $ cp imx-mkimage/iMX8M/*.c imx-mkimage/iMX8M/*.sh {{#ifeq: {{#var:FSL_BSP_VERSION}}|L4.14.78-1.0.0_ga|imx-mkimage/iMX8M/soc.mak|}} {{#ifeq: {{#var:YOCTO_NAME}}|Morty||imx-mkimage/scripts/*.sh}} .
}}
}}


Download and build ATF
Download and build ATF:<!--
  $ git clone {{#var:NXP_IMX_GIT}}/imx-atf -b {{#var:NXP_IMX_BRANCH}}
Use VARISCITE_ATF_GIT from yocto platform customization if exists for Variscite hosted repo, else default to NXP:
  {{#ifeq: {{#var:SOC_FAMILY}}|imx8m|$ git clone {{#var:META_VARISCITE_GIT}} -b {{#var:META_VARISCITE_BRANCH}}|}}
-->
  $ cd imx-atf
  $ git clone {{#var:VARISCITE_ATF_GIT | {{#var:NXP_IMX_GIT}}/imx-atf}} -b {{#var:VARISCITE_ATF_BRANCH | {{#var:NXP_IMX_BRANCH}}}}  
  {{#ifeq: {{#var:SOC_FAMILY}}|imx8m|
$ git clone {{#var:META_VARISCITE_GIT}} -b {{#var:META_VARISCITE_BRANCH}}
{{#ifeq: {{#var:FSL_BSP_VERSION}}|L4.14.78-1.0.0_ga||
{{#if: {{#var:IMX_MKIMAGE_SOC_PATCH}}|
$ cd imx-mkimage
$ git apply ../{{#var:META_VARISCITE_REPO}}/{{#var:IMX_MKIMAGE_SOC_PATCH}}<!--
  -->{{#varexists:IMX_MKIMAGE_SOC_PATCH_1 |
<br>$ git apply ../{{#var:META_VARISCITE_REPO}}/{{#var:IMX_MKIMAGE_SOC_PATCH_1}}
}}<!--
  -->{{#varexists:IMX_MKIMAGE_SOC_PATCH_2 |
<br>$ git apply ../{{#var:META_VARISCITE_REPO}}/{{#var:IMX_MKIMAGE_SOC_PATCH_2}}
}}
$ cp iMX8M/soc.mak ..
$ cd ..
|
$ cp {{#var:META_VARISCITE_REPO}}/recipes-bsp/imx-mkimage/files/soc.mak .}}
}}
|
}}
  $ cd imx-atf {{#if: {{#var:VARISCITE_ATF_GIT}}||&nbsp;
{{#ifeq: {{#var:SOC_FAMILY}}| imx8m |
{{#ifeq: {{#var:FSL_BSP_VERSION}}| L4.14.78-1.0.0_ga | $ git apply ../{{#var:META_VARISCITE_REPO}}/recipes-bsp/imx-atf/imx-atf/* |
{{#ifeq: {{#var:SOC}}|mx8mn| $ git apply ../{{#var:META_VARISCITE_REPO}}/recipes-bsp/imx-atf/imx-atf/* |
{{#ifeq: {{#var:SOC}}|mx8mp| $ git apply ../{{#var:META_VARISCITE_REPO}}/recipes-bsp/imx-atf/imx-atf/* |
{{#ifeq: {{#var:SOC}}|mx8mm| $ git apply ../{{#var:META_VARISCITE_REPO}}/recipes-bsp/imx-atf/imx-atf/imx8mm* ../{{#var:META_VARISCITE_REPO}}/recipes-bsp/imx-atf/imx-atf/imx8m-* |
{{#ifeq: {{#var:SOC}}|mx8mq| $ git apply ../{{#var:META_VARISCITE_REPO}}/recipes-bsp/imx-atf/imx-atf/imx8m-*|}} }} }} }} }} }} }}
  $ source {{#var:TOOLCHAIN_LOCATION}}
  $ source {{#var:TOOLCHAIN_LOCATION}}
  $ export LDFLAGS=
  $ unset LDFLAGS
{{#ifeq: {{#var:SOC_FAMILY}}|imx8m|$ git apply ../meta-variscite-imx/recipes-bsp/imx-atf/imx-atf/*|}}
  $ 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 ..


Copy u-boot binaries
Copy U-Boot binaries:
  $ cp ../tools/mkimage mkimage_uboot
  $ cp ../tools/mkimage mkimage_uboot
  $ cp ../u-boot.bin .
  $ cp ../u-boot.bin .
  {{#ifeq: {{#var:SOC_FAMILY}}|imx8m|$ cp ../u-boot-nodtb.bin ../spl/u-boot-spl.bin ../arch/arm/dts/{{#var:DEFAULT_DTB}} .|}}
  {{#ifeq: {{#var:SOC_FAMILY}}|imx8m|
   
{{#ifeq: {{#var:FSL_BSP_VERSION}}| L4.14.78-1.0.0_ga |
$ cp ../u-boot-nodtb.bin ../spl/u-boot-spl.bin ../arch/arm/dts/{{#var:U-BOOT_DTB_FILE|{{#var:DEFAULT_DTB}}}} .
|
{{#ifeq: {{#var:SOC}}|mx8mm|
$ cp ../u-boot-nodtb.bin ../spl/u-boot-spl.bin ../arch/arm/dts/{{#var:U-BOOT_DTB_DART}} ../arch/arm/dts/{{#var:U-BOOT_DTB_SOM}} {{#varexists:U-BOOT_DTB_SOM_10 | ../arch/arm/dts/{{#var:U-BOOT_DTB_SOM_10}} |}} .
|
{{#ifeq: {{#var:SOC}}|mx8mn|
$ cp ../u-boot-nodtb.bin ../spl/u-boot-spl.bin ../arch/arm/dts/{{#var:U-BOOT_DTB_SOM}} .
|
{{#ifeq: {{#var:SOC}}|mx8mp|
$ cp ../u-boot-nodtb.bin ../spl/u-boot-spl.bin ../arch/arm/dts/{{#var:U-BOOT_DTB_DART}} ../arch/arm/dts/{{#var:U-BOOT_DTB_SOM}} .
|
 
$ cp ../u-boot-nodtb.bin ../spl/u-boot-spl.bin ../arch/arm/dts/{{#var:U-BOOT_DTB_FILE|{{#var:DEFAULT_DTB}}}} .
}} }} }} }}
|
  $ cp ../spl/u-boot-spl.bin .
}}
 
{{#ifeq: {{#var:SOC_FAMILY}}|imx8|
{{#ifeq: {{#var:SOC_FAMILY}}|imx8|
Build boot image
{{#ifeq: {{#var:SOC}}|mx8qxp|
Depending on i.MX8QXP SOC revision different instructions should be used to build boot image.<br>
The SOC revision is printed by u-boot as follows
CPU:  Freescale i.MX8QXP revB A35 at 1200 MHz at 36C
or
CPU:  Freescale i.MX8QXP revC A35 at 1200 MHz at 36C
 
Build boot image for SOC revision B:
$ make -f soc.mak clean
$ make -f soc.mak SOC={{#var:IMX_MKIMAGE_SOC}} REV=B0 MKIMG=./mkimage_imx8 PAD_IMAGE=./pad_image.sh flash_spl
$ mv flash.bin {{#var:U-BOOT_SD_IMAGE_NAME}}
<br>
Build boot image for SOC revision C:
  $ make -f soc.mak clean
  $ make -f soc.mak clean
  $ make -f soc.mak SOC={{#var:IMX_MKIMAGE_SOC}} MKIMG=./mkimage_imx8 PAD_IMAGE=./pad_image.sh flash
  $ make -f soc.mak SOC={{#var:IMX_MKIMAGE_SOC}} REV=C0 MKIMG=./mkimage_imx8 PAD_IMAGE=./pad_image.sh flash_spl
  $ mv flash.bin {{#var:U-BOOT_SD_IMAGE_NAME}}
  $ mv flash.bin {{#var:U-BOOT_SD_IMAGE_NAME}}
|
|
Build boot image
Build boot image:
  $ make -f soc.mak clean  
$ make -f soc.mak clean
$ make -f soc.mak SOC={{#var:IMX_MKIMAGE_SOC}} MKIMG=./mkimage_imx8 PAD_IMAGE=./pad_image.sh flash_spl
$ mv flash.bin {{#var:U-BOOT_SD_IMAGE_NAME}}
}}
|
{{#ifeq: {{#var:SOC}}|mx8mq|
Build boot image:
$ make -f soc.mak clean
$ make -f soc.mak SOC={{#var:IMX_MKIMAGE_SOC}} dtbs={{#var:U-BOOT_DTB_FILE|{{#var:DEFAULT_DTB}}}} MKIMG=./mkimage_imx8 PAD_IMAGE=./pad_image.sh CC=gcc OUTIMG={{#var:U-BOOT_SD_IMAGE_NAME}} flash_evk
|
{{#ifeq: {{#var:SOC}}|mx8mm|
{{#ifeq: {{#var:FSL_BSP_VERSION}}| L4.14.78-1.0.0_ga |
Build boot image:
  $ make -f soc.mak clean
  $ make -f soc.mak SOC={{#var:IMX_MKIMAGE_SOC}} dtbs={{#var:DEFAULT_DTB}} MKIMG=./mkimage_imx8 PAD_IMAGE=./pad_image.sh CC=gcc OUTIMG={{#var:U-BOOT_SD_IMAGE_NAME}} flash_evk
  $ make -f soc.mak SOC={{#var:IMX_MKIMAGE_SOC}} dtbs={{#var:DEFAULT_DTB}} MKIMG=./mkimage_imx8 PAD_IMAGE=./pad_image.sh CC=gcc OUTIMG={{#var:U-BOOT_SD_IMAGE_NAME}} flash_evk
|
Build boot image:
$ make -f soc.mak clean
$ make -f soc.mak SOC={{#var:IMX_MKIMAGE_SOC}} dtbs="{{#var:U-BOOT_DTB_DART}} {{#var:U-BOOT_DTB_SOM}} {{#var:U-BOOT_DTB_SOM_10}}" MKIMG=./mkimage_imx8 PAD_IMAGE=./pad_image.sh CC=gcc OUTIMG={{#var:U-BOOT_SD_IMAGE_NAME}} flash_lpddr4_ddr4_evk
}}
}}
}}
|
{{#ifeq: {{#var:SOC}}|mx8mn|
Build boot image:
$ make -f soc.mak clean
$ make -f  soc.mak  SOC={{#var:IMX_MKIMAGE_SOC}}  dtbs="{{#var:U-BOOT_DTB_SOM}}  {{#var:U-BOOT_DTB_SOM_10}}" MKIMG=./mkimage_imx8 PAD_IMAGE=./pad_image.sh CC=gcc OUTIMG={{#var:U-BOOT_SD_IMAGE_NAME}} flash_ddr4_evk
|
{{#ifeq: {{#var:SOC}}|mx8mp|
Build boot image:
$ make -f soc.mak clean
$ make  -f soc.mak  SOC={{#var:IMX_MKIMAGE_SOC}}  dtbs="{{#var:U-BOOT_DTB_DART}}  {{#var:U-BOOT_DTB_SOM}}"  MKIMG=./mkimage_imx8 PAD_IMAGE=./pad_image.sh  CC=gcc OUTIMG={{#var:U-BOOT_SD_IMAGE_NAME}} flash_evk
|}} }} }} }} }} }}


= Install the built U-Boot on an SD card =
= Install the built U-Boot on an SD card =
Line 117: Line 210:
|<br>
|<br>
  $ sudo dd if={{#var:U-BOOT_IMAGE_NAME}} of=/dev/sdX bs=1K seek=1; sync
  $ sudo dd if={{#var:U-BOOT_IMAGE_NAME}} of=/dev/sdX bs=1K seek=1; sync
(Replace /dev/sdX with the correct device)
|<br>
|<br>
  $ sudo dd if=SPL of=/dev/sdX bs=1K seek=1; sync
  $ sudo dd if=SPL of=/dev/sdX bs=1K seek=1; sync
  $ sudo dd if=u-boot.img of=/dev/sdX bs=1K seek=69; sync
  $ sudo dd if=u-boot.img of=/dev/sdX bs=1K seek=69; sync
(Replace /dev/sdX with the correct device)
}}
}}
}}
}}
(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:
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:
{{#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/...
  $ sudo cp {{#var:U-BOOT_IMAGE_NAME}} /media/rootfs/opt/images/
|<br>
|<br>
  $ sudo cp SPL /media/rootfs/opt/images/...
  $ sudo cp SPL /media/rootfs/opt/images/
  $ sudo cp u-boot.img /media/rootfs/opt/images/...
  $ sudo cp u-boot.img /media/rootfs/opt/images/
}}
}}
And eject the SD card gracefully from host machine.
And eject the SD card gracefully from host machine.

Revision as of 11:49, 24 July 2022

Yocto Build U-Boot from source code

Toolchain installation for out of Yocto builds

To install the toolchain, follow Yocto Toolchain installation.

Build U-Boot out of Yocto tree

Obtain sources:

$ git clone https://github.com/varigit/uboot-imx.git -b imx_v2015.04_4.1.15_1.1.0_ga_var03
$ cd uboot-imx

Configure compilation environment:

$ source /opt/fslc-x11/2.2.1/environment-setup-armv7at2hf-neon-fslc-linux-gnueabi

Cleanup everything:

$ make mrproper

Select one of the following configurations:

For booting from SD card/eMMC:
$ make mx6var_som_sd_defconfig

For booting from NAND flash:
$ make mx6var_som_nand_defconfig

Build U-Boot:

$ make -j$(nproc)


Install the built U-Boot on an SD card


$ sudo dd if=SPL of=/dev/sdX bs=1K seek=1; sync
$ sudo dd if=u-boot.img of=/dev/sdX bs=1K seek=69; sync

(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 SPL /media/rootfs/opt/images/…
$ sudo cp u-boot.img /media/rootfs/opt/images/…

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 Yocto tree

$ git pull