라즈베리파이 커널 빌드는 네이티브 빌드와 크로스 컴파일 빌드로 구분된다. 이 글에서는 라즈베리파이에서 네이티브 툴체인으로 로컬에서 자체 빌드하는 방법에 대해 알아본다.
빌드 패키지 설치
먼저, git 을 포함한 커널 빌드에 필요한 몇 가지 도구와 라이브러리를 설치해야 한다. 터미널에서 다음 명령을 실행하여 필수 도구를 설치한다.
sudo apt update
sudo apt install git bc bison flex libssl-dev make
커널 내려받기(download)
라즈베리파이 github로 부터 linux kernel 소스를 git clone
으로 다운 받는다.
git clone --depth=1 https://github.com/raspberrypi/linux
소스 선택
특정 branch를 받으려면 --branch
를 지정하여 다운 받는다.
git clone --depth=1 --branch <branch> https://github.com/raspberrypi/linux
사용 가능한 branch에 대한 정보는 원본 GitHub 저장소를 참조한다.
커널 구성(config)
기본 구성
먼저 Raspberry Pi 모델에 따라 다음 명령을 실행하여 기본 구성을 준비한다.
Raspberry Pi 1, Zero 및 Zero W, Raspberry Pi 컴퓨팅 모듈 1 기본(32비트 전용) 빌드 구성의 경우:
cd linux
KERNEL=kernel
make bcmrpi_defconfig
Raspberry Pi 2, 3, 3+ 및 Zero 2W와 Raspberry Pi 컴퓨팅 모듈 3 및 3+ 기본 32비트 빌드 구성의 경우:
cd linux
KERNEL=kernel7
make bcm2709_defconfig
Raspberry Pi 4 및 400 및 Raspberry Pi Compute Module 4 기본 32비트 빌드 구성의 경우:
cd linux
KERNEL=kernel7l
make bcm2711_defconfig
Raspberry Pi 3, 3+, 4, 400 및 Zero 2W와 Raspberry Pi 컴퓨팅 모듈 3, 3+, 4 기본 64비트 빌드 구성의 경우:
cd linux
KERNEL=kernel8
make bcm2711_defconfig
Raspberry Pi 5 기본 64비트 빌드 구성의 경우:
cd linux
KERNEL=kernel_2712
make bcm2712_defconfig
LOCALVERSION
설정
.config 파일에서 CONFIG_LOCALVERSION 을 수정하여 설정한다.
CONFIG_LOCALVERSION="-v8-local"
커널 빌드(build)
커널, 모듈 및 장치 트리 Blob을 빌드하고 설치합니다. 이 단계는 사용 중인 Raspberry Pi 모델에 따라 시간이 오래 걸릴 수 있습니다. 32비트 커널의 경우:
make -j4 zImage modules dtbs
sudo make modules_install
# Choose one of the following based on the kernel version
# For kernels up to 6.4:
sudo cp arch/arm/boot/dts/*.dtb /boot/firmware/
# For kernel 6.5 and above:
sudo cp arch/arm/boot/dts/broadcom/*.dtb /boot/firmware/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/firmware/overlays/
sudo cp arch/arm/boot/dts/overlays/README /boot/firmware/overlays/
sudo cp arch/arm/boot/zImage /boot/firmware/$KERNEL.img
64비트 커널의 경우:
make -j4 Image.gz modules dtbs
sudo make modules_install
sudo cp arch/arm64/boot/dts/broadcom/*.dtb /boot/firmware/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* /boot/firmware/overlays/
sudo cp arch/arm64/boot/dts/overlays/README /boot/firmware/overlays/
sudo cp arch/arm64/boot/Image.gz /boot/firmware/$KERNEL.img
커널 설치가 완료되었으면 reboot
하여 새 커널로 부팅한다.
sudo reboot
재부팅 후 버전 확인을 해본다.
raspi@raspberrypi:~ $ uname -a
Linux raspberrypi 6.6.23-v8-local+ #1 SMP PREEMPT Thu Apr 4 13:10:34 KST 2024 aarch64 GNU/Linux