라즈베리파이 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
커널 빌드할때마다 위와 같이 명령어를 일일이 입력한다면 시간이 오래걸립니다. 그래서 아래 첨부파일처럼
쉘 스크립터를 만들어서 실행할 수 있습니다.
#!/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
-> 리눅스 커널 소스를 빌드하는 명령어
'Unix & Linux > Kernel' 카테고리의 다른 글
Raspberry Pi Zero W, 커널 컴파일 및 빌드 (0) | 2022.01.13 |
---|---|
Device Tree (디바이스 트리) 에 대해 (2) | 2021.09.04 |
리눅스 커널 소스 ( Linux Kernel Source ) (0) | 2021.07.21 |
라즈베리파이 크로스컴파일 (0) | 2021.07.19 |
Trouble Shooting, cc1: error: -Werror=date-time: no option -Wdate-time <debug> (0) | 2021.06.15 |