Buildroot - ክፍል 2. የቦርድ ውቅር መፍጠር; ውጫዊ ዛፍ, rootfs-overlay, post-build ስክሪፕቶችን በመጠቀም

በዚህ ክፍል እኔ የሚያስፈልጉኝን አንዳንድ የማበጀት አማራጮችን እመለከታለሁ። ይህ buildroot የሚያቀርበው ሙሉ ዝርዝር አይደለም ነገር ግን በጣም ተግባራዊ ናቸው እና በራሱ የBuildroot ፋይሎች ውስጥ ጣልቃ መግባት አያስፈልጋቸውም።

ለማበጀት የውጫዊውን ዘዴ በመጠቀም

በቀደመው መጣጥፍ የቦርዱን defconfig እና አስፈላጊዎቹን ፋይሎች በቀጥታ ወደ Buildroot ማውጫ በማከል የእራስዎን ውቅር የመጨመር ቀላል ምሳሌ ተመልክተናል።

ነገር ግን ይህ ዘዴ በተለይ 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

እንደሚመለከቱት, በአጠቃላይ መዋቅሩ የገንቢውን መዋቅር ይደግማል.

ማውጫ ሰሌዳ በእኛ ሁኔታ ለእያንዳንዱ ሰሌዳ የተወሰኑ ፋይሎችን ይዟል፡-

  • bef_cr_fs_img.sh ኢላማውን የፋይል ስርዓት ከተገነባ በኋላ ግን ወደ ምስሎች ከማሸጉ በፊት የሚፈጸም ስክሪፕት ነው። ወደፊትም እንጠቀማለን።
  • linux.config - የከርነል ውቅር
  • rootfs_overlay - በታለመው የፋይል ስርዓት አናት ላይ የሚደራረብበት ማውጫ
  • users.txt - የሚፈጠሩትን ተጠቃሚዎች የሚገልጽ ፋይል

ማውጫ ውቅሮች የእኛን ሰሌዳዎች defconfig ይዟል. ያለን አንድ ብቻ ነው።

ጥቅል - ካታሎግ ከፓኬጆቻችን ጋር። መጀመሪያ ላይ, buildroot የተወሰኑ ጥቅሎችን ለመገንባት መግለጫዎችን እና ደንቦችን ይዟል. በኋላ የ icewm መስኮት አስተዳዳሪን እና የ Slim ግራፊክ መግቢያ አስተዳዳሪን እዚህ እንጨምራለን።
ጥገናዎች - ለተለያዩ ጥቅሎች የእርስዎን ጥገናዎች በተመጣጣኝ ሁኔታ እንዲያከማቹ ያስችልዎታል። ከዚህ በታች በተለየ ክፍል ተጨማሪ ዝርዝሮች.
አሁን ለውጫዊ-ዛፍ የማብራሪያ ፋይሎችን ማከል አለብን. ለዚህ ተጠያቂ የሆኑ 3 ፋይሎች አሉ ውጫዊ.desc, Config.in, external.mk.

ውጫዊ.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

ሁለተኛው መስመር አጭር፣ ሰው ሊነበብ የሚችል መግለጫ ነው።

Config.in፣ external.mk - የተጨመሩ ጥቅሎችን ለመግለጽ ፋይሎች. የእራስዎን ጥቅሎች ካላከሉ, እነዚህ ፋይሎች ባዶ ሊተዉ ይችላሉ. ለአሁኑ፣ እኛ የምናደርገው ይህንኑ ነው።
አሁን የቦርዳችንን ዲፍፍፍፍፍ እና የሚፈልጓቸውን ፋይሎች የያዘ የእኛ ውጫዊ-ዛፍ ተዘጋጅተናል። ወደ 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_Tre/, የውጭ ዛፍ አጠቃቀምን የሚያመለክት, በተመሳሳይ ጊዜ ጥቅም ላይ የሚውሉ ብዙ ውጫዊ ዛፎችን መግለጽ ይችላሉ, በዚህ ሁኔታ, ይህንን አንድ ጊዜ ብቻ ማድረግ ያስፈልግዎታል, ከዚያ በኋላ የፋይል ውፅዓት / .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-overlay, post-build ስክሪፕቶችን በመጠቀም

ይህ ንኡስ ሜኑ ፓኬጆቻችንን ከውጪ-ዛፋችን ይይዛል። ይህ ክፍል በአሁኑ ጊዜ ባዶ ነው።

አሁን ውጫዊ-ዛፍ ለመጠቀም አስፈላጊ የሆኑትን መንገዶች እንደገና መፃፍ ለእኛ በጣም አስፈላጊ ነው.

እባክዎን በግንብ አማራጮች → ቦታ የ buildroot config ክፍልን ለማስቀመጥ ፣ ወደተቀመጠው የዴፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍፍልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልልል። የተቋቋመው የ extgernal_ዛፍ አጠቃቀምን በሚገልጽበት ጊዜ ነው።

እንዲሁም በስርዓት ውቅር ክፍል ውስጥ ያሉትን መንገዶች እናስተካክላለን. ለተፈጠሩ ተጠቃሚዎች ሰንጠረዥ፡-

$(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 ተደራቢ መጨመር፡-

ይህ ዘዴ በዒላማው የፋይል ስርዓት ውስጥ ፋይሎችን በቀላሉ ለመጨመር/ለመተካት ያስችላል።
ፋይሉ በ root fs ተደራቢ ውስጥ ከሆነ ፣ ግን በዒላማው ውስጥ ካልሆነ ፣ ከዚያ ይጨመራል።
ፋይሉ በ root fs ተደራቢ እና በዒላማ ውስጥ ከሆነ, ከዚያም ይተካዋል.
መጀመሪያ የ root fs ተደራቢ dir መንገዱን እናዘጋጅ። ይህ በስርዓት ውቅር → የስር ፋይል ስርዓት ተደራቢ ማውጫዎች ክፍል ውስጥ ይከናወናል፡

$(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)/የወዘተ/አስተናጋጆችን ፋይል በተጠናቀቀው ስርዓት ይተካል። ሁለተኛው ፋይል (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) ይታከላል።

እንሰበስባለን እና እንፈትሻለን፡-

Buildroot - ክፍል 2. የቦርድ ውቅር መፍጠር; ውጫዊ ዛፍ, rootfs-overlay, post-build ስክሪፕቶችን በመጠቀም

በተለያዩ የስርዓት ስብሰባ ደረጃዎች ላይ የማበጀት ስክሪፕቶችን መፈጸም

ብዙውን ጊዜ በዒላማው የፋይል ስርዓት ውስጥ ወደ ምስሎች ከመታሸጉ በፊት አንዳንድ ስራዎችን ማከናወን ያስፈልግዎታል.

ይህ በስርዓት ውቅር ክፍል ውስጥ ሊከናወን ይችላል-

Buildroot - ክፍል 2. የቦርድ ውቅር መፍጠር; ውጫዊ ዛፍ, rootfs-overlay, post-build ስክሪፕቶችን በመጠቀም

የመጀመሪያዎቹ ሁለት ስክሪፕቶች የሚከናወኑት የታለመው የፋይል ስርዓት ከተገነባ በኋላ ነው, ነገር ግን ወደ ምስሎች ከመታሸጉ በፊት. ልዩነቱ የ fakeroot ስክሪፕት የሚሰራው በ fakeroot አውድ ውስጥ ሲሆን ይህም ስራን እንደ ስር ተጠቃሚ ያደርገዋል።

የመጨረሻው ስክሪፕት የሚከናወነው የስርዓቱ ምስሎች ከተፈጠሩ በኋላ ነው. በእሱ ውስጥ ተጨማሪ ድርጊቶችን ማከናወን ይችላሉ, ለምሳሌ, አስፈላጊ የሆኑትን ፋይሎች ወደ NFS አገልጋይ ይቅዱ ወይም የመሣሪያዎን firmware ምስል ይፍጠሩ.

እንደ ምሳሌ፣ ስሪቱን የሚጽፍ እና ቀኑን ወደ /etc/ የሚገነባ ስክሪፕት እፈጥራለሁ።
በመጀመሪያ ወደዚህ ፋይል የሚወስደውን መንገድ በውጫዊ ዛፍዬ ውስጥ እጠቁማለሁ፡-

Buildroot - ክፍል 2. የቦርድ ውቅር መፍጠር; ውጫዊ ዛፍ, rootfs-overlay, post-build ስክሪፕቶችን በመጠቀም

እና አሁን ስክሪፕቱ ራሱ:

[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

ከተሰበሰበ በኋላ, ይህን ፋይል በስርዓቱ ላይ ማየት ይችላሉ.

በተግባር, ስክሪፕቱ ትልቅ ሊሆን ይችላል. ስለዚህ ፣ በእውነተኛው ፕሮጀክት ውስጥ የበለጠ የላቀ መንገድ ወሰድኩ፡-

  1. የሚፈጸሙ ስክሪፕቶች ያሉበት ማውጫ (My_tree/board_my_x86_board/inside_fakrooot_scripts) ፈጠርኩኝ፣ ተከታታይ ቁጥሮች። ለምሳሌ፣ 0001-add-my_small_linux-version.sh፣ 0002-clear-apache-root-dir.sh
  2. በዚህ ማውጫ ውስጥ የሚያልፍ እና በውስጡ ያሉትን ስክሪፕቶች በቅደም ተከተል የሚያስፈጽም ስክሪፕት (my_tree/board_my_x86_board/run_inside_fakeroot.sh) ጻፍኩኝ።
  3. ይህንን ስክሪፕት በስርዓት ውቅረት ውስጥ በቦርድ ቅንጅቶች ውስጥ ገልፀዋል -> ብጁ ስክሪፕቶች በሐሰት አከባቢ ውስጥ እንዲሄዱ ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakrooot.sh) ክፍል

ምንጭ: hab.com

አስተያየት ያክሉ