만약 처음으로 빌드 하는 경우에는
의존성이 있는 패키지들 설치해 주어야 한다
다음 명령어를 실행한다
sudo apt install git bc bison flex libssl-dev make
빌드 스크립트 (version 정보에 현재 시간 및 날짜를 추가)
#
# file name : build_rpi_kernel.sh
#
#!/bin/bash
# should run with sudo
# should run at directory like below
#
# $ ls
# linux build_rpi_kernel.sh install_rpi_kernel.sh
KERNEL_TOP_PATH="$( cd "$(dirname "$0")"; pwd -P )"
OUTPUT="$KERNEL_TOP_PATH/out"
KERNEL=kernel8
BUILD_LOG="$KERNEL_TOP_PATH/rpi_build_log.txt"
cd linux
# add current time to local version
# use this : sed -i "s/string_to_find/string_to_change/g" target_file
NOW_TIME=`date +%y%m%d-%H%M`
ORG_VERSION="CONFIG_LOCALVERSION=\"-v8\""
CHG_VERSION="CONFIG_LOCALVERSION=\"-v8-$NOW_TIME\""
sed -i "s/$ORG_VERSION/$CHG_VERSION/g" arch/arm64/configs/bcm2711_defconfig
echo "make defconfig"
make O=$OUTPUT bcm2711_defconfig
# change to original version
sed -i "s/$CHG_VERSION/$ORG_VERSION/g" arch/arm64/configs/bcm2711_defconfig
echo "kernel build"
make O=$OUTPUT -j4 Image.gz modules dtbs 2>&1 | tee $BUILD_LOG
설치 스크립트
#
# file name : install_rpi_kernel.sh
#
#!/bin/bash
# should run with sudo
# should run at directory like below
#
# $ ls
# linux build_rpi_kernel.sh install_rpi_kernel.sh
KERNEL=kernel8
KERNEL_TOP_PATH="$( cd "$(dirname "$0")"; pwd -P )"
OUTPUT="$CURRENT_PATH/out"
echo "$OUTPUT"
cd linux
sudo make O=$OUTPUT modules_install
sudo cp $OUTPUT/arch/arm64/boot/dts/broadcom/*.dtb /boot/
sudo cp $OUTPUT/arch/arm64/boot/dts/overlays/*.dtb* /boot/overlays/
sudo cp $OUTPUT/arch/arm64/boot/dts/overlays/README /boot/overlays/
sudo cp $OUTPUT/arch/arm64/boot/Image.gz /boot/$KERNEL.img
전처리 스크립트 (version 정보에 현재 시간 및 날짜 추가)
#
# file name : build_preprocess_rpi_kernel.sh
#
#!/bin/bash
# how to use
# ./build_preprocess_rpi_kernel.sh init/main.i
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_preproccess_build_log.txt"
PREPROCESS_FILE=$1
echo "build preprocessed file: $PREPROCESS_FILE"
echo "move kernel source"
cd linux
# add current time to local version
# use this : sed -i "s/string_to_find/string_to_change/g" target_file
NOW_TIME=`date +%y%m%d-%H%M`
ORG_VERSION="CONFIG_LOCALVERSION=\"-v8\""
CHG_VERSION="CONFIG_LOCALVERSION=\"-v8-$NOW_TIME\""
sed -i "s/$ORG_VERSION/$CHG_VERSION/g" arch/arm64/configs/bcm2711_defconfig
echo "make defconfig"
make O=$OUTPUT bcm2711_defconfig
# change to original version
sed -i "s/$CHG_VERSION/$ORG_VERSION/g" arch/arm64/configs/bcm2711_defconfig
echo "kernel build"
make $PREPROCESS_FILE O=$OUTPUT Image.gz modules dtbs -j4 2>&1 | tee $BUILD_LOG
출처:
https://www.raspberrypi.com/documentation/computers/linux_kernel.html
Raspberry Pi Documentation - The Linux kernel
The official documentation for Raspberry Pi computers and microcontrollers
www.raspberrypi.com
http://www.yes24.com/Product/Goods/90085976
디버깅을 통해 배우는 리눅스 커널의 구조와 원리 1 - YES24
신입 리눅스 시스템 개발자부터 5년차 개발자가 실무를 하기 위해 알아야 할 리눅스 커널의 주요 서브시스템!실전 개발에서 신입 사원 옆에 친절한 선배 개발자가 앉아서 리눅스 커널에 대해 꼼
www.yes24.com
.
'Kernel > 环境' 카테고리의 다른 글
| module signing (1) | 2024.09.21 |
|---|---|
| kernel - make cscope tags (0) | 2024.02.02 |
| kernel arm64 用 ctags & cscope (1) | 2024.02.02 |