Linux Kernel – 5 Kernel compilie 🛠️

2025-05-23

Linux Kernel – 5 Kernel compilie 🛠️

Linux Kernel – 5 Kernel compilie 🛠️ 라이브러리 설치 커널 컴파일 라즈베리파이 커널 빌드(컴파일), 커널 모듈 개발용 라이브러리 설치 * bc bison flex libssl-dev install 설치 apt-get install git bc bison flex libssl-dev 추가 필요 예상되는 패키지 설치 sudo apt-

Linux Kernel – 5 Kernel compilie🛠️

라즈베리파이 커널 빌드(컴파일), 커널 모듈 개발용 라이브러리 설치

* bc bison flex libssl-dev install 설치

code snippet
apt-get install git bc bison flex libssl-dev

추가 필요 예상되는 패키지 설치

code snippet
sudo apt-get install -y \ git bc bison flex libssl-dev \ make gcc libncurses-dev build-essential

Make Project dir + Git clone

code snippet
mkdir -p project/linuxSrc git clone --depth=1 https://github.com/raspberrypi/linux

Shell Script vs Makefile 문법 차이 요약

구분Shell Script (.sh)Makefile (Makefile)
목적일반적인 작업 자동화컴파일을 자동화할 때 사용
실행 방식bash script.sh 등으로 직접 실행make 명령어로 실행 (파일명은 Makefile)
문법순차적 명령어 실행 (if, for, while 등)타겟: 의존파일들\n 명령어 형식
들여쓰기공백 또는 Tab 가능반드시 Tab으로 들여쓰기
변수 정의VAR=value$VARVAR=value$(VAR) 또는 ${VAR}
조건문/반복문if, for, while 등 Bash 문법기본적으로 없음 (GNU Make의 if, foreach는 제한적)

변수 옵션 확인

커널 컴파일

* 샘플 코드 빌드

code snippet
#!/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 "$KERNEL_TOP_PATH/rpi-linux" # ← 디렉토리 이름에 맞게 수정 # ARCH 및 CROSS_COMPILE 환경 설정 export ARCH=arm64 export CROSS_COMPILE=aarch64-linux-gnu- echo "make defconfig" make O="$OUTPUT" bcm2711_defconfig echo "kernel build" make O="$OUTPUT" Image modules dtbs -j4 2>&1 | tee "$BUILD_LOG"

마지막 라인 (커널 빌드 라인) 추가 설명
make O="$OUTPUT" : 모든 결과물은 $OUTPUT (out 폴더)에 넣는다.
make 에 대한 옵션 (Image, modules, dtbs)

Image : 컴파일을 다 한 후 이미지 파일로 생성한다는 의미

Image: 압축하지 않고 사용하는 이미지
zImage: 압축하여 사용 (2MB 이하로), 자체 압축 해제 루틴이 포함되어 있음 (ARM32)

modules : 모듈 컴파일 옵션 (드라이버 관련)
간단하게 모듈빌드를 위한 make 명령어는 make modules
make module : 커널 환경설정에서 모듈로 설정한 기능들을 컴파일

dtbs : dtbs 형식의 파일 생성 옵션
/boot/firmware 경로 내 파일 생성

* /boot/firmware 경로 내 dtb 파일 목록 확인

-j4 : CPU 스레드 4개 사용 선언 (PI CPU 코어 수와 동일)

2>&1 : 디버깅을 위해 표준 에러를 표준 출력 결과에 출력하기 위한 정의

구분설명파일 디스크립터
표준 출력일반적인 출력 결과 (예: echo)1
표준 에러오류 메시지 출력 (예: ls 없음)2

즉 stderr(2)를 stdout(1)과 같이 출력시키겠다. (에러 메시지와 일반 출력)

그 결과를 "| tee "$BUILD_LOG"" 즉 모니터와 로그 파일에 출력과 저장을 요청하는 문구

./build.sh 실행