ARM64 Linux Kernel

Yocto custom linux 환경 설정

ukjin 2025. 4. 26. 23:45
반응형

이 항목은 Yocto에서 바닐라 커널을 외부에서 받고 해당 소스를 바탕으로 빌드하여 qemu로 실행하는 과정이다.

 

먼저 git clone을 사용해 poky와 linux-kernel 소스를 받는다.

# poky 다운
mkdir -p YoctoTest
git clone --depth=1 git://git.yoctoproject.org/poky

# 바닐라 리눅스 커널 v6.12 LTS 다운로드
mkdir -p source 
cd source
git clone --branch v6.12 --depth 1 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

생성된 poky 버전을 확인한다.

ukjin@Ukjin:~/YoctoTest/poky$ cat meta-poky/conf/distro/poky.conf | grep DISTRO_VERSION
DISTRO_VERSION = "5.2"

이후 Yocto custom-kernel layer를 생성한다.

cd ~/YoctoTest
source poky/oe-init-build-env
cd ~/YoctoTest/poky
bitbake-layers create-layer meta-custom-kernel

추가로 bitbake version도 확인한다.

ukjin@Ukjin:~/YoctoTest$ bitbake --version
BitBake Build Tool Core version 2.12.0

위와 같이 구성되어 있다.

 

이제 아래 그림처럼 파일을 생성한다.

그리고 recipes-kernel/linux/linux-custom_6.12.bb 파일을 아래와 같이 작성한다. 나머지 파일들은 기본 값으로 사용한다.

DESCRIPTION = "Custom kernel using external source tree"
SECTION = "kernel"
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"

inherit kernel externalsrc
DEPENDS += "bc-native"

KERNEL_VERSION = "6.12"
COMPATIBLE_MACHINE = "qemuarm64"

EXTERNALSRC = "${TOPDIR}/../source/linux"
EXTERNALSRC_BUILD = "${WORKDIR}/build"

do_patch[noexec] = "1"

참고로 LIC_FILES_CHKSUM의 md5 값은 커널 소스코드의 COPYING 파일의 md5sum 값이다.

ukjin@Ukjin:~/YoctoTest/source/linux$ md5sum COPYING 
6bc538ed5bd9a7fc9398086aedcd7e46  COPYING

이후 ~/YoctoTest/build/conf/local.conf 파일에서 다음 항목을 수정한다.

# MACHINE을 qemux86-64에서 qemuarm64로 변경
# MACHIE ??= "qemux86-64"
MACHINE ??= "qemuarm64"

# 아래는 추가
PREFERRED_PROVIDER_virtual/kernel = "linux-custom"

새로운 터미널에서 다음 명령어를 실행한다.

cd ~/YoctoTest/
source poky/oe-init-build-env

bitbake core-image-minimal

 

bitbake 가 완료 되면 다음 명령어로 qemu를 실행한다.

runqemu core-image-minimal nographic

 

정상적으로 실행된 것을 확인한다.

 

이제 커널을 수정해서 정상적으로 반영되는지 확인해보자.

 

커널 소스의 Makefile에서 EXTRAVERSION을 추가하자.

 

ukjin@Ukjin:~/YoctoTest/source/linux$ git diff
diff --git a/Makefile b/Makefile
index 68a8faff2..5aa190081 100644
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@
 VERSION = 6
 PATCHLEVEL = 12
 SUBLEVEL = 0
-EXTRAVERSION =
+EXTRAVERSION = custom-linux
 NAME = Baby Opossum Posse
 
 # *DOCUMENTATION*

 

다시 bitbake linux-custom -C compile 명령어를 통해 빌드한 후 runqemu nographic 명령어로 실행하자.

custom-linux가 추가된 것을 확인할 수 있다. gabc218676eef는 git commit hash 값이 abc218676eef이라는 뜻이며, dirty는 커밋되지 않은 내용이 포함되어 있다는 뜻이다.

해당 변경사항을 커밋한 이후 다시 빌드해서 실행해보자.

 

# commit
ukjin@Ukjin:~/YoctoTest/source/linux$ git l
* f1a4c8524 (HEAD -> feature/review) add: Extraversion: custom-linux (2분 전) ukjin
* adc218676 (grafted, tag: v6.12) Linux 6.12 (5달 전) Linus Torvalds

 

bitbake -C compile linux-custom

 

runqemu nographic

정상적으로 다시 반영된 것을 확인할 수 있다.

반응형

'ARM64 Linux Kernel' 카테고리의 다른 글

Linux kernel coding style  (0) 2025.07.01
Linux Device Tree  (0) 2024.10.04