U-Boot 빌드
여기서는 U-Boot를 다운로드/빌드/로드하는 방법을 설명한다. IMXBSPPG 설명을 기반으로 독립 실행형 환경과 Yocto Project로 진행한다.
앞에서 이미 Yocto Project 설정을 했으므로, Yocto Project 설정 부분은 설명 없이 넘어간다.
독립 실행형 환경(standalone envirnoment)에서 U-Boot 빌드
작업 전 준비 사항
독립 실행형 환경에서 U-Boot를 빌드하려면, 먼저 호스트 시스템에 설치하여 컴파일하기 위한 개발용 SDK(툴, 툴 체인, 작은 rootfs 포함)를 생성해야 한다.
먼저 이미지를 생성 후, SDK를 생성하는 것을 권장한다. SDK부터 생성하려고 하면 에러가 발생할 수 있다(에러가 발생하는 이유를 찾지 못 했다).
예로, 아래과 같이 먼저 이미지를 생성하고,
$ DISTRO=fsl-imx-wayland MACHINE=imx8mp-lpddr4-evk source imx-setup-release.sh -b bld-full
$ bitbake imx-image-full
아래와 같이 SDK를 생성한다.
$ bitbake imx-image-full -c populate_sdk
SDK가 에러 없이 생성이 되면, 빌드 디렉토리의 tmp/deploy/sdk에서 .sh 파일을 빌드하려는 호스트 시스템으로 복사하고, 해당 파일을 실행하면 SDK를 설치할 수 있다. 기본 설치 위치는 /opt이지만, 호스트 시스템 어디에나 설치할 수 있다.
호스트 시스템에서 U-Boot 빌드 단계
▶ i.MX 8 SoC용 U-Boot를 빌드하기 전에 아래 커맨드를 실행하여 호스트 환경을 설정한다.
ⓐ 5.15-kirkstone를 사용하는 경우
$ source /opt/fsl-imx-wayland/5.15-kirkstone/environment-setup-armv8a-poky-linux
$ export ARCH=arm64
ⓑ 6.1-langdale를 사용하는 경우
source /opt/fsl-imx-wayland/6.1-langdale/environment-setup-armv8a-poky-linux
export ARCH=arm64
▶ 다음 커맨드를 실행하여 저장소에서 U-Boot 소스를 다운로드한다(현재 저장소에서 기본 버전은 lf_v2022.04이다).
$ git clone https://github.com/nxp-imx/uboot-imx
또는
$ git clone https://github.com/nxp-imx/uboot-imx -b lf_v2022.04
▶ 다운로드한 디렉토리로 이동하여, 다음 커맨드를 실행하여 U-Boot를 빌드한다.
$ cd uboot-imx
$ make distclean
$ make imx8mp_evk_defconfig
$ make
빌드시 아래와 같은 에러가 발생하면,
tools/mkeficapsule.c:21:10: fatal error: gnutls/gnutls.h: No such file or directory
다음 패키지를 설치하여 다시 make를 실행한다.
$ sudo apt-get install libgnutls28-dev
빌드가 완료되면 uboot-imx/ 디렉토리에 u-boot.bin이 생성된다.
imx-mkimage를 사용하여 imx-boot 이미지 빌드 단계
▶ 아래의 커맨드를 실행하여 저장소에서 imx-mkimage를 다운로드한다.
ⓐ 5.15-kirkstone를 사용하는 경우
$ git clone https://github.com/nxp-imx/imx-mkimage.git -b lf-5.15.32_2.0.0
ⓑ 6.1-langdale를 사용하는 경우
$ git clone https://github.com/nxp-imx/imx-mkimage.git -b lf-6.1.1_1.0.0
imx-mkimage 디렉토리가 생성되면서 파일들이 다운로드된다.
▶ 아래의 단계별로 필요한 파일들을 복사한다.
- u-boot/tools/mkimage를 imx-mkimage/iMX8M/mkimage_uboot로 이름을 변경하여 복사한다.
- u-boot/spl/u-boot-spl.bin을 imx-mkimage/iMX8M/로 복사한다.
- u-boot/u-boot-nodtb.bin을 imx-mkimage/iMX8M/로 복사한다.
- u-boot/arch/arm/dts/imx8mp-evk.dtb를 imx-mkimage/iMX8M/로 복사한다.
- Arm Trusted Firmware(imx-atf) bl31.bin을 imx-mkimage/iMX8M/로 복사한다(Yocto Project의 /tmp/deploy/images/imx8mp-lpddr4-evk/imx-boot-tools/bl31-imx8mp.bin를 이름을 변경하여 복사한다).
- firmware-imx 패키지의 signed_hdmi_imx8m.bin을 imxmkimage/iMX8M/로 복사한다(Yocto Project의 /tmp/deploy/images/imx8mp-lpddr4-evk/imx-boot-tools/signed_hdmi_imx8m.bin).
- firmware-imx 패키지의 lpddr4_pmu_train_1d_dmem_202006.bin, lpddr4_pmu_train_1d_imem_202006.bin, lpddr4_pmu_train_2d_dmem_202006.bin, lpddr4_pmu_train_2d_imem_202006.bin을 imx-mkimage/iMX8M/로 복사한다(Yocto Project의 /tmp/deploy/images/imx8mp-lpddr4-evk/imx-boot-tools/).
▶ 다음 커맨드를 실행하여 imx-boot-image를 생성한다.
make SOC=iMX8MP flash_evk
imx-boot-image인 flash.bin이 생성된다.
Yocto Project에서 U-boot 빌드와 로드
<build-dir>/tmp/work/imx8mp_lpddr4_evk-poky-linux/u-boot-imx/2022.04-r0/git/에서 필요한 작업 후 아래 커맨드를 수행한다.
$ bitbake -f -c compile u-boot-imx
$ bitbake -f -c deploy u-boot-imx
$ bitbake -f -c install u-boot-imx
$ bitbake -f -c compile imx-boot
$ bitbake -f -c install imx-boot
$ bitbake -f -c deploy imx-boot
빌드 후 <build-dir>/tmp/deploy/images/imx8mp-lpddr4-evk에서 부트 바이너리 imx-boot-imx8mp-lpddr4-evk-sd.bin-flash_evk를 찾을 수 있다.
'NXP i.MX SoC Family > Evaluation Kit for the i.MX 8M Plus' 카테고리의 다른 글
i.MX 8M Plus 개발 환경 구축 - U-Boot 사용자 지정 (0) | 2023.05.02 |
---|---|
i.MX 8M Plus 개발 환경 구축 - 커널 사용자 지정 (0) | 2023.04.24 |
i.MX 8M Plus 개발 환경 구축 - 커널 빌드 (0) | 2022.11.01 |
i.MX 8M Plus 개발 환경 구축 - 이미지 빌드 (0) | 2022.10.25 |
i.MX 8M Plus 개발 환경 구축 - Yocto Project 설정 (0) | 2022.10.14 |