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
'linux' 카테고리의 다른 글
| /proc/zoneinfo 해석 방법 (0) | 2025.12.28 |
|---|---|
| zone, free_area, list_head[MIGRATE_TYPES] 관련 (0) | 2025.12.28 |
| gst와 omx IL의 관계 (0) | 2022.11.03 |
| fs.protected_regular (0) | 2022.10.04 |
| KMS, DRM, DRI 에 대한 개요 (0) | 2022.09.10 |