Yocto Build U-Boot: Difference between revisions

From Variscite Wiki
No edit summary
(Fix empty lines)
(46 intermediate revisions by 6 users not shown)
Line 44: Line 44:
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 50:
{{#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}}
Either build it by following the {{Varlink|Yocto_Build_SCFW|{{#var:RELEASE_LINK}}|Build SCFW from source code}} page, or just download the pre-built binary by running:
$ 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


Download SECO firmware
Download SECO firmware:
{{#ifeq: {{#var:HARDWARE_NAME}} | VAR-SOM-MX8X | {{#ifeq: {{#var:MACHINE_NAME_B0}} | imx8qxpb0-var-som |
<br>
$ 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/mx8qx*-ahab-container.img .
|
<br>
  $ 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}} .
}}
|
|
Download DDR and HDMI firmware
<br>
  $ 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/seco/{{#var:SECO_FIRMWARE}} .
  $ cp {{#var:NXP_FIRMWARE}}/firmware/hdmi/cadence/signed_* .
}}
|
Download DDR {{#ifeq: {{#var:SOC}}|mx8mq|and HDMI|}} firmware:
$ wget {{#var:NXP_FIRMWARE_URL}}/{{#var:NXP_FIRMWARE}}.bin
$ chmod +x {{#var:NXP_FIRMWARE}}.bin
$ ./{{#var:NXP_FIRMWARE}}.bin
  $ cp {{#var:NXP_FIRMWARE}}/firmware/ddr/synopsys/* .
  {{#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 92:
  $ 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/pad_image.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}}
$ 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: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}} ../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}} ../arch/arm/dts/{{#var:U-BOOT_DTB_SOM_10}} .
|
{{#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: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 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=B0 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}}
<br>
Build boot image for SOC revision C:
$ make -f soc.mak clean
$ 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}}
|
Build boot image:
$ 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:DEFAULT_DTB}} MKIMG=./mkimage_imx8 PAD_IMAGE=./pad_image.sh CC=gcc OUTIMG={{#var:U-BOOT_SD_IMAGE_NAME}} flash_evk
|
|
Build boot image
{{#ifeq: {{#var:SOC}}|mx8mm|
  $ make -f soc.mak clean  
{{#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 =

Revision as of 21:55, 17 November 2020

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 -j4


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