728x90
반응형
정보
IMXBSPPG
Rev. LF5.15.5_1.0.0, 31 March 2022를 기준으로 작성
Chapter 2 Porting Kernel
2.1 Introduction
이 장에서는 독립 실행형(standalone) 환경과 Yocto Project로 하는 두 가지 방법으로 i.MX 커널을 다운로드, 빌드, 로드하는 방법을 설명한다.
2.1.1 How to build and load Kernel in standalone environment
독립 실행형 환경에서 Kernel을 빌드하려면, 먼저 호스트 시스템에 배치하여 컴파일하기 위한 개발 SDK를 생성한다. 여기에는 툴, 툴 체인, 작은 rootfs가 포함된다.
- 아래의 명령을 사용하여 Yocto Project 빌드 환경에서 SDK를 생성한다. Yocto Project 빌드 환경을 설정하려면, i.MX Yocto Project User's Guide (IMXLXYOCTOUG)의 단계를 따른다. 아래의 명령에서 Target-Machine을 빌드하려는 시스템으로 설정한다. i.MX Yocto Project User's Guide (IMXLXYOCTOUG)의 "Build configurations" 섹션을 참조한다. populate_sdk는 Yocto Project를 사용하지 않고 독립 실행형 환경을 설정하는 스크립트 파일을 생성한다. 이 SDK는 현재 릴리즈에서 최신 헤더, 툴 체인, 툴을 선택하도록 각 릴리즈에 대해 업데이트되어야 한다.
유효한 DISTRO 옵션은 i.MX Yocto Project User's Guide (IMXLXYOCTOUG)의 "Build configurations" 섹션을 참조한다.DISTRO=Target-Distro MACHINE=Target-Machine bitbake core-image-minimal -c populate_sdk
- BitBake가 실행된 빌드 디렉토리에서, tmp/deploy/sdk의 .sh 파일을 빌드할 호스트 시스템으로 복사하고 SDK를 인스톨하기 위해 스크립트를 실행한다. 기본 설치 위치는 /opt 이지만, 호스트 시스템의 어디에나 배치할 수 있다.
Arm-v7A (32-bit)와 Arm-v8A (64-bit) 툴 체인 스크립트와 환경은 아래와 같다 :
- i.MX 6
Toolchain : environment-setup-cortexa9thf-vfp-neon-poky-linux-gnueabi Linux_Config: imx_v7_defconfig ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi-
- i.MX 7
Toolchain : environment-setup-cortexa7t2hf-neon-poky-linux-gnueabi Linux_Config: imx_v7_defconfig ARCH=arm CROSS_COMPILE=arm-poky-linux-gnueabi-
- i.MX 8
Toolchain : environment-setup-cortexa53-crypto-poky-linux Linux_Config: imx_v8_defconfig ARCH=arm64 CROSS_COMPILE=aarch64-poky-linux-
아래는 호스트 시스템에서 Kernel 소스를 독립 실행형으로 빌드하는 단계이다 :
- 호스트 터미널 윈도우에서 툴 체인 환경을 설정한다.
환경 변수는 environment-setup-<toolchain> 스크립트 실행 후 터미널 윈도우에서 생성된다. i.MX 6, i.MX 7, i.MX 8 툴 체인에 대해서 위의 정보를 참조한다.
$ source <toolchain install directory>/environment-setup-<toolchain script>
i.MX 8의 예 :
$ source /opt/fsl-imx-wayland/5-15-honister/environment-setup-aarch64-poky-linux $ echo $LDFLAGS -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed $ unset LDFLAGS // Remove env variable LDFLAGS
대상 i.MX 8에 대해 새로운 환경 변수가 올바르게 설정되었는지 확인한다.
$ echo $ARCH arm64 $ echo $CROSS_COMPILE aarch64-poky-linux-
- Linux 소스 코드 가져오기
$ git clone https://source.codeaurora.org/external/imx/linux-imx
git cloned repository(git가 clone할 리포지토리)에는 모든 NXP 릴리즈가 포함되어 있다. 다른 릴리즈로 작업하려면, "git tag" 명령으로 사용 가능한 릴리즈를 표시하고 "git checkout <tag name>"를 사용하여 해당 버전으로 이동한다.
예를 들어 lf-5.15.5-1.0.0 스냅샷을 선택하려면 : $ git checkout -b lf-5.15.5-1.0.0lf-5.15.5-1.0.0
- 구성을 초기화
$ cd linux-imx $ make distclean // delete all generated files $ make imx_v8_defconfig // configuration for i.MX 8 // see above for i.MX 6 and i.MX 7 configuration name
- 커널 소스 빌드
$ make -j $(nproc) // -j: number of simultaneous jobs // use available Host CPUs for number $ Linux kernel generated files in directory arch/arm64/boot // For i.MX 6 or i.MX 7, arch/arm/ boot dts Image Image.gz install.sh Makefile
기본으로 i.MX U-Boot는 첫 번째 FAT 파티션에서 이미지와 디바이스 트리 blob(binary large object)을 로드한다. 사용자는 이미지를 이 파티션에 복사할 수 있다. 또는 U-Boot 로딩을 위해서 이미지를 RAW 주소로 플래시(플래시 메모리에 저장)할 수 있다.
빌드에서 생성된 커널을 플래시(플래시 메모리에 저장)하려면 다음 명령을 실행한다 :
$ sudo dd if=<zImageName> of=/dev/sd<partition> bs=512 seek=2048 conv=fsync && sync
주의
i.MX 8의 경우, 압축된 이미지는 U-Boot에서 지원하지 않으며 Image.gz가 아니라 Image 파일을 사용해야 한다.
빌드에서 생성된 디바이스 트리를 플래시(플래시 메모리에 저장)하려면 아래의 명령을 실행한다 :
$ sudo dd if=<DevicetreeName>.dtb of=/dev/sd<partition> bs=512 seek=20480 conv=fsync
주의
i.MX 8QuadMax, i.MX 8QuadXPlus의 경우, SD 카드의 처음 6MB 이후에 커널 이미지와 DTB를 플래시(플래시 메모리에 저장)해야 한다.
2.1.2 How to build and load Kernel in Yocto Project
Yocto Project에서 커널 변경 사항을 통합하려면, 아래의 단계를 수행한다 :
- 매니페스트(manifest) 브랜치나 릴리즈 레이어의 README 지침에 따라 Yocto Project에서 i.MX 레퍼런스 보드에 해당되는 SoC를 빌드하기 위한 빌드 환경을 설정한다. 여기에는 Yocto Project 메타 데이터와 빌드 환경 설정을 위한 imx-setup-release를 다운로드하기 위한 리포지토리(저장소) 초기화와 리포지토리 동기화 사용이 포함된다.
- 해당하는 SoC에 대한 레퍼런스 보드 커널을 빌드한다. 아래는 예이다. 처음으로, 이 빌드는 필요한 모든 툴과 종속 관계의 것 들을 빌드하기 때문에 긴 시간이 걸린다.
$ MACHINE=imx6qsabresd bitbake linux-imx
- 사용자 보드에 대한 커널 변경 사항을 보관할 사용자 정의 레이어를 만든다. 사용자 정의 레이어를 생성하는 더 간단한 예로 기존 i.MX 데모의 XBMC나 IOTG를 살펴본다. 사용자 정의 레이어는 <build-dir>/conf 디렉토리의 bblayer.conf에 추가하여 통합된다. 레이어에는 레이어 이름을 설명하는 conf/layer.conf 파일이 있어야 한다.
- 사용자 보드 SoC에 해당되는 기존 머신 파일을 사용자 정의 레이어에 복사한다 :
$ cp sources/meta-freescale/conf/machine/imx6qsabresd.conf <new layer>/conf/machine/<custom_name>.conf
- KERNEL_DEVICETREE에 나열된 디바이스 트리로 머신 구성 파일을 편집한다.
- 아래 줄을 conf/local.conf에 추가하여 linux-imx로 빌드할 커널의 기본 버전을 변경한다. 여러 커널 제공자가 있어서, 이로 인해 linux-imx 버전을 지정해서 사용해야 한다.
PREFERRED_PROVIDER_virtual/kernel_<custom_name> = "linux-imx"
- 사용자 머신 빌드
<build-dir>/tmp/work/<custom_name>-poky-linux-gnueabi/linux-imx/<version>을 확인하여 빌드 출력을 찾는다. 또한 <build-dir>/tmp/deploy/images/<custom_name>에서 커널 바이너리를 찾는다.$ MACHINE=<custom_name> bitbake linux-imx
- 커널 패치와 사용자 정의 defconfig는 linux-imx_%.bbappend에서 제공되며 이러한 행을 예제로 patch1.patch은 sources/<custom_layer>/recipes-kernel/linux-imx/files에 배치된 패치이다.
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" SRC_URI_append = "file://patch1.patch file://custom_defconfig"
728x90
반응형
'NXP i.MX SoC Family > i.MX BSP Porting Guide' 카테고리의 다른 글
i.MX BSP Porting Guide - Porting System Controller Firmware (0) | 2022.07.01 |
---|---|
i.MX BSP Porting Guide - Porting U-Boot (0) | 2022.06.29 |
i.MX BSP Porting Guide - Supporting Cameras with MIPI-CSI (0) | 2022.06.29 |
i.MX BSP Porting Guide - Introduction (0) | 2022.06.29 |
i.MX BSP Porting Guide (0) | 2022.06.29 |