운영체제/리눅스
[리눅스 커널 디버깅] 1. 커널 빌드와 설치 (rpi4 6.6.x)
IT 기술자
2025. 4. 11. 11:00
"디버깅을 통해 배우는 리눅스 커널의 구조와 원리" 책과 유튜브 [오제이 튜브] 님의 한국에서 제일 쉬운 리눅스 커널 강의"를 참고하였다.
책의 예제 소스
https://github.com/wikibook/linux-kernel
GitHub - wikibook/linux-kernel: 리눅스 커널
리눅스 커널. Contribute to wikibook/linux-kernel development by creating an account on GitHub.
github.com
라즈베리파이 4에 "rpaspberry pi os lite (64-bit)"를 설치한다. (2025.4월)
su root 패스워드 설정
pi@raspberrypi:~ $ sudo passwd root
새 암호:
새 암호 재입력:
passwd: password updated successfully
root 로그인
pi@raspberrypi:~ $ su
암호:
root@raspberrypi:/home/pi # cd ~
root@raspberrypi:~ #
패키지 업데이트
root@raspberrypi:~ # apt-get update
root@raspberrypi:~ # apt-get upgrade
vim 설치와 root에 bash 환경 적용
root@raspberrypi:~ # apt-get install vim
root@raspberrypi:~ # cp /home/pi/.bashrc /root/
root@raspberrypi:~ # source .bashrc
Sop 정보를 확인한다.
root@raspberrypi:~ # lscpu
Architecture: aarch64
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
Vendor ID: ARM
Model: 3
Model name: Cortex-A72
Stepping: r0p3
CPU max MHz: 1800.0000
CPU min MHz: 600.0000
BogoMIPS: 108.00
L1d cache: 128 KiB
L1i cache: 192 KiB
L2 cache: 1 MiB
Vulnerability Itlb multihit: Not affected
Vulnerability L1tf: Not affected
Vulnerability Mds: Not affected
Vulnerability Meltdown: Not affected
Vulnerability Mmio stale data: Not affected
Vulnerability Retbleed: Not affected
Vulnerability Spec store bypass: Vulnerable
Vulnerability Spectre v1: Mitigation; __user pointer sanitization
Vulnerability Spectre v2: Vulnerable
Vulnerability Srbds: Not affected
Vulnerability Tsx async abort: Not affected
Flags: fp asimd evtstrm crc32 cpuid
칩셋 정보를 확인한다.
root@raspberrypi:~ # lspci
00:00.0 PCI bridge: Broadcom Inc. and subsidiaries BCM2711 PCIe Bridge (rev 20)
01:00.0 USB controller: VIA Technologies, Inc. VL805 USB 3.0 Host Controller (rev 01)
커널 버전을 확인한다.
root@raspberrypi:~ # uname -a
Linux raspberrypi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023 aarch64 GNU/Linux
패키지 설치
root@raspberrypi:~ # apt-get install git bc bison flex libssl-dev
작업 디렉터리 생성
root@raspberrypi:~ # mkdir -p /project/linuxSrc && cd $_
커널 소스 받기
root@raspberrypi:/project/linuxSrc # git clone --depth=1 https://github.com/raspberrypi/linux
안정된 버전을 받아도 된다.
"git clone -b stable --depth=1 https://github.com/raspberrypi/linux"
빌드 스크립트 생성
root@raspberrypi:/project/linuxSrc # vi build_rpi_kernel.sh
#!/bin/bash
echo "configure build output path"
KERNEL_TOP_PATH="$( cd "$(dirname "$0")" ; pwd -P)"
OUTPUT="$KERNEL_TOP_PATH/out"
echo "$OUTPUT"
KERNEL=kernel8
BUILD_LOG="$KERNEL_TOP_PATH/rpi_build_log.txt"
echo "move kernel source"
cd linux
echo "make defconfig"
make O=$OUTPUT bcm2711_defconfig
echo "kernel build"
make O=$OUTPUT Image modules dtbs -j4 2>&1 | tee $BUILD_LOG
빌드 스크립트에 실행권한 주고 실행하기
root@raspberrypi:/project/linuxSrc # chmod 755 build_rpi_kernel.sh
root@raspberrypi:/project/linuxSrc # ./build_rpi_kernel.sh
몇 시간 걸림 (few hours later....)
설치 스크립트 생성
root@raspberrypi:/project/linuxSrc # vi install_rpi_kernel.sh
#!/bin/bash
cd /project/linuxSrc/out
make modules_install
make dtbs_install
cp arch/arm64/boot/Image /boot/firmware/kernel8.img
reboot
설치 스크립트에 실행권한 주고 실행하기
root@raspberrypi:/project/linuxSrc # chmod 755 install_rpi_kernel.sh
root@raspberrypi:/project/linuxSrc # ./install_rpi_kernel.sh
설치 후 버전 확인
root@raspberrypi:/project/linuxSrc # cat /proc/version
Linux version 6.6.78-v8+ (root@raspberrypi) (gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40) #1 SMP PREEMPT Sat Mar 29 13:25:51 GMT 2025