Unix & Linux/Kernel

라즈베리파이 리눅스 커널 , 빌드 따라하기

LEEHANDS 2021. 6. 10. 20:52
반응형

라즈베리파이 4 를 기준으로 작성되었으며 다른 버전은 다른 설정값을 가지고있습니다.

 

1-1. 리눅스 커널 Configuration ( 기본 빌드 옵션 )

KERNEL=kernel7l

To configure the Linux kernel (starting from reasonable default settings for the Raspberry Pi)

issue the commands: KERNEL=kernel7 (this is used by some build scripts)

make bcm2711_defconfig

 

1-2. 커널 빌드 설정

리눅스 커널을 맞춤으로 구성할 수 있으므로, 고급 사용자는 새로운 프로토콜을 시험하거나 새로운 하드웨어를 지원하는 것과 같은 필요에 따라 원래의 구성을 변경할 수 있습니다.
대부분의 구성 작업은 make menuconfig 인터페이스를 사용하여 할 수 있습니다.

다른 방법으로 .config 파일을 직접 편집할 수 있지만, 새로운 사용자에게는 어려울 수 있습니다.

 

menuconfig 도구를 올바로 사용하기 위해서 ncurses 개발 헤더가 필요합니다. (아래 코드 참고)

sudo apt install libncurses5-dev

 

menuconfig 하기전에 기본 구성이 설치되었는지 확인

KERNEL=kernel7l
make bcm2711_defconfig

크로스컴파일하는 경우 아래와 같이 작성

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig

 

이제 menuconfig 를 들어갑시다.

make menuconfig

크로스컴파일하는 경우는 아래와 같이 작성

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

그래픽환경에서 설정을 합니다.

 

2. 구성 종료 및 Load

기본 설정값은 .config 파일에 저장하는 것입니다.

이파이릉ㄹ 복사함으로써 구성을 저장하고 불러들일 수 있다.

 

3. 커널 빌드

make -j4 zImage modules dtbs
sudo make modules_install
sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
sudo cp arch/arm/boot/zImage /boot/$KERNEL.img

커널 빌드할때마다 위와 같이 명령어를 일일이 입력한다면 시간이 오래걸립니다. 그래서 아래 첨부파일처럼

쉘 스크립터를 만들어서 실행할 수 있습니다.

build_rpi_kernel.sh
0.00MB

#!/bin/bash

echo "configure build output path"

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

KERNEL=kernel7l
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 zImage modules dtbs -j4 2>&1 | tee $BUILD_LOG

쉘스크립터 내용을 살펴볼까요?

 

KERNEL_TOP_PATH="$( cd "$(dirname "$0")"; pwd -P)"  --> 현재 작업 디렉토리를 KERNEL_TOP_PATH 에 저장합니다.
OUTPUT "$KERNEL_TOP_PATH/out"  --> KERNEL_TOP_PATH  경로에 out 폴더를 추가해서 OUTPUT 이라는 쉘스크립트 변수에 저장
echo "$OUTPUT" 

 

OUTPUT 경로는 : /home/user/rpi_kernel_src/out

 

make O=$OUTPUT bcm2711_defconfig
make O=$OUTPUT zImage modules dtbs -j4 2>&1 | tee $BUILD_LOG

 

여기서 사용한 OUTPUT 은 커널을 빌드했을 때 만들어지는 Object 와 커널 이미지를 out 폴더에 생성하게 됩니다.

 

make O=$OUTPUT bcm2711_defconfig

   -> 커널 Configuration 을 생성하는 코드 , O=$OUTPUT 을 추가했으므로 out 폴더에 .config 가 생성된다.

 

make O=$OUTPUT zImage modules dtbs -j4 2>&1 | tee $BUILD_LOG

   -> 리눅스 커널 소스를 빌드하는 명령어

반응형