๋ผ์ฆ๋ฒ ๋ฆฌํ์ด ์ปค๋ ๋น๋(์ปดํ์ผ), ์ปค๋ ๋ชจ๋ ๊ฐ๋ฐ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
* 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 ์คํ
