raspberry pi 4 커널 빌드 및 교체 시 주의 사항
config 생성 및 커널 이미지 빌드는 아래 스크립트의 명령어 참조
아래와 같이 OUTPUT를 O 옵션으로 지정하면, 커널 코드 내 변경 없이 깔끔하게 빌드할 수 있는 장점이 있음
윈도우 wsl에서 cross compile 환경으로 빌드를 하다보니, 가이드 대로 하는게 불가능함.
편의를 위해 먼저 rpi4의 root 패스워드를 지정하고 dtb* 및 Image 만 복사하면 될 줄 알았는데, 커널 부팅이 안된다.
다행이도 윈도우에서 kernel8.img를 간단히 복사 가능하므로 복구해주고..
결과물 중, vmlinux는 add2line이나 gdb 사용을 위한 이미지로 부팅이 불가
Image는 raw 형태로 대략 26M쯤 나간다.
이를 z 또는 lz 형태로 압축하면 8~9M로 줄고, 이게 기존 rpi4에서 배포된 이미지로 보임. (귀찮으니 확인은 생략)
커널 버전이 달라서 커널 모듈이 모두 재컴파일 필요함. (처음부터 버전을 맞춰서 구할 수 있으면 좋았을텐데)
매우 귀찮지만, modules_install을 wsl내 임의의 경로에서 진행
타겟에서 lsblk을 실행하면, boot는 mmcblock1 root는 2에 있다는게 확인 가능하므로 가이드대로 적당히 마운트 후 복사하면 됨.
이후 tar로 묶어 타겟의 /lib/modules 경로에서 풀고 재부팅하면, 동작이 가능하다.
장난감 완성~
#!/bin/bash
#
#
#KERNEL_TOP_PATH="$( cd "$(dirname "$0")" ; pwd -P )"
KERNEL_TOP_PATH="$( cd "$(dirname "$0")" ; pwd -P )"
#KERNEL_TOP_PATH="/root/workspace/project/rpi4/linux"
OUTPUT="$KERNEL_TOP_PATH/out"
BUILD_LOG=$KERNEL_TOP_PATH/rpi_build_log.txt
echo "$OUTPUT"
cd linux
#if build error happens
#make ARCH=arm64 mrproper -j10
KERNEL=kernel8
make O=$OUTPUT ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc) bcm2711_defconfig
#make O=$OUTPUT ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc) Image modules dtbs 2>&1 | tee $BUILD_LOG
#tar the output dir in /lib/modules/xxx and scp to target
make O=$OUTPUT ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc) INSTALL_MOD_PATH=../out/mnt/root modules_install
커널 다운로드 및 빌드 가이드는 다음 링크 참조
https://www.raspberrypi.com/documentation/computers/linux_kernel.html
The Linux kernel - Raspberry Pi Documentation
The official documentation for Raspberry Pi computers and microcontrollers
www.raspberrypi.com