라즈베리파이 커널 컴파일 x86 환경에서 하기

2025. 1. 4. 21:07리눅스

 

# 커널 컴파일에 필요한 도구 설치
$ sudo apt install bc bison flex libssl-dev make libc6-dev libncurses5-dev -y
$ sudo apt install crossbuild-essential-arm64 -y

# 라즈베리파이 커널 컴파일 작업 폴더 만들기
$ mkdir raspberry
$ cd raspberry

# 소스 다운로드 
$ git clone --depth=1 https://github.com/raspberrypi/linux

# 작업 폴더 들어가기
$ cd linux
$ vi build.sh
$ chmod 755 build.sh

# 환경변수 설정 - 제대로 안되는듯.. EXPORT 로 하지 않으면 빌드중에 인식을 못한다.
$ ARCH=arm64
$ CROSS_COMPILE=aarch64-linux-gnu-

$ .build.sh

 

컴파일 확인 버전  build.sh 안에 ARCH, CROSS_COMPILE 직접 

#!/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 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig

echo "kernel build"
make O=$OUTPUT ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs -j64 2>&1 | tee $BUILD_LOG

 

 

ARCH, CROSS_COMPILE 은 export 되어야 한다. 빌드 시스템에서 사용하기 때문에.

make j 옵션 현재 시스템 코어수로 변경

#!/bin/bash

echo "configure build output path"

KERNEL_TOP_PATH="$( cd "$(dirname "$0")" ; pwd -P)"
OUTPUT="$KERNEL_TOP_PATH/out"
echo "$OUTPUT"

CURRENT_DATETIME=$(date +"%Y-%m-%d_%H-%M-%S")

KERNEL=kernel8
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
echo $ARCH
echo $KERNEL
echo $CROSS_COMPILE

BUILD_LOG="$KERNEL_TOP_PATH/rpi_build_log_$CURRENT_DATETIME.txt"

echo "move kernel source"
cd linux

echo "make mrproper"
make mrproper

echo "make defconfig"
make O=$OUTPUT bcm2711_defconfig

echo "kernel build"
make O=$OUTPUT Image modules dtbs -j$(nproc) 2>&1 | tee $BUILD_LOG

참고

https://www.inflearn.com/courses/lecture?courseId=335007&unitId=245167&subtitleLanguage=ko

https://www.inflearn.com/courses/lecture?courseId=335007&unitId=245168&subtitleLanguage=ko

https://www.raspberrypi.com/documentation/computers/linux_kernel.html#cross-compile-the-kernel