ãã®ã»ã¯ã·ã§ã³ã§ã¯ãå¿ èŠãªã«ã¹ã¿ãã€ãº ãªãã·ã§ã³ã®ããã€ããèŠãŠãããŸãã ãã㯠buildroot ãæäŸãããã®ã®å®å šãªãªã¹ãã§ã¯ãããŸãããããããã¯éåžžã«æ©èœçã§ãããbuildroot èªäœã®ãã¡ã€ã«ã«ä»å ¥ããå¿ èŠã¯ãããŸããã
EXTERNAL ã¡ã«ããºã ã䜿çšããã«ã¹ã¿ãã€ãº
ãã ãããã®æ¹æ³ã¯ãç¹ã« buildroot ãæŽæ°ããå Žåã«ã¯ããŸã䟿å©ã§ã¯ãããŸããã ãã®åé¡ã解決ããä»çµã¿ããã å€éšããªãŒã ãã®æ¬è³ªã¯ãããŒããæ§æãããã±ãŒãžããã®ä»ã®ãã£ã¬ã¯ããªãå¥ã®ãã£ã¬ã¯ããªã«ä¿åã§ããããšã§ã (ããšãã°ãããã±ãŒãžã«ããããé©çšããããã« patches ãã£ã¬ã¯ããªã䜿çšããŸãã詳现ã¯å¥ã®ã»ã¯ã·ã§ã³ã§èª¬æããŸã)ãbuildroot èªäœããããã®ãã£ã¬ã¯ããªã«ããããè¿œå ããŸãããã®ãã£ã¬ã¯ããªã
泚: äžåºŠã«è€æ°ã®å€éšããªãŒããªãŒããŒã¬ã€ã§ããŸãã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
äžè¡ç®ã¯ã¿ã€ãã«ã§ãã å°æ¥çã«ã¯ buildroot ãå€æ°ãäœæããŸã $(BR2_EXTERNAL_MY_TREE_PATH)ãã¢ã»ã³ããªãæ§æãããšãã«äœ¿çšããå¿ èŠããããŸãã ããšãã°ããŠãŒã¶ãŒ ãã¡ã€ã«ãžã®ãã¹ã¯æ¬¡ã®ããã«èšå®ã§ããŸãã
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt
XNUMX è¡ç®ã¯ã人éãå€èªã§ããçã説æã§ãã
Config.inãexternal.mk â è¿œå ãããããã±ãŒãžã説æãããã¡ã€ã«ã ç¬èªã®ããã±ãŒãžãè¿œå ããªãå Žåããããã®ãã¡ã€ã«ã¯ç©ºã®ãŸãŸã«ããããšãã§ããŸãã ãšããããã¯ããã§ãããŸãã
ããã§ãããŒãã® defconfig ãšããã«å¿
èŠãªãã¡ã€ã«ãå«ãå€éšããªãŒã®æºåãæŽããŸããã buildroot ãã£ã¬ã¯ããªã«ç§»åããexternal-tree ã䜿çšããããã«æå®ããŸãããã
[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/ã¯ãå€éšããªãŒã®äœ¿çšã瀺ããŸããåæã«äœ¿çšããè€æ°ã®å€éšããªãŒãæå®ã§ããŸãããã®å Žåããããè¡ãå¿ èŠãããã®ã¯ XNUMX åã ãã§ãããã®åŸããã¡ã€ã« Output/.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
éèŠïŒ ãã®ãã¡ã€ã«å ã®ãã¹ã¯çµ¶å¯Ÿãã¹ã«ãªããŸãã
å€éšãªãã·ã§ã³é ç®ãã¡ãã¥ãŒã«è¡šç€ºãããŸãã
ãã®ãµãã¡ãã¥ãŒã«ã¯ãå€éšããªãŒããã®ããã±ãŒãžãå«ãŸããŸãã ãã®ã»ã¯ã·ã§ã³ã¯çŸåšç©ºã§ãã
ããã§ãexternal-tree ã䜿çšããããã«å¿ èŠãªãã¹ãæžãæããããšã®æ¹ãéèŠã§ãã
[ãã«ã ãªãã·ã§ã³] â [buildroot config ãä¿åããå Žæ] ã»ã¯ã·ã§ã³ã«ã¯ãä¿åããã 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
ããã§ãå€éšããªãŒã®ãã¡ã€ã«ãã¢ã»ã³ããªäžã«äœ¿çšãããŸãã å¥ã®ãã£ã¬ã¯ããªã«ç§»åãããšãããŸã㯠buildroot ãæŽæ°ãããšãã«ãæå°éã®åé¡ãçºçããŸãã
root fs ãªãŒããŒã¬ã€ãè¿œå ããŸãã
ãã®ã¡ã«ããºã ã«ãããã¿ãŒã²ãã ãã¡ã€ã« ã·ã¹ãã å
ã®ãã¡ã€ã«ãç°¡åã«è¿œå /眮æã§ããŸãã
ãã¡ã€ã«ãã«ãŒã fs ãªãŒããŒã¬ã€ã«ããããã¿ãŒã²ããã«ãªãå Žåã¯è¿œå ãããŸãã
ãã¡ã€ã«ã root fs ãªãŒããŒã¬ã€ãšã¿ãŒã²ããã«ããå Žåããã®ãã¡ã€ã«ã¯çœ®ãæããããŸãã
ãŸããroot fs overlay dir ãžã®ãã¹ãèšå®ããŸãããã ããã¯ã[ã·ã¹ãã æ§æ] â [ã«ãŒã ãã¡ã€ã«ã·ã¹ãã ãªãŒããŒã¬ã€ ãã£ã¬ã¯ããª] ã»ã¯ã·ã§ã³ã§è¡ããŸãã
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/
次ã«ãXNUMX ã€ã®ãã¡ã€ã«ãäœæããŸãããã
[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 ãã¡ã€ã«ã眮ãæããŸãã 86 çªç®ã®ãã¡ã€ã« (cat my_tree/board/my_xXNUMX_board/rootfs_overlay/new_file.txt) ãè¿œå ãããŸãã
ç§ãã¡ã¯ä»¥äžãåéãããã§ãã¯ããŸãã
ã·ã¹ãã çµã¿ç«ãŠã®ããŸããŸãªæ®µéã§ã®ã«ã¹ã¿ãã€ãº ã¹ã¯ãªããã®å®è¡
å€ãã®å Žåãã¿ãŒã²ãã ãã¡ã€ã« ã·ã¹ãã ãã€ã¡ãŒãžã«ããã±ãŒãžåããåã«ãã¿ãŒã²ãã ãã¡ã€ã« ã·ã¹ãã å ã§äœããã®äœæ¥ãå®è¡ããå¿ èŠããããŸãã
ããã¯ããã·ã¹ãã æ§æãã»ã¯ã·ã§ã³ã§è¡ãããšãã§ããŸãã
æåã® XNUMX ã€ã®ã¹ã¯ãªããã¯ãã¿ãŒã²ãã ãã¡ã€ã« ã·ã¹ãã ãæ§ç¯ãããåŸãã€ã¡ãŒãžã«ããã±ãŒãžåãããåã«å®è¡ãããŸãã éãã¯ãfakeroot ã¹ã¯ãªããã fakeroot ã®ã³ã³ããã¹ãã§å®è¡ãããroot ãŠãŒã¶ãŒãšããŠã®äœæ¥ãã·ãã¥ã¬ãŒãããããšã§ãã
æåŸã®ã¹ã¯ãªããã¯ãã·ã¹ãã ã€ã¡ãŒãžã®äœæåŸã«å®è¡ãããŸãã ããã§è¿œå ã®ã¢ã¯ã·ã§ã³ãå®è¡ã§ããŸããããšãã°ãå¿ èŠãªãã¡ã€ã«ã 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