Buildroot - 2 කොටස. ඔබේ පුවරු වින්‍යාසය නිර්මාණය කිරීම; බාහිර ගස, rootfs-overlay, post-build scripts භාවිතා කිරීම

මෙම කොටසේදී මම මට අවශ්‍ය අභිරුචිකරණ විකල්ප කිහිපයක් දෙස බලමි. මෙය buildroot ලබා දෙන දේ පිළිබඳ සම්පූර්ණ ලැයිස්තුවක් නොවේ, නමුත් ඒවා තරමක් ක්‍රියාකාරී වන අතර buildroot හි ගොනු තුළම මැදිහත්වීමක් අවශ්‍ය නොවේ.

අභිරුචිකරණය සඳහා බාහිර යාන්ත්‍රණය භාවිතා කිරීම

පෙර ලිපියේ පුවරුවේ defconfig සහ අවශ්‍ය ලිපිගොනු කෙලින්ම Buildroot නාමාවලියට එක් කිරීමෙන් ඔබේම වින්‍යාසය එකතු කිරීමේ සරල උදාහරණයක් අපි බැලුවෙමු.

නමුත් මෙම ක්රමය ඉතා පහසු නොවේ, විශේෂයෙන්ම 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 - ඉලක්ක ගොනු පද්ධතියට උඩින් ඇති බහලුම
  • user.txt - නිර්මාණය කළ යුතු පරිශීලකයින් විස්තර කරන ගොනුවකි

බහලුම වින්‍යාස අපගේ පුවරු වල defconfig අඩංගු වේ. අපට ඇත්තේ එකක් පමණි.

පැකේජය - අපගේ පැකේජ සමඟ නාමාවලිය. මුලදී, buildroot හි සීමිත පැකේජ ගණනක් ගොඩනැගීම සඳහා විස්තර සහ නීති අඩංගු වේ. පසුව අපි මෙහි icewm window manager එක සහ Slim graphical login manager එක එකතු කරමු.
පැච් - විවිධ පැකේජ සඳහා ඔබේ පැච් පහසුවෙන් ගබඩා කිරීමට ඔබට ඉඩ සලසයි. වැඩි විස්තර පහත වෙනම කොටසකින්.
දැන් අපි අපේ බාහිර-ගස සඳහා විස්තර ගොනු එකතු කළ යුතුයි. මේ සඳහා වගකිව යුතු ගොනු 3 ක් ඇත: external.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 - එකතු කරන ලද පැකේජ විස්තර කිරීමට ගොනු. ඔබ ඔබේම පැකේජ එකතු නොකරන්නේ නම්, මෙම ගොනු හිස්ව තැබිය හැක. දැනට, අපි කරන්නේ එයයි.
දැන් අපි අපගේ පුවරුවේ 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/, බාහිර ගසක් භාවිතා කිරීම පෙන්නුම් කරයි. ඔබට එකවර භාවිතා කිරීම සඳහා බාහිර-ගස් කිහිපයක් නියම කළ හැක.මෙම අවස්ථාවේදී, ඔබ මෙය කළ යුත්තේ එක් වරක් පමණි, ඉන්පසුව 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

වැදගත්! මෙම ගොනුවේ ඇති මාර්ග නිරපේක්ෂ වනු ඇත!

මෙනුවේ බාහිර විකල්ප අයිතමයක් දර්ශනය වී ඇත:

Buildroot - 2 කොටස. ඔබේ පුවරු වින්‍යාසය නිර්මාණය කිරීම; බාහිර ගස, rootfs-overlay, post-build scripts භාවිතා කිරීම

මෙම උප මෙනුව අපගේ බාහිර-ගසෙන් අපගේ පැකේජ අඩංගු වේ. මෙම කොටස දැනට හිස් ය.

දැන් අපට වඩා වැදගත් වන්නේ බාහිර-ගස භාවිතා කිරීමට අවශ්‍ය මාර්ග නැවත ලිවීමයි.

Build options → Location to save 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 overlay එකතු කිරීම:

මෙම යාන්ත්‍රණය මඟින් ඉලක්කගත ගොනු පද්ධතියට පහසුවෙන් ගොනු එක් කිරීමට/ප්‍රතිස්ථාපනය කිරීමට ඉඩ සලසයි.
ගොනුව root fs උඩින් ඇති නමුත් ඉලක්කයේ නොමැති නම්, එය එකතු වේ
ගොනුව root fs උඩින් සහ ඉලක්කයේ තිබේ නම්, එය ප්‍රතිස්ථාපනය වේ.
මුලින්ම fs overlay dir කියන තැනට path එක සකසමු. මෙය පද්ධති වින්‍යාසය → Root ගොනු පද්ධති ආවරණ නාමාවලි කොටසෙහි සිදු කෙරේ:

$(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-overlay, post-build scripts භාවිතා කිරීම

පද්ධති එකලස් කිරීමේ විවිධ අවස්ථා වලදී අභිරුචිකරණ ස්ක්‍රිප්ට් ක්‍රියාත්මක කිරීම

බොහෝ විට ඉලක්කගත ගොනු පද්ධතිය රූපවලට ඇසුරුම් කිරීමට පෙර එය තුළ යම් කාර්යයක් කිරීමට ඔබට අවශ්‍ය වේ.

මෙය පද්ධති වින්‍යාස කොටසේ සිදු කළ හැක:

Buildroot - 2 කොටස. ඔබේ පුවරු වින්‍යාසය නිර්මාණය කිරීම; බාහිර ගස, rootfs-overlay, post-build scripts භාවිතා කිරීම

පළමු ස්ක්‍රිප්ට් දෙක ක්‍රියාත්මක වන්නේ ඉලක්ක ගොනු පද්ධතිය ගොඩනඟා ගත් පසුව, නමුත් එය රූපවලට ඇසුරුම් කිරීමට පෙරය. වෙනස වන්නේ ෆේක්රූට් ස්ක්‍රිප්ට් එක ක්‍රියාත්මක වන්නේ ෆේක්රූට් සන්දර්භය තුළ වන අතර එය මූල පරිශීලකයා ලෙස වැඩ කිරීම අනුකරණය කරයි.

අවසාන ස්ක්‍රිප්ට් එක ක්‍රියාත්මක වන්නේ පද්ධති රූප නිර්මාණය කිරීමෙන් පසුවය. ඔබට එහි අමතර ක්‍රියා සිදු කළ හැකිය, උදාහරණයක් ලෙස, අවශ්‍ය ගොනු NFS සේවාදායකයකට පිටපත් කරන්න හෝ ඔබේ උපාංග ස්ථිරාංගයේ රූපයක් සාදන්න.

උදාහරණයක් ලෙස, මම පිටපතක් සාදා එය /etc/ වෙත අනුවාදය ලියන සහ දිනය ගොඩනඟන්නෙමි.
මුලින්ම මම මෙම ගොනුවට යන මාර්ගය මගේ බාහිර-ගසෙහි සඳහන් කරමි:

Buildroot - 2 කොටස. ඔබේ පුවරු වින්‍යාසය නිර්මාණය කිරීම; බාහිර ගස, rootfs-overlay, post-build 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

එකලස් කිරීමෙන් පසු, ඔබට මෙම ගොනුව පද්ධතියේ දැකිය හැකිය.

ප්රායෝගිකව, පිටපත විශාල විය හැක. එබැවින්, සැබෑ ව්‍යාපෘතියේ දී මම වඩාත් දියුණු මාර්ගයක් ගත්තෙමි:

  1. මම ඩිරෙක්ටරියක් සෑදුවෙමි (my_tree/board_my_x86_board/inside_fakeroot_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_fakeroot.sh) කොටස තුළ ධාවනය කිරීමට අභිරුචි ස්ක්‍රිප්ට් තුළ පුවරු සැකසීම් තුළ සඳහන් කර ඇත.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න