์๊ฐ
์ด ๊ธฐ์ฌ ์๋ฆฌ์ฆ์์๋ ๋น๋๋ฃจํธ ๋ฐฐํฌ ๋น๋ ์์คํ ์ ์ดํด๋ณด๊ณ ์ด๋ฅผ ์ฌ์ฉ์ ์ ์ํ ๊ฒฝํ์ ๊ณต์ ํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ํฝ ์ธํฐํ์ด์ค์ ์ต์ํ์ ๊ธฐ๋ฅ์ ๊ฐ์ถ ์์ OS๋ฅผ ๋ง๋๋ ์ค์ ๊ฒฝํ์ด ์์ต๋๋ค.
์ฐ์ , ๋น๋ ์์คํ ๊ณผ ๋ฐฐํฌํ์ ํผ๋ํด์๋ ์ ๋ฉ๋๋ค. Buildroot๋ ์ ๊ณต๋๋ ํจํค์ง ์ธํธ์์ ์์คํ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. Buildroot๋ makefile์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ์ถ๋์์ผ๋ฏ๋ก ์์ฒญ๋ ์ฌ์ฉ์ ์ ์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ํจํค์ง๋ฅผ ๋ค๋ฅธ ๋ฒ์ ์ผ๋ก ๊ต์ฒดํ๊ณ , ์์ ๋ง์ ํจํค์ง๋ฅผ ์ถ๊ฐํ๊ณ , ํจํค์ง ๋น๋ ๊ท์น์ ๋ณ๊ฒฝํ๊ณ , ๋ชจ๋ ํจํค์ง๋ฅผ ์ค์นํ ํ ํ์ผ ์์คํ ์ ์ฌ์ฉ์ ์ ์ํ์๊ฒ ์ต๋๊น? buildroot๋ ์ด ๋ชจ๋ ๊ฒ์ ํ ์ ์์ต๋๋ค.
๋ฌ์์์์๋ buildroot๋ฅผ ์ฌ์ฉํ์ง๋ง ์ ์๊ฐ์๋ ์ด๋ณด์๋ฅผ ์ํ ๋ฌ์์์ด ์ ๋ณด๊ฐ ๊ฑฐ์ ์์ต๋๋ค.
์์ ์ ๋ชฉํ๋ ๋ผ์ด๋ธ ๋ค์ด๋ก๋, icewm ์ธํฐํ์ด์ค ๋ฐ ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ฐ์ถ ๋ฐฐํฌ ํคํธ๋ฅผ ์กฐ๋ฆฝํ๋ ๊ฒ์ ๋๋ค. ๋์ ํ๋ซํผ์ virtualbox์ ๋๋ค.
์์ ๋ง์ ๋ฐฐํฌํ์ ๊ตฌ์ถํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ ํ๋ ๋ฆฌ์์ค์๋ ์ ํ๋ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์๋ํ์์๋ ํ์จ์ด๋ฅผ ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ํจ์ฌ ๋ ๋ง์ต๋๋ค. ๋ถํ์ํ ํจํค์ง๋ฅผ ์ ๋ฆฌํ๊ณ ์ด๋ฅผ ํ์จ์ด๋ก ์ ํํ์ฌ ๋ฒ์ฉ ๋ฐฐํฌํ์ ์ ์ฉํ๋ ๊ฒ์ ์ ๋ฐฐํฌํ์ ๊ตฌ์ถํ๋ ๊ฒ๋ณด๋ค ๋ ธ๋ ์ง์ฝ์ ์ ๋๋ค. ์ ํฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์๋ ํ๊ณ๊ฐ ์์ต๋๋ค.
Buildroot ์์คํ ์ ๋งค์ฐ ๊ฐ๋ ฅํ์ง๋ง ์ฌ์ฉ์์๊ฒ ์๋ฌด๋ฐ ๋์์ด ๋์ง ์์ต๋๋ค. ์กฐ๋ฆฝ ํ๋ก์ธ์ค๋ง ํ์ฑํํ๊ณ ์๋ํํ ์ ์์ต๋๋ค.
๋์ฒด ๋น๋ ์์คํ (yocto, ๊ฐ๋ฐฉํ ๋น๋ ์์คํ ๋ฑ)์ ๊ณ ๋ ค๋๊ฑฐ๋ ๋น๊ต๋์ง ์์ต๋๋ค.
์ด๋์ ๊ตฌํ ์ ์๊ณ ์ด๋ป๊ฒ ์์ํด์ผ ํ ๊น์?
ํ๋ก์ ํธ ์น์ฌ์ดํธ -
Buildroot๋ ๋น๋์ ํ๊ฒ ๋ณด๋์ ๋ํ defconfig๋ฅผ ์๋ํฉ๋๋ค. Defconfig๋ ๊ธฐ๋ณธ๊ฐ์ด ์๋ ์ต์
๋ง ์ ์ฅํ๋ ๊ตฌ์ฑ ํ์ผ์
๋๋ค. ๋ฌด์์ ์์งํ ์ง, ์ด๋ป๊ฒ ์์งํ ์ง ๊ฒฐ์ ํ๋ ์ฌ๋์ ๋ฐ๋ก ๊ทธ ์ฌ๋์
๋๋ค. ์ด ๊ฒฝ์ฐ busybox, linux-kernel, uglibc, u-boot ๋ฐ barebox ๋ถํธ๋ก๋์ ๊ตฌ์ฑ์ ๋ณ๋๋ก ๊ตฌ์ฑํ ์ ์์ง๋ง ๋ชจ๋ ๋์ ๋ณด๋์ ์ฐ๊ฒฐ๋ฉ๋๋ค.
๋ค์ด๋ก๋ํ ์์นด์ด๋ธ์ ์์ถ์ ํ๊ฑฐ๋ git์์ ๋ณต์ ํ ํ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ ๋น๋ ๋ฃจํธ๋ฅผ ์ป์ต๋๋ค. ๋งค๋ด์ผ์์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฝ์ ์ ์์ต๋๋ค. ๊ฐ์ฅ ์ค์ํ ์ฌํญ์ ๋ํด ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค.
ํ โ ๊ฐ ๋ณด๋์ ํน์ ํ ํ์ผ์ด ์๋ ๋๋ ํ ๋ฆฌ. ์ด๋ ์์คํ
์ด๋ฏธ์ง(iso, sdcart, cpio ๋ฑ), ์ค๋ฒ๋ ์ด ๋๋ ํฐ๋ฆฌ, ์ปค๋ ๊ตฌ์ฑ ๋ฑ์ ํ์ฑํ๊ธฐ ์ํ ์คํฌ๋ฆฝํธ์ผ ์ ์์ต๋๋ค.
๊ตฌ์ฑ โ ๋ณด๋์ ์ค์ defconfig. Defconfig๋ ๋ถ์์ ํ ๋ณด๋ ๊ตฌ์ฑ์
๋๋ค. ๊ธฐ๋ณธ ์ค์ ๊ณผ ๋ค๋ฅธ ๋งค๊ฐ๋ณ์๋ง ์ ์ฅ๋ฉ๋๋ค.
dl โ ์ด์
๋ธ๋ฆฌ์ฉ์ผ๋ก ๋ค์ด๋ก๋ํ ์์ค ์ฝ๋/ํ์ผ์ด ์๋ ๋๋ ํ ๋ฆฌ
์ถ๋ ฅ/๋ชฉํ โ ๊ฒฐ๊ณผ OS์ ์กฐ๋ฆฝ๋ ํ์ผ ์์คํ
. ์ดํ ๋ค์ด๋ก๋/์ค์น๋ฅผ ์ํ ์ด๋ฏธ์ง๊ฐ ์์ฑ๋ฉ๋๋ค.
์ถ๋ ฅ/ํธ์คํธ - ์ด์
๋ธ๋ฆฌ์ฉ ํธ์คํธ ์ ํธ๋ฆฌํฐ
์ถ๋ ฅ/๋น๋ - ์กฐ๋ฆฝ๋ ํจํค์ง
์ด์ ๋ธ๋ฆฌ๋ KConfig๋ฅผ ํตํด ๊ตฌ์ฑ๋ฉ๋๋ค. ๋์ผํ ์์คํ ์ด Linux ์ปค๋์ ๋น๋ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๋ช ๋ น ๋ชฉ๋ก(buildroot ๋๋ ํฐ๋ฆฌ์์ ์คํ):
- make menuconfig - ๋น๋ ๊ตฌ์ฑ์ ํธ์ถํฉ๋๋ค. ๊ทธ๋ํฝ ์ธํฐํ์ด์ค(make nconfig, make xconfig, make gconfig)๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
- make linux-menuconfig - ์ปค๋ ๊ตฌ์ฑ์ ํธ์ถํฉ๋๋ค.
- make clean - ๋น๋ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฆฌํฉ๋๋ค(์ถ๋ ฅ์ ์ ์ฅ๋ ๋ชจ๋ ๊ฒ).
- make - ์์คํ ์ ๊ตฌ์ถํฉ๋๋ค. ์ด๋ ์ด๋ฏธ ์กฐ๋ฆฝ๋ ํ๋ก์ธ์ค๋ฅผ ๋ค์ ์กฐ๋ฆฝํ์ง ์์ต๋๋ค.
- make defconfig_name - ๊ตฌ์ฑ์ ํน์ defconfig๋ก ์ ํํฉ๋๋ค.
- make list-defconfigs - defconfig ๋ชฉ๋ก์ ํ์ํฉ๋๋ค.
- ์์ค ๋ง๋ค๊ธฐ - ๋น๋ํ ํ์ ์์ด ์ค์น ํ์ผ๋ง ๋ค์ด๋ก๋ํ๋ฉด ๋ฉ๋๋ค.
- make help - ๊ฐ๋ฅํ ๋ช ๋ น ๋์ด
์ค์ํ ์ฐธ๊ณ ์ฌํญ ๋ฐ ์ ์ฉํ ํ
Buildroot๋ ์ด๋ฏธ ๋น๋๋ ํจํค์ง๋ฅผ ๋ค์ ๋น๋ํ์ง ์์ต๋๋ค! ๋ฐ๋ผ์ ์ ์ฒด ์ฌ์กฐ๋ฆฝ์ด ํ์ํ ์ํฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ค์ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ณ๋์ ํจํค์ง๋ฅผ ๋ค์ ๋น๋ํ ์ ์์ต๋๋ค. ํจํค์ง ์ด๋ฆ์ ๋ค์ ๋น๋ํ์ธ์. ์๋ฅผ ๋ค์ด Linux ์ปค๋์ ๋ค์ ๋น๋ํ ์ ์์ต๋๋ค.
make linux-rebuild
Buildroot๋ ์ถ๋ ฅ/๋น๋/$packagename ๋๋ ํฐ๋ฆฌ์ .stamp ํ์ผ์ ์์ฑํ์ฌ ๋ชจ๋ ํจํค์ง์ ์ํ๋ฅผ ์ ์ฅํฉ๋๋ค.
๋ฐ๋ผ์ ํจํค์ง๋ฅผ ๋ค์ ๋น๋ํ์ง ์๊ณ ๋ root-fs ๋ฐ ์ด๋ฏธ์ง๋ฅผ ๋ค์ ๋น๋ํ ์ ์์ต๋๋ค.
rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make
์ ์ฉํ ๋ณ์
buildroot์๋ ์ฌ์ด ๊ตฌ์ฑ์ ์ํ ๋ณ์ ์ธํธ๊ฐ ์์ต๋๋ค.
- $TOPDIR - ๋น๋๋ฃจํธ ๋๋ ํฐ๋ฆฌ
- $BASEDIR - ์ถ๋ ฅ ๋๋ ํฐ๋ฆฌ
- $HOST_DIR, $STAGING_DIR, $TARGET_DIR โ ํธ์คํธ fs, ์คํ ์ด์ง fs, ๋์ fs ๋น๋ ๋๋ ํฐ๋ฆฌ.
- $BUILD_DIR - ์์ถ์ ํ๊ณ ๋น๋ํ ํจํค์ง๊ฐ ์๋ ๋๋ ํฐ๋ฆฌ
๋์ ๋ณด์ด๊ฒ ํจ
buildroot์๋ ์๊ฐํ ๊ธฐ๋ฅ์ด ์์ด ์ต์ข ์์คํ ์์ ์ข ์์ฑ ๋ค์ด์ด๊ทธ๋จ, ๋น๋ ์๊ฐ ๊ทธ๋ํ, ํจํค์ง ํฌ๊ธฐ ๊ทธ๋ํ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๊ฒฐ๊ณผ๋ ์ถ๋ ฅ/๊ทธ๋ํ ๋๋ ํฐ๋ฆฌ์ PDF ํ์ผ ํ์(svn,png ์ค์์ ์ ํํ ์ ์์)์ ๋๋ค.
์๊ฐํ ๋ช ๋ น์ ์:
make graph-depends
์์กด์ฑ ํธ๋ฆฌ ๊ตฌ์ถmake <pkg>-graph-depends
ํน์ ํจํค์ง์ ๋ํ ์ข ์์ฑ ํธ๋ฆฌ ๊ตฌ์ถBR2_GRAPH_OUT=png make graph-build
PNG ์ถ๋ ฅ์ผ๋ก ๋น๋ ์๊ฐ ํ๋กฏmake graph-size
ํ๋กฏ ํจํท ํฌ๊ธฐ
์ ์ฉํ ์คํฌ๋ฆฝํธ
buildroot ๋๋ ํฐ๋ฆฌ์ ํ์ ๋๋ ํฐ๋ฆฌ๊ฐ ์์ต๋๋ค. ์ ํธ๋ฆฌํฐ ์ ์ฉํ ์คํฌ๋ฆฝํธ๋ก. ์๋ฅผ ๋ค์ด ํจํค์ง ์ค๋ช ์ ์ ํ์ฑ์ ํ์ธํ๋ ์คํฌ๋ฆฝํธ๊ฐ ์์ต๋๋ค. ์ด๋ ์์ ๋ง์ ํจํค์ง๋ฅผ ์ถ๊ฐํ ๋ ์ ์ฉํ ์ ์์ต๋๋ค(๋์ค์ ์ด ์์ ์ ์ํํ๊ฒ ์ต๋๋ค). utils/readme.txt ํ์ผ์๋ ์ด๋ฌํ ์คํฌ๋ฆฝํธ์ ๋ํ ์ค๋ช ์ด ํฌํจ๋์ด ์์ต๋๋ค.
์ฃผ์ ์ ํต์ ๊ตฌ์ถํ์
๋ชจ๋ ์์
์ ๋ฃจํธ๊ฐ ์๋ ์ผ๋ฐ ์ฌ์ฉ์๋ฅผ ๋์ ํ์ฌ ์ํ๋๋ค๋ ์ ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋ชจ๋ ๋ช
๋ น์ ๋น๋๋ฃจํธ์์ ์คํ๋ฉ๋๋ค. buildroot ํจํค์ง์๋ ์ด๋ฏธ ๋ง์ ์ผ๋ฐ ๋ณด๋ ๋ฐ ๊ฐ์ํ์ ๋ํ ๊ตฌ์ฑ ์ธํธ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
๊ตฌ์ฑ ๋ชฉ๋ก์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
qemu_x86_64_defconfig ๊ตฌ์ฑ์ผ๋ก ์ ํ
make qemu_x86_64_defconfig
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์กฐ๋ฆฝ์ ์์ํฉ๋๋ค
make
๋น๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ต๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ์ธ์.
Buildroot๋ Qemu์์ ์คํํ ์ ์๊ณ ์๋ํ๋์ง ํ์ธํ ์ ์๋ ์ด๋ฏธ์ง๋ฅผ ์ปดํ์ผํ์ต๋๋ค.
qemu-system-x86_64 -kernel output/images/bzImage -hda output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S
๊ฒฐ๊ณผ๋ qemu์์ ์คํ๋๋ ์์คํ ์ ๋๋ค.
์์ ๋ง์ ๋ณด๋ ๊ตฌ์ฑ ๋ง๋ค๊ธฐ
๋ณด๋ ํ์ผ ์ถ๊ฐ
๊ตฌ์ฑ ๋ชฉ๋ก์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๋ชฉ๋ก์ pc_x86_64_efi_defconfig๊ฐ ํ์๋ฉ๋๋ค. ๊ตฌ์ฑ์์ ๋ณต์ฌํ์ฌ ์์ฒด ๋ณด๋๋ฅผ ๋ง๋ญ๋๋ค.
cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig
์คํฌ๋ฆฝํธ, rootfs-overlay ๋ฐ ๊ธฐํ ํ์ํ ํ์ผ์ ์ ์ฅํ ๋ณด๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฆ์ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
mkdir board/my_x86_board
์ด ์ ์ ๊ตฌ์ฑ์ผ๋ก ์ ํํ์ญ์์ค.
make my_x86_board_defconfig
๋ฐ๋ผ์ ์ด์ ๋น๋ ๊ตฌ์ฑ(buildroot ๋๋ ํฐ๋ฆฌ์ ๋ฃจํธ์ ์๋ .config์ ์ ์ฅ๋จ)์ x86-64 ๋ ๊ฑฐ์(bios) ๋ถํ ๋์ ์์คํ ์ ํด๋นํฉ๋๋ค.
Linux-kernel ๊ตฌ์ฑ์ ๋ณต์ฌํด ๋ณด๊ฒ ์ต๋๋ค(๋์ค์ ์ ์ฉํจ).
cp board/pc/linux.config board/my_x86_board/
KConfig๋ฅผ ํตํด ๋น๋ ๋งค๊ฐ๋ณ์ ์ค์
์ค์ ์ ์์ํด ๋ณด๊ฒ ์ต๋๋ค.
make menuconfig
KConfig ์ฐฝ์ด ์ด๋ฆฝ๋๋ค. ๊ทธ๋ํฝ ์ธํฐํ์ด์ค๋ก ๊ตฌ์ฑํ๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค(make nconfig, make xconfig, make gconfig):
์ฒซ ๋ฒ์งธ ์น์ ์ธ ๋์ ์ต์ ์ ์ ๋ ฅํฉ๋๋ค. ์ฌ๊ธฐ์์ ๋น๋๊ฐ ์ํ๋ ๋์ ์ํคํ ์ฒ๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
๋น๋ ์ต์ - ์ฌ๊ธฐ์๋ ๋ค์ํ ๋น๋ ์ค์ ์ด ์์ต๋๋ค. ์์ค ์ฝ๋, ๋น๋ ์ค๋ ๋ ์, ์์ค ์ฝ๋ ๋ค์ด๋ก๋๋ฅผ ์ํ ๋ฏธ๋ฌ ๋ฐ ๊ธฐํ ์ค์ ์ด ํฌํจ๋ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์ค์ ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋๊ฒ ์ต๋๋ค.
๋๊ตฌ ์ฒด์ธ โ ๋น๋ ๋๊ตฌ ์์ฒด๊ฐ ์ฌ๊ธฐ์์ ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ทธ์ ๋ํด ์์ธํ ์ฝ์ด๋ณด์ธ์.
๋๊ตฌ ์ฒด์ธ ์ ํ โ ์ฌ์ฉ๋ ๋๊ตฌ ์ฒด์ธ ์ ํ์ ๋๋ค. ์ด๋ buildroot ๋๋ ์ธ๋ถ ๋๊ตฌ์ ๋ด์ฅ๋ ๋๊ตฌ ์ฒด์ธ์ผ ์ ์์ต๋๋ค(์ด๋ฏธ ๋น๋๋ ๋๋ ํฐ๋ฆฌ ๋๋ ๋ค์ด๋ก๋ํ URL์ ์ง์ ํ ์ ์์ต๋๋ค). ๋ค์ํ ์ํคํ ์ฒ์ ๋ํ ์ถ๊ฐ ์ต์ ์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด arm์ ๊ฒฝ์ฐ ์ธ๋ถ ํด์ฒด์ธ์ Linaro ๋ฒ์ ์ ์ ํํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
C ๋ผ์ด๋ธ๋ฌ๋ฆฌ โ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ํ ์ ์ฒด ์์คํ ์ ์๋์ ์ด์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ฅํ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ง์ํ๋ glibc๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์๋ฒ ๋๋ ์์คํ ์๋ ๋๋ฌด ํด ์ ์์ผ๋ฏ๋ก uglibc ๋๋ musl์ด ์ ํ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. glibc๋ฅผ ์ ํํ๊ฒ ์ต๋๋ค(๋์ค์ systemd๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ด ์ต์ ์ด ํ์ํฉ๋๋ค).
์ปค๋ ํค๋ ๋ฐ ์ฌ์ฉ์ ์ ์ ์ปค๋ ํค๋ ์๋ฆฌ์ฆ - ์กฐ๋ฆฝ๋ ์์คํ ์ ํฌํจ๋ ์ปค๋ ๋ฒ์ ๊ณผ ์ผ์นํด์ผ ํฉ๋๋ค. ์ปค๋ ํค๋์ ๊ฒฝ์ฐ tarball ๋๋ git ์ ์ฅ์์ ๋ํ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ ์๋ ์์ต๋๋ค.
GCC COMPILER VERSIONS โ ๋น๋์ ์ฌ์ฉํ ์ปดํ์ผ๋ฌ ๋ฒ์ ์ ์ ํํฉ๋๋ค.
C++ ์ง์ ํ์ฑํ - ์์คํ
์์ C++ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ง์์ ์ฌ์ฉํ์ฌ ๋น๋ํ๋ ค๋ฉด ์ ํํฉ๋๋ค. ์ด๋ ์์ผ๋ก ์ฐ๋ฆฌ์๊ฒ ์ ์ฉํ ๊ฒ์
๋๋ค.
์ถ๊ฐ gcc ์ต์ โ ์ถ๊ฐ ์ปดํ์ผ๋ฌ ์ต์ ์ ์ค์ ํ ์ ์์ต๋๋ค. ์ง๊ธ์ ํ์ํ์ง ์์ต๋๋ค.
์์คํ ๊ตฌ์ฑ์ ์ฌ์ฉํ๋ฉด ์์ฑ๋ ์์คํ ์ ํฅํ ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
๋๋ถ๋ถ์ ์์ ์ ์ ๋ชฉ์์ ๋ช
ํํฉ๋๋ค. ๋ค์ ์ฌํญ์ ์ฃผ์ํฉ์๋ค.
์ฌ์ฉ์ ํ
์ด๋ธ ๊ฒฝ๋ก - ์์ฑ๋ ์ฌ์ฉ์๊ฐ ํฌํจ๋ ํ
์ด๋ธ(
์์ ํ์ผ. ์ฌ์ฉ์ user๋ ๋น๋ฐ๋ฒํธ admin, ์๋์ผ๋ก gid/uid, /bin/sh shell, ๊ธฐ๋ณธ ๊ทธ๋ฃน user, ๊ทธ๋ฃน ๊ตฌ์ฑ์ root, comment Foo user๋ก ์์ฑ๋ฉ๋๋ค.
[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt
user -1 user -1 =admin /home/user /bin/sh root Foo user
๋ฃจํธ ํ์ผ ์์คํ ์ค๋ฒ๋ ์ด ๋๋ ํฐ๋ฆฌ - ์กฐ๋ฆฝ๋ target-fs ์์ ์ค๋ฒ๋ ์ด๋ ๋๋ ํฐ๋ฆฌ์ ๋๋ค. ์ ํ์ผ์ ์ถ๊ฐํ๊ณ ๊ธฐ์กด ํ์ผ์ ๋ฐ๊ฟ๋๋ค.
ํ์ผ ์์คํ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๊ธฐ ์ ์ ์คํํ ์ฌ์ฉ์ ์ ์ ์คํฌ๋ฆฝํธ - ํ์ผ ์์คํ ์ ์ด๋ฏธ์ง๋ก ์ ๊ธฐ ์ง์ ์ ์คํ๋๋ ์คํฌ๋ฆฝํธ์ ๋๋ค. ์ง๊ธ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋น์ ๋๊ฒ ์ต๋๋ค.
์ปค๋ ์น์ ์ผ๋ก ๊ฐ๋ณด๊ฒ ์ต๋๋ค.
์ปค๋ ์ค์ ์ ์ฌ๊ธฐ์์ ์ค์ ๋ฉ๋๋ค. ์ปค๋ ์์ฒด๋ make linux-menuconfig๋ฅผ ํตํด ๊ตฌ์ฑ๋ฉ๋๋ค.
๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ปค๋ ๋ฒ์ ์ ์ค์ ํ ์ ์์ต๋๋ค. ์ ๊ณต๋๋ ๋ฒ์ ์ค์์ ์ ํํ๊ณ , ๋ฒ์ ์ ์๋์ผ๋ก ์
๋ ฅํ๊ณ , ์ ์ฅ์ ๋๋ ๊ธฐ์ฑ ํ๋ฅด๋ณผ์ ์ง์ ํฉ๋๋ค.
์ปค๋ ๊ตฌ์ฑ โ ์ปค๋ ๊ตฌ์ฑ์ ๊ฒฝ๋ก์
๋๋ค. ์ ํํ ์ํคํ
์ฒ์ ๋ํ ๊ธฐ๋ณธ ๊ตฌ์ฑ์ ์ ํํ๊ฑฐ๋ Linux์์ defocnfig๋ฅผ ์ ํํ ์ ์์ต๋๋ค. Linux ์์ค์๋ ๋ค์ํ ๋์ ์์คํ
์ ๋ํ defconfig ์ธํธ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ๋น์ ์ ๋น์ ์ด ํ์๋กํ๋ ๊ฒ์ ์ฐพ์ ์ ์์ต๋๋ค
๋์ ํจํค์ง ์น์
์์๋ ๊ตฌ์ถ ์ค์ธ ์์คํ
์ ์ค์นํ ํจํค์ง๋ฅผ ์ ํํ ์ ์์ต๋๋ค. ์ง๊ธ์ ๋ณ๊ฒฝํ์ง ์๊ณ ๊ทธ๋๋ก ๋๊ฒ ์ต๋๋ค. ๋์ค์ ์ด ๋ชฉ๋ก์ ํจํค์ง๋ฅผ ์ถ๊ฐํ ๊ฒ์
๋๋ค.
ํ์ผ ์์คํ
์ด๋ฏธ์ง - ์์งํ ํ์ผ ์์คํ
์ด๋ฏธ์ง ๋ชฉ๋ก์
๋๋ค. ISO ์ด๋ฏธ์ง ์ถ๊ฐ
๋ถํธ๋ก๋ - ์์งํ ๋ถํธ๋ก๋๋ฅผ ์ ํํฉ๋๋ค. ์์ด์๋ฆฌ๋์ค๋ฅผ ์ ํํ์
์์คํ ๊ตฌ์ฑ
Systemd๋ ์ปค๋, glibc์ ํจ๊ป Linux์ ํต์ฌ ์ค ํ๋๊ฐ ๋๊ณ ์์ต๋๋ค. ๊ทธ๋์ ํด๋น ์ค์ ์ ๋ณ๋์ ํญ๋ชฉ์ผ๋ก ์ฎ๊ฒผ์ต๋๋ค.
make menuconfig๋ฅผ ํตํด ๊ตฌ์ฑํ ๋ค์ ๋์ ํจํค์ง โ ์์คํ ๋๊ตฌ โ systemd๋ฅผ ํตํด ๊ตฌ์ฑํฉ๋๋ค. ์ฌ๊ธฐ์์ ์์คํ ์ด ์์๋ ๋ ์ค์น๋๊ณ ์์๋ ์์คํ ์๋น์ค๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
์์คํ ๊ตฌ์ฑ ์ ์ฅ
KConfig๋ฅผ ํตํด ์ด ๊ตฌ์ฑ์ ์ ์ฅํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ defconfig๋ฅผ ์ ์ฅํฉ๋๋ค.
make savedefconfig
Linux ์ปค๋ ๊ตฌ์ฑ
Linux ์ปค๋ ๊ตฌ์ฑ์ ๋ค์ ๋ช ๋ น์ผ๋ก ํธ์ถ๋ฉ๋๋ค.
make linux-menuconfig
Virtualbox ๋น๋์ค ์นด๋์ ๋ํ ์ง์์ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค.
Virtualbox ๊ฒ์คํธ ํตํฉ ์ง์์ ์ถ๊ฐํด ๋ณด๊ฒ ์ต๋๋ค.
์ ์ฅ ๋ฐ ์ข ๋ฃ. ์ค์: ๊ตฌ์ฑ์output/build/linux-$version/config์ ์ ์ฅ๋์ง๋ง,board/my_x86_board/linux.config์๋ ์ ์ฅ๋์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ๊ตฌ์ฑ์ ์คํ ๋ฆฌ์ง ์์น์ ์๋์ผ๋ก ๋ณต์ฌํด์ผ ํฉ๋๋ค.
cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config
๊ทธ ํ์ ์ฐ๋ฆฌ๋ ์ ์ฒด ์์คํ ์ ์์ ํ ์ฌ์กฐ๋ฆฝ์ ์ํํ ๊ฒ์ ๋๋ค. buildroot๋ ์ด๋ฏธ ๋น๋๋ ๊ฒ์ ๋ค์ ๋น๋ํ์ง ์์ผ๋ฏ๋ก ๋ค์ ๋น๋ํ ํจํค์ง๋ฅผ ์๋์ผ๋ก ์ง์ ํด์ผ ํฉ๋๋ค. ์๊ฐ๊ณผ ์ ๊ฒฝ์ ๋ญ๋นํ์ง ์์ผ๋ ค๋ฉด ์๊ท๋ชจ ์์คํ ์ ์์ ํ ์ฌ๊ตฌ์ถํ๋ ๊ฒ์ด ๋ ์ฝ์ต๋๋ค.)
make clean;make
๋น๋๊ฐ ์๋ฃ๋๋ฉด CD์์ VirtualBox(๋ฒ์ 5.2 ๋ฐ 6.0์์ ํ ์คํธ๋จ) ๋ถํ ์ ์์ํฉ๋๋ค. ์์คํ ๋งค๊ฐ๋ณ์:
์กฐ๋ฆฝ๋ ISO์์ ์คํ:
์ฌ์ฉ๋ ์ฌ๋ฃ ๋ชฉ๋ก
- ๋น๋๋ฃจํธ ๋งค๋ด์ผ
์ถ์ฒ : habr.com