이 항목은 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 |