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