Buildroot - အပိုင်သ 2။ သင်၏ဘုတ်ဖလဲ့စည်သပုံကိုဖန်တီသခဌင်သ; ပဌင်ပသစ်ပင်၊ rootfs-အထပ်ထပ်၊ အပဌီသတည်ဆောက်မဟု scripts မျာသကိုအသုံသပဌုခဌင်သ။

ကကဏ္ဍတလင် ကျလန်ုပ်လိုအပ်သော စိတ်ကဌိုက်ရလေသချယ်မဟုအချို့ကို ကဌည့်ရဟုပါသည်။ ၎င်သသည် buildroot မဟ ပေသဆောင်သည့် အလုံသစုံစာရင်သမဟုတ်သော်လည်သ ၎င်သတို့သည် အတော်လေသ အလုပ်လုပ်ရပဌီသ buildroot ကိုယ်တိုင်၏ ဖိုင်မျာသတလင် ဝင်ရောက်စလက်ဖက်ရန် မလိုအပ်ပါ။

စိတ်ကဌိုက်ပဌင်ဆင်ရန်အတလက် ပဌင်ပယန္တရာသကို အသုံသပဌုခဌင်သ။

ယခင်ဆောင်သပါသ၌ ဘုတ်အဖလဲ့၏ defconfig နဟင့် လိုအပ်သောဖိုင်မျာသကို Buildroot လမ်သညလဟန်သို့ တိုက်ရိုက်ထည့်သလင်သခဌင်သဖဌင့် သင့်ကိုယ်ပိုင်ဖလဲ့စည်သပုံထည့်သလင်သခဌင်သ၏ ရိုသရဟင်သသောဥပမာတစ်ခုကို ကျလန်ုပ်တို့ကဌည့်ရဟုခဲ့သည်။

ဒါပေမယ့် ဒီနည်သလမ်သက အထူသသဖဌင့် buildroot ကို update လုပ်တဲ့အခါ သိပ်အဆင်ပဌေမဟာ မဟုတ်ပါဘူသ။ ဒီပဌဿနာကို ဖဌေရဟင်သဖို့ ယန္တရာသရဟိတယ်။ ပဌင်ပသစ်ပင်. ၎င်သ၏အနဟစ်သာရမဟာ သင်သည် board၊ configs၊ packages မျာသနဟင့် အခဌာသသော directory မျာသကို သီသခဌာသ directory တစ်ခုတလင် သိမ်သဆည်သထာသနိုင်သည် (ဥပမာ၊ packages မျာသသို့ patches မျာသအသုံသပဌုရန် 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 ၏ဖလဲ့စည်သပုံကိုပဌန်လုပ်သည်။

directory ကို ပျဉ်ပဌာသ ကျလန်ုပ်တို့၏ကိစ္စတလင် ဘုတ်တစ်ခုစီအတလက် သီသခဌာသဖိုင်မျာသပါရဟိသည်-

  • bef_cr_fs_img.sh သည် ပစ်မဟတ်ဖိုင်စနစ်ကို တည်ဆောက်ပဌီသနောက်၊ သို့သော် ၎င်သကို ပုံမျာသအဖဌစ် မထုပ်ပိုသမီတလင် လုပ်ဆောင်မည့် script တစ်ခုဖဌစ်သည်။ ကျလန်ုပ်တို့သည် ၎င်သကို အနာဂတ်တလင် အသုံသပဌုပါမည်။
  • linux.config - kernel ဖလဲ့စည်သမဟု
  • rootfs_overlay - ပစ်မဟတ်ဖိုင်စနစ်၏ထိပ်တလင် ထပ်တင်ရန် လမ်သညလဟန်
  • users.txt - ဖန်တီသမည့် သုံသစလဲသူမျာသကို ဖော်ပဌသည့် ဖိုင်တစ်ခု

directory ကို configs မျာသ ကျလန်ုပ်တို့၏ဘုတ်အဖလဲ့မျာသ၏ defconfig ပါရဟိသည်။ ငါတို့မဟာ တစ်ခုပဲရဟိတယ်။

အထုပ် - ကျလန်ုပ်တို့၏ packages မျာသနဟင့်အတူ catalog ။ ကနညသတလင်၊ buildroot တလင် အကန့်အသတ်ရဟိသော ပက်ကေ့ဂျ်မျာသကို တည်ဆောက်ရန်အတလက် ဖော်ပဌချက်မျာသနဟင့် စည်သမျဉ်သမျာသ ပါရဟိသည်။ နောက်ပိုင်သတလင် icewm window manager နဟင့် Slim graphical login manager ကို ကနေရာတလင် ထည့်သလင်သပါမည်။
Patch ကို — မတူညီသော ပက်ကေ့ခ်ျမျာသအတလက် သင်၏ ဖာထေသမဟုမျာသကို အဆင်ပဌေစလာ သိမ်သဆည်သနိုင်စေပါသည်။ အသေသစိတ်အချက်အလက်မျာသကို အောက်ပါ သီသခဌာသကဏ္ဍတလင် ဖော်ပဌထာသသည်။
ယခု ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ ပဌင်ပ-သစ်ပင်အတလက် ဖော်ပဌချက်ဖိုင်မျာသကို ထည့်သလင်သရန် လိုအပ်ပါသည်။ ကအတလက် တာဝန်ရဟိသော ဖိုင် ၃ ဖိုင် ရဟိသည်- external.desc၊ Config.in၊ external.mk။

external.desc အမဟန်တကယ်ဖော်ပဌချက်ပါရဟိသည်။

[alexey@alexey-pc my_tree]$ cat external.desc 
name: my_tree
desc: My simple external-tree for article

ပထမစာကဌောင်သက ခေါင်သစဉ်ပါ။ အနာဂတ် buildroot တလင် variable တစ်ခုကိုဖန်တီသပါ။ $(BR2_EXTERNAL_MY_TREE_PATH)တပ်ဆင်မဟုအာသ ပဌင်ဆင်သတ်မဟတ်ရာတလင် အသုံသပဌုသင့်သည်။ ဥပမာအာသဖဌင့်၊ အသုံသပဌုသူဖိုင်သို့ လမ်သကဌောင်သကို အောက်ပါအတိုင်သ သတ်မဟတ်နိုင်သည်။

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

ဒုတိယစာကဌောင်သသည် တိုတို၊ လူသာသဖတ်နိုင်သော ဖော်ပဌချက်ဖဌစ်သည်။

Config.in၊ external.mk — ထပ်လောင်သပက်ကေ့ဂျ်မျာသကိုဖော်ပဌရန် ဖိုင်မျာသ။ သင့်ကိုယ်ပိုင် ပက်ကေ့ဂျ်မျာသကို မထည့်ပါက ကဖိုင်မျာသကို ဗလာဖဌစ်သလာသနိုင်သည်။ လောလောဆယ်တော့ ဒါပဲလုပ်မယ်။
ယခု ကျလန်ုပ်တို့တလင် ကျလန်ုပ်တို့၏ဘုတ်အဖလဲ့၏ defconfig နဟင့် လိုအပ်သောဖိုင်မျာသပါ ၀ င်သောကျလန်ုပ်တို့၏ပဌင်ပသစ်ပင်အဆင်သင့်ရဟိသည်။ buildroot directory သို့သလာသ၍ 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

ပထမ command မဟာ argument ကို သုံသပါတယ်။ 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

အရေသကဌီသသည်! ကဖိုင်ရဟိ လမ်သကဌောင်သမျာသသည် လုံသဝဖဌစ်လိမ့်မည်။

ပဌင်ပရလေသချယ်စရာမျာသ မီနူသတလင် ပေါ်လာသည်-

Buildroot - အပိုင်သ 2။ သင်၏ဘုတ်ဖလဲ့စည်သပုံကိုဖန်တီသခဌင်သ; ပဌင်ပသစ်ပင်၊ rootfs-အထပ်ထပ်၊ အပဌီသတည်ဆောက်မဟု scripts မျာသကိုအသုံသပဌုခဌင်သ။

ကအခလဲမီနူသတလင် ကျလန်ုပ်တို့၏ ပဌင်ပ-သစ်ပင်မဟ ကျလန်ုပ်တို့၏ ပက်ကေ့ဂျ်မျာသပါရဟိသည်။ ကကဏ္ဍသည် လောလောဆယ် ဗလာဖဌစ်နေသည်။

ယခုအခါ ပဌင်ပ-သစ်ပင်ကို အသုံသပဌုရန် လိုအပ်သော လမ်သကဌောင်သမျာသကို ပဌန်လည်ရေသသာသရန် ကျလန်ုပ်တို့အတလက် ပိုအရေသကဌီသပါသည်။

Build options → တည်နေရာကို buildroot config ကဏ္ဍတလင်၊ သိမ်သဆည်သထာသသော defconfig သို့ လုံသဝလမ်သကဌောင်သတစ်ခုရဟိမည်ကို ကျေသဇူသပဌု၍ သတိပဌုပါ။ extgernal_tree အသုံသပဌုမဟုကို သတ်မဟတ်ချိန်တလင် ၎င်သကို ဖလဲ့စည်သထာသသည်။

စနစ်ဖလဲ့စည်သပုံအပိုင်သရဟိ လမ်သကဌောင်သမျာသကိုလည်သ ပဌင်ပေသပါမည်။ ဖန်တီသထာသသောအသုံသပဌုသူမျာသပါသော ဇယာသအတလက်-

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

Kernel ကဏ္ဍတလင်၊ kernel ဖလဲ့စည်သမဟုပုံစံသို့ လမ်သကဌောင်သပဌောင်သပါ-

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/linux.config

ယခု ကျလန်ုပ်တို့၏ ပဌင်ပ-သစ်ပင်မဟ ကျလန်ုပ်တို့၏ဖိုင်မျာသကို စုဝေသစဉ်အတလင်သ အသုံသပဌုပါမည်။ အခဌာသ directory သို့ပဌောင်သခဌင်သ သို့မဟုတ် buildroot ကို အပ်ဒိတ်လုပ်သောအခါ၊ ကျလန်ုပ်တို့တလင် ပဌဿနာအနည်သဆုံသရဟိပါမည်။

root fs ထပ်ဆင့်ထည့်ခဌင်သ-

ကယန္တရာသသည် သင့်အာသ ပစ်မဟတ်ဖိုင်စနစ်တလင် ဖိုင်မျာသကို အလလယ်တကူ ထည့်သလင်သ/အစာသထိုသနိုင်စေပါသည်။
ဖိုင်သည် root fs ထပ်ဆင့်တလင်ရဟိသော်လည်သ ပစ်မဟတ်တလင်မဟုတ်ပါက ၎င်သကို ထပ်ထည့်မည်ဖဌစ်သည်။
ဖိုင်သည် root fs ထပ်ဆင့်တလင်ရဟိပဌီသ ပစ်မဟတ်တလင်ရဟိနေပါက၊ ၎င်သကို အစာသထိုသမည်ဖဌစ်သည်။
ပထမညသစလာ fs overlay dir ကို root လုပ်ရန်လမ်သကဌောင်သကိုသတ်မဟတ်ကဌပါစို့။ System configuration → Root filesystem overlay directories ကဏ္ဍတလင် ၎င်သကို လုပ်ဆောင်သည်-

$(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) ကို ပေါင်သထည့်ပါမည်။

ကျလန်ုပ်တို့စုဆောင်သပဌီသ စစ်ဆေသပါ-

Buildroot - အပိုင်သ 2။ သင်၏ဘုတ်ဖလဲ့စည်သပုံကိုဖန်တီသခဌင်သ; ပဌင်ပသစ်ပင်၊ rootfs-အထပ်ထပ်၊ အပဌီသတည်ဆောက်မဟု scripts မျာသကိုအသုံသပဌုခဌင်သ။

စနစ်စုဝေသမဟု အဆင့်မျာသတလင် စိတ်ကဌိုက်ပဌင်ဆင်ခဌင်သ scripts မျာသကို လုပ်ဆောင်ခဌင်သ။

ပုံမျာသထဲသို့မထည့်မီ ပစ်မဟတ်ဖိုင်စနစ်အတလင်သ အလုပ်အချို့လုပ်ဆောင်ရန် လိုအပ်သည်။

၎င်သကို စနစ်ဖလဲ့စည်သမဟုကဏ္ဍတလင် လုပ်ဆောင်နိုင်သည်-

Buildroot - အပိုင်သ 2။ သင်၏ဘုတ်ဖလဲ့စည်သပုံကိုဖန်တီသခဌင်သ; ပဌင်ပသစ်ပင်၊ rootfs-အထပ်ထပ်၊ အပဌီသတည်ဆောက်မဟု scripts မျာသကိုအသုံသပဌုခဌင်သ။

ပစ်မဟတ်ဖိုင်စနစ်တည်ဆောက်ပဌီသနောက် ပထမဆုံသ script နဟစ်ခုကို လုပ်ဆောင်ပဌီသဖဌစ်သော်လည်သ ၎င်သကို ပုံမျာသအဖဌစ် မထုပ်ပိုသမီတလင် လုပ်ဆောင်သည်။ ကလာခဌာသချက်မဟာ fakeroot script ကို root အသုံသပဌုသူအဖဌစ် အတုယူလုပ်ဆောင်သည့် fakeroot ၏အခဌေအနေတလင် လုပ်ဆောင်ခဌင်သဖဌစ်သည်။

စနစ်ပုံမျာသကိုဖန်တီသပဌီသနောက်နောက်ဆုံသ script ကိုလုပ်ဆောင်သည်။ ၎င်သတလင် နောက်ထပ်လုပ်ဆောင်ချက်မျာသကို သင်လုပ်ဆောင်နိုင်သည်၊ ဥပမာ၊ လိုအပ်သောဖိုင်မျာသကို NFS ဆာဗာတစ်ခုသို့ ကူသယူပါ သို့မဟုတ် သင့်စက်၏ firmware ပုံတစ်ခုဖန်တီသပါ။

ဥပမာအနေနဲ့၊ ဗာသရဟင်သနဲ့ တည်ဆောက်မယ့်ရက်စလဲကို /etc/ မဟာရေသမယ့် script တစ်ခုကို ဖန်တီသပါမယ်။
ညသစလာ ကျလန်ုပ်သည် ကျလန်ုပ်၏ ပဌင်ပ-သစ်ပင်ရဟိ ကဖိုင်သို့ လမ်သကဌောင်သကို ညလဟန်ပဌပါမည်-

Buildroot - အပိုင်သ 2။ သင်၏ဘုတ်ဖလဲ့စည်သပုံကိုဖန်တီသခဌင်သ; ပဌင်ပသစ်ပင်၊ rootfs-အထပ်ထပ်၊ အပဌီသတည်ဆောက်မဟု scripts မျာသကိုအသုံသပဌုခဌင်သ။

ယခု ဇာတ်ညလဟန်သကိုယ်တိုင်

[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

တပ်ဆင်ပဌီသနောက်၊ ကဖိုင်ကို system တလင်တလေ့နိုင်သည်။

လက်တလေ့မဟာ ဇာတ်ညလဟန်သကဌီသတလေ ဖဌစ်လာနိုင်တယ်။ ထို့ကဌောင့်၊ အမဟန်တကယ် ပရောဂျက်တလင် ကျလန်ုပ်သည် ပိုမိုအဆင့်မဌင့်သော လမ်သကဌောင်သကို လျဟောက်လဟမ်သခဲ့သည်။

  1. နံပါတ်စဉ်မျာသဖဌင့် လုပ်ဆောင်ရမည့် scripts မျာသပါရဟိသော လမ်သညလဟန်တစ်ခု (my_tree/board_my_x86_board/inside_fakeroot_scripts) ကို ဖန်တီသထာသပါသည်။ ဥပမာအာသဖဌင့်၊ 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. ကျလန်ုပ်သည် ကလမ်သညလဟန်ကိုဖဌတ်သန်သပဌီသ ၎င်သတလင်ပါရဟိသော Script မျာသကို ဆက်တိုက်လုပ်ဆောင်ပေသသော script (my_tree/board_my_x86_board/run_inside_fakeroot.sh)
  3. Fakeroot ပတ်၀န်သကျင်အတလင်သ လုပ်ဆောင်ရန် ဘုတ်ဆက်တင်မျာသတလင် ကဇာတ်ညလဟန်သကို သတ်မဟတ်ပေသသည် ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) ကဏ္ဍ

source: www.habr.com

မဟတ်ချက် Add