์ด ์น์ ์์๋ ๋์๊ฒ ํ์ํ ๋ช ๊ฐ์ง ์ฌ์ฉ์ ์ ์ ์ต์ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ด๊ฒ์ buildroot๊ฐ ์ ๊ณตํ๋ ์ ์ฒด ๋ชฉ๋ก์ ์๋์ง๋ง ๋งค์ฐ ๊ธฐ๋ฅ์ ์ด๋ฉฐ buildroot ์์ฒด ํ์ผ์ ๊ฐ์ ํ ํ์๊ฐ ์์ต๋๋ค.
์ฌ์ฉ์ ์ ์๋ฅผ ์ํด EXTERNAL ๋ฉ์ปค๋์ฆ ์ฌ์ฉ
๊ทธ๋ฌ๋ ์ด ๋ฐฉ๋ฒ์ ํนํ buildroot๋ฅผ ์ ๋ฐ์ดํธํ ๋ ๋งค์ฐ ํธ๋ฆฌํ์ง ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฉ์ปค๋์ฆ์ด ์์ต๋๋ค ์ธ๋ถ ๋๋ฌด. ๊ทธ ํต์ฌ์ ๋ณด๋, ๊ตฌ์ฑ, ํจํค์ง ๋ฐ ๊ธฐํ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ณ๋์ ๋๋ ํฐ๋ฆฌ์ ์ ์ฅํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค(์๋ฅผ ๋ค์ด ์ ๋ ํจ์น ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ํจํค์ง์ ํจ์น๋ฅผ ์ ์ฉํ๊ณ ์์ธํ ๋ด์ฉ์ ๋ณ๋ ์น์ ์ ์์). ๊ทธ ๋๋ ํ ๋ฆฌ.
์ฐธ๊ณ : ํ ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ ์ธ๋ถ ํธ๋ฆฌ๋ฅผ ์ค๋ฒ๋ ์ดํ ์ ์์ต๋๋ค. ๋น๋ ๋ฃจํธ ๋งค๋ด์ผ์ ์๊ฐ ์์ต๋๋ค.
buildroot ๋๋ ํฐ๋ฆฌ ์์ my_tree ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ์ฌ๊ธฐ์ ๊ตฌ์ฑ์ ์ ์กํด ๋ณด๊ฒ ์ต๋๋ค. ์ถ๋ ฅ์ ๋ค์ ํ์ผ ๊ตฌ์กฐ์ฌ์ผ ํฉ๋๋ค.
[alexey@alexey-pc my_tree]$ tree
.
โโโ board
โ โโโ my_x86_board
โ โโโ bef_cr_fs_img.sh
โ โโโ linux.config
โ โโโ rootfs_overlay
โ โโโ users.txt
โโโ Config.in
โโโ configs
โ โโโ my_x86_board_defconfig
โโโ external.desc
โโโ external.mk
โโโ package
โโโ patches
6 directories, 7 files
๋ณด์๋ค์ํผ, ์ผ๋ฐ์ ์ผ๋ก ๊ตฌ์กฐ๋ buildroot์ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
๋๋ ํ ๋ฆฌ ํ ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ์๋ ๊ฐ ๋ณด๋์ ํน์ ํ ํ์ผ์ด ํฌํจ๋์ด ์์ต๋๋ค.
- bef_cr_fs_img.sh๋ ๋์ ํ์ผ ์์คํ ์ ๊ตฌ์ถํ ํ ์ด๋ฏธ์ง๋ก ํจํค์งํ๊ธฐ ์ ์ ์คํ๋๋ ์คํฌ๋ฆฝํธ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์์ผ๋ก๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค
- linux.config - ์ปค๋ ๊ตฌ์ฑ
- rootfs_overlay - ๋์ ํ์ผ ์์คํ ์์ ์ค๋ฒ๋ ์ดํ ๋๋ ํฐ๋ฆฌ
- users.txt - ์์ฑ๋ ์ฌ์ฉ์๋ฅผ ์ค๋ช ํ๋ ํ์ผ
๋๋ ํ ๋ฆฌ ๊ตฌ์ฑ ์ฐ๋ฆฌ ๋ณด๋์ defconfig๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ํ๋๋ง ๊ฐ์ง๊ณ ์์ต๋๋ค.
๋ฌถ์ - ํจํค์ง ์นดํ๋ก๊ทธ. ์ฒ์์ buildroot์๋ ์ ํ๋ ์์ ํจํค์ง๋ฅผ ๋น๋ํ๊ธฐ ์ํ ์ค๋ช
๊ณผ ๊ท์น์ด ํฌํจ๋์ด ์์ต๋๋ค. ๋์ค์ ์ฌ๊ธฐ์ icewm ์ฐฝ ๊ด๋ฆฌ์์ Slim ๊ทธ๋ํฝ ๋ก๊ทธ์ธ ๊ด๋ฆฌ์๋ฅผ ์ถ๊ฐํ ๊ฒ์
๋๋ค.
ํจ์น โ ๋ค์ํ ํจํค์ง์ ๋ํ ํจ์น๋ฅผ ํธ๋ฆฌํ๊ฒ ์ ์ฅํ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ์๋ ๋ณ๋ ์น์
์์ ์ค๋ช
ํฉ๋๋ค.
์ด์ ์ธ๋ถ ํธ๋ฆฌ์ ๋ํ ์ค๋ช
ํ์ผ์ ์ถ๊ฐํด์ผ ํฉ๋๋ค. ์ด๋ฅผ ๋ด๋นํ๋ ํ์ผ์ external.desc, Config.in, external.mk 3๊ฐ์
๋๋ค.
์ธ๋ถ.desc ์ค์ ์ค๋ช ์ด ํฌํจ๋์ด ์์ต๋๋ค.
[alexey@alexey-pc my_tree]$ cat external.desc
name: my_tree
desc: My simple external-tree for article
์ฒซ ๋ฒ์งธ ์ค์ ์ ๋ชฉ์ ๋๋ค. ํฅํ ๋น๋ ๋ฃจํธ์์๋ ๋ณ์๋ฅผ ๋ง๋ญ๋๋ค. $(BR2_EXTERNAL_MY_TREE_PATH), ์ด์ ๋ธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ ๋ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์ ํ์ผ์ ๊ฒฝ๋ก๋ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ ์ ์์ต๋๋ค.
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt
๋ ๋ฒ์งธ ์ค์ ์ฌ๋์ด ์ฝ์ ์ ์๋ ์งง์ ์ค๋ช ์ ๋๋ค.
Config.in, external.mk โ ์ถ๊ฐ๋ ํจํค์ง๋ฅผ ์ค๋ช
ํ๋ ํ์ผ์
๋๋ค. ์์ ์ ํจํค์ง๋ฅผ ์ถ๊ฐํ์ง ์์ผ๋ฉด ์ด๋ฌํ ํ์ผ์ ๋น์ ๋ ์ ์์ต๋๋ค. ์ง๊ธ์ ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ํ ์ผ์
๋๋ค.
์ด์ ๋ณด๋์ defconfig์ ํ์ํ ํ์ผ์ด ํฌํจ๋ ์ธ๋ถ ํธ๋ฆฌ๊ฐ ์ค๋น๋์์ต๋๋ค. buildroot ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํ์ฌ ์ธ๋ถ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋๋ก ์ง์ ํด ๋ณด๊ฒ ์ต๋๋ค.
[alexey@alexey-pc buildroot]$ make BR2_EXTERNAL=../my_tree/ my_x86_board_defconfig
#
# configuration written to /home/alexey/dev/article/ramdisk/buildroot/.config
#
[alexey@alexey-pc buildroot]$ make menuconfig
์ฒซ ๋ฒ์งธ ๋ช ๋ น์์๋ ์ธ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. BR2_EXTERNAL=../my_tree/, ์ธ๋ถ ํธ๋ฆฌ์ ์ฌ์ฉ์ ๋ํ๋ ๋๋ค. ๋์์ ์ฌ์ฉํ ์ฌ๋ฌ ์ธ๋ถ ํธ๋ฆฌ๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ด ์์ ์ ํ ๋ฒ๋ง ์ํํ๋ฉด ๋๋ฉฐ ๊ทธ ํ์๋ ๋ค์๊ณผ ๊ฐ์ ํ์ผ ์ถ๋ ฅ/.br-external.mk๊ฐ ์์ฑ๋ฉ๋๋ค. ์ฌ์ฉ๋ ์ธ๋ถ ํธ๋ฆฌ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค.
[alexey@alexey-pc buildroot]$ cat output/.br-external.mk
#
# Automatically generated file; DO NOT EDIT.
#
BR2_EXTERNAL ?= /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
BR2_EXTERNAL_NAMES =
BR2_EXTERNAL_DIRS =
BR2_EXTERNAL_MKS =
BR2_EXTERNAL_NAMES += my_tree
BR2_EXTERNAL_DIRS += /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
BR2_EXTERNAL_MKS += /home/alexey/dev/article/ramdisk/my_small_linux/my_tree/external.mk
export BR2_EXTERNAL_my_tree_PATH = /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
export BR2_EXTERNAL_my_tree_DESC = My simple external-tree for article
์ค์ํ! ์ด ํ์ผ์ ๊ฒฝ๋ก๋ ์ ๋ ๊ฒฝ๋ก์ ๋๋ค!
๋ฉ๋ด์ ์ธ๋ถ ์ต์ ํญ๋ชฉ์ด ๋ํ๋ฉ๋๋ค.
์ด ํ์ ๋ฉ๋ด์๋ ์ธ๋ถ ํธ๋ฆฌ์ ํจํค์ง๊ฐ ํฌํจ๋ฉ๋๋ค. ์ด ์น์ ์ ํ์ฌ ๋น์ด ์์ต๋๋ค.
์ด์ ์ธ๋ถ ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ํ์ํ ๊ฒฝ๋ก๋ฅผ ๋ค์ ์์ฑํ๋ ๊ฒ์ด ๋ ์ค์ํฉ๋๋ค.
๋น๋ ์ต์ โ ๋น๋ ๋ฃจํธ ๊ตฌ์ฑ์ ์ ์ฅํ ์์น ์น์ ์๋ ์ ์ฅ๋ defconfig์ ๋ํ ์ ๋ ๊ฒฝ๋ก๊ฐ ์์ต๋๋ค. extgernal_tree์ ์ฌ์ฉ์ ์ง์ ํ๋ ์๊ฐ์ ํ์ฑ๋ฉ๋๋ค.
๋ํ ์์คํ ๊ตฌ์ฑ ์น์ ์์ ๊ฒฝ๋ก๋ฅผ ์์ ํฉ๋๋ค. ์์ฑ๋ ์ฌ์ฉ์๊ฐ ์๋ ํ ์ด๋ธ์ ๊ฒฝ์ฐ:
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt
์ปค๋ ์น์ ์์ ์ปค๋ ๊ตฌ์ฑ ๊ฒฝ๋ก๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/linux.config
์ด์ ์ด์ ๋ธ๋ฆฌ ์ค์ ์ธ๋ถ ํธ๋ฆฌ์ ํ์ผ์ด ์ฌ์ฉ๋ฉ๋๋ค. ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํ๊ฑฐ๋ ๋น๋ ๋ฃจํธ๋ฅผ ์ ๋ฐ์ดํธํ ๋ ์ต์ํ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
๋ฃจํธ fs ์ค๋ฒ๋ ์ด ์ถ๊ฐ:
์ด ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ๋ฉด ๋์ ํ์ผ ์์คํ
์์ ํ์ผ์ ์ฝ๊ฒ ์ถ๊ฐ/๊ต์ฒดํ ์ ์์ต๋๋ค.
ํ์ผ์ด ๋ฃจํธ fs ์ค๋ฒ๋ ์ด์ ์์ง๋ง ๋์์๋ ์์ผ๋ฉด ์ถ๊ฐ๋ฉ๋๋ค.
ํ์ผ์ด ๋ฃจํธ fs ์ค๋ฒ๋ ์ด์ ๋์์ ์์ผ๋ฉด ๊ต์ฒด๋ฉ๋๋ค.
๋จผ์ ๋ฃจํธ fs ์ค๋ฒ๋ ์ด ๋๋ ํฐ๋ฆฌ์ ๋ํ ๊ฒฝ๋ก๋ฅผ ์ค์ ํด ๋ณด๊ฒ ์ต๋๋ค. ์ด ์์
์ ์์คํ
๊ตฌ์ฑ โ ๋ฃจํธ ํ์ผ ์์คํ
์ค๋ฒ๋ ์ด ๋๋ ํฐ๋ฆฌ ์น์
์์ ์ํ๋ฉ๋๋ค.
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/
์ด์ ๋ ๊ฐ์ ํ์ผ์ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.
[alexey@alexey-pc my_small_linux]$ cat my_tree/board/my_x86_board/rootfs_overlay/etc/hosts
127.0.0.1 localhost
127.0.1.1 my_small_linux
8.8.8.8 google-public-dns-a.google.com.
[alexey@alexey-pc my_small_linux]$ cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt
This is new file from overlay
์ฒซ ๋ฒ์งธ ํ์ผ(my_tree/board/my_x86_board/rootfs_overlay/etc/hosts)์ ์์ฑ๋ ์์คํ ์ /etc/hosts ํ์ผ์ ๋์ฒดํฉ๋๋ค. ๋ ๋ฒ์งธ ํ์ผ(cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt)์ด ์ถ๊ฐ๋ฉ๋๋ค.
์ฐ๋ฆฌ๋ ๋ค์์ ์์งํ๊ณ ํ์ธํฉ๋๋ค.
์์คํ ์กฐ๋ฆฝ์ ๋ค์ํ ๋จ๊ณ์์ ์ฌ์ฉ์ ์ ์ ์คํฌ๋ฆฝํธ ์คํ
์ด๋ฏธ์ง๋ก ํจํค์ง๋๊ธฐ ์ ์ ๋์ ํ์ผ ์์คํ ๋ด๋ถ์์ ์ผ๋ถ ์์ ์ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ด ์์ ์ ์์คํ ๊ตฌ์ฑ ์น์ ์์ ์ํํ ์ ์์ต๋๋ค.
์ฒ์ ๋ ์คํฌ๋ฆฝํธ๋ ๋์ ํ์ผ ์์คํ ์ด ๊ตฌ์ถ๋ ํ ์ด๋ฏธ์ง๋ก ํจํค์ง๋๊ธฐ ์ ์ ์คํ๋ฉ๋๋ค. ์ฐจ์ด์ ์ fakeroot ์คํฌ๋ฆฝํธ๊ฐ fakeroot์ ์ปจํ ์คํธ์์ ์คํ๋์ด ๋ฃจํธ ์ฌ์ฉ์๋ก์์ ์์ ์ ์๋ฎฌ๋ ์ด์ ํ๋ค๋ ๊ฒ์ ๋๋ค.
๋ง์ง๋ง ์คํฌ๋ฆฝํธ๋ ์์คํ ์ด๋ฏธ์ง๊ฐ ์์ฑ๋ ํ ์คํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ์ํ ํ์ผ์ NFS ์๋ฒ์ ๋ณต์ฌํ๊ฑฐ๋ ์ฅ์น ํ์จ์ด ์ด๋ฏธ์ง๋ฅผ ์์ฑํ๋ ๋ฑ ์ถ๊ฐ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ฒ์ ๊ณผ ๋น๋ ๋ ์ง๋ฅผ /etc/์ ๊ธฐ๋กํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ฒ ์ต๋๋ค.
๋จผ์ ์ธ๋ถ ํธ๋ฆฌ์ ์ด ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ํ์ํ๊ฒ ์ต๋๋ค.
์ด์ ์คํฌ๋ฆฝํธ ์์ฒด๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
[alexey@alexey-pc buildroot]$ cat ../my_tree/board/my_x86_board/bef_cr_fs_img.sh
#!/bin/sh
echo "my small linux 1.0 pre alpha" > output/target/etc/mysmalllinux-release
date >> output/target/etc/mysmalllinux-release
์กฐ๋ฆฝ ํ ์์คํ ์์ ์ด ํ์ผ์ ๋ณผ ์ ์์ต๋๋ค.
์ค์ ๋ก ์คํฌ๋ฆฝํธ๊ฐ ์ปค์ง ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ์ค์ ํ๋ก์ ํธ์์๋ ๋ณด๋ค ๋ฐ์ ๋ ๊ฒฝ๋ก๋ฅผ ์ ํํ์ต๋๋ค.
- ์คํํ ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๋๋ ํ ๋ฆฌ(my_tree/board_my_x86_board/inside_fakeroot_scripts)๋ฅผ ์ผ๋ จ๋ฒํธ์ ํจ๊ป ๋ง๋ค์์ต๋๋ค. ์: 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
- ๋๋ ์ด ๋๋ ํฐ๋ฆฌ๋ฅผ ํต๊ณผํ์ฌ ๊ทธ ์์ ํฌํจ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฐจ์ ์ผ๋ก ์คํํ๋ ์คํฌ๋ฆฝํธ(my_tree/board_my_x86_board/run_inside_fakeroot.sh)๋ฅผ ์์ฑํ์ต๋๋ค.
- ์์คํ ๊ตฌ์ฑ -> fakeroot ํ๊ฒฝ ๋ด์์ ์คํํ๊ธฐ ์ํ ์ฌ์ฉ์ ์ ์ ์คํฌ๋ฆฝํธ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) ์น์ ์ ๋ณด๋ ์ค์ ์์ ์ด ์คํฌ๋ฆฝํธ๋ฅผ ์ง์ ํ์ต๋๋ค.
์ถ์ฒ : habr.com