๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ์ปค๋ ๋น๋(์ปดํ์ผ), ์ปค๋ ๋ชจ๋ ๊ฐ๋ฐ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
* bc bison flex libssl-dev install ์ค์น
apt-get install git bc bison flex libssl-dev

์ถ๊ฐ ํ์ ์์๋๋ ํจํค์ง ์ค์น
sudo apt-get install -y \
    git bc bison flex libssl-dev \
    make gcc libncurses-dev build-essential

Make Project dir + Git clone
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 ๊ฐ๋ฅ | ๋ฐ๋์ Tab์ผ๋ก ๋ค์ฌ์ฐ๊ธฐ | 
| ๋ณ์ ์ ์ | VAR=value โ $VAR | VAR=value โ $(VAR) ๋๋ ${VAR} | 
| ์กฐ๊ฑด๋ฌธ/๋ฐ๋ณต๋ฌธ | if, for, while ๋ฑ Bash ๋ฌธ๋ฒ | ๊ธฐ๋ณธ์ ์ผ๋ก ์์ (GNU Make์ if, foreach๋ ์ ํ์ ) | 
๋ณ์ ์ต์  ํ์ธ

์ปค๋ ์ปดํ์ผ
* ์ํ ์ฝ๋ ๋น๋
#!/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 ์คํ

