Buildroot - bahagi 2. Paglikha ng configuration ng iyong board; gamit ang panlabas na puno, rootfs-overlay, post-build na mga script

Sa seksyong ito tinitingnan ko ang ilan sa mga opsyon sa pagpapasadya na kailangan ko. Ito ay hindi isang kumpletong listahan ng kung ano ang inaalok ng buildroot, ngunit ang mga ito ay lubos na gumagana at hindi nangangailangan ng interbensyon sa mga file ng buildroot mismo.

Gamit ang EXTERNAL na mekanismo para sa pagpapasadya

Sa isang nakaraang artikulo Tumingin kami sa isang simpleng halimbawa ng pagdaragdag ng sarili mong configuration sa pamamagitan ng pagdaragdag ng defconfig ng board at ang mga kinakailangang file nang direkta sa direktoryo ng Buildroot.

Ngunit ang pamamaraang ito ay hindi masyadong maginhawa, lalo na kapag nag-a-update ng buildroot. Mayroong mekanismo upang malutas ang problemang ito panlabas na puno. Ang kakanyahan nito ay maaari kang mag-imbak ng board, mga config, mga pakete at iba pang mga direktoryo sa isang hiwalay na direktoryo (halimbawa, ginagamit ko ang direktoryo ng mga patch upang ilapat ang mga patch sa mga pakete, higit pang mga detalye sa isang hiwalay na seksyon) at ang buildroot mismo ay idaragdag ang mga ito sa mga nasa direktoryo nito.

Tandaan: maaari kang mag-overlay ng ilang panlabas na puno nang sabay-sabay, mayroong isang halimbawa sa manwal ng buildroot

Gumawa tayo ng isang direktoryo my_tree, na matatagpuan sa tabi ng direktoryo ng buildroot at ilipat ang aming configuration doon. Ang output ay dapat na ang sumusunod na istraktura ng file:

[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

Tulad ng nakikita mo, sa pangkalahatan ang istraktura ay inuulit ang istraktura ng buildroot.

Directory lupon naglalaman ng mga file na partikular sa bawat board sa aming kaso:

  • Ang bef_cr_fs_img.sh ay isang script na isasagawa pagkatapos buuin ang target na file system, ngunit bago ito i-package sa mga imahe. Gagamitin natin ito sa hinaharap
  • linux.config - pagsasaayos ng kernel
  • rootfs_overlay - direktoryo na ipapatong sa ibabaw ng target na file system
  • users.txt - isang file na naglalarawan sa mga user na gagawin

Directory mga config naglalaman ng defconfig ng aming mga board. Isa lang ang meron tayo.

pakete - catalog kasama ang aming mga pakete. Sa una, ang buildroot ay naglalaman ng mga paglalarawan at panuntunan para sa pagbuo ng limitadong bilang ng mga pakete. Mamaya ay idaragdag namin ang icewm window manager at ang Slim graphical login manager dito.
Patch — nagbibigay-daan sa iyong maginhawang iimbak ang iyong mga patch para sa iba't ibang mga pakete. Higit pang mga detalye sa isang hiwalay na seksyon sa ibaba.
Ngayon ay kailangan naming idagdag ang mga file ng paglalarawan para sa aming panlabas na puno. May 3 file na responsable para dito: external.desc, Config.in, external.mk.

panlabas.desc naglalaman ng aktwal na paglalarawan:

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

Ang unang linya ay ang pamagat. Sa hinaharap buildroot lumikha ng isang variable $(BR2_EXTERNAL_MY_TREE_PATH), na dapat gamitin kapag kino-configure ang pagpupulong. Halimbawa, ang path sa file ng user ay maaaring itakda tulad ng sumusunod:

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

Ang pangalawang linya ay isang maikli, nababasa ng tao na paglalarawan.

Config.in, external.mk — mga file upang ilarawan ang mga idinagdag na pakete. Kung hindi ka magdagdag ng sarili mong mga pakete, maaaring iwanang walang laman ang mga file na ito. Sa ngayon, iyon ang gagawin natin.
Ngayon ay handa na ang aming panlabas na puno, na naglalaman ng defconfig ng aming board at ang mga file na kailangan nito. Pumunta tayo sa direktoryo ng buildroot at tukuyin ang paggamit ng 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

Sa unang utos ginagamit namin ang argumento BR2_EXTERNAL=../my_tree/, na nagsasaad ng paggamit ng isang panlabas na puno. Maaari kang tumukoy ng ilang panlabas na puno para sa parehong oras. Sa kasong ito, kailangan mo lang gawin ito nang isang beses, pagkatapos ay ang isang file output/.br-external.mk ay nilikha na nag-iimbak ng impormasyon tungkol sa panlabas na punong ginamit:

[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

Mahalaga! Ang mga landas sa file na ito ay magiging ganap!

May lumabas na item sa External na opsyon sa menu:

Buildroot - bahagi 2. Paglikha ng configuration ng iyong board; gamit ang panlabas na puno, rootfs-overlay, post-build na mga script

Ang submenu na ito ay maglalaman ng aming mga pakete mula sa aming panlabas na puno. Kasalukuyang walang laman ang seksyong ito.

Ngayon ay mas mahalaga para sa amin na muling isulat ang mga kinakailangang path para magamit ang external-tree.

Pakitandaan na sa Build options → Location to save buildroot config section, magkakaroon ng absolute path sa naka-save na defconfig. Ito ay nabuo sa sandali ng pagtukoy sa paggamit ng extgernal_tree.

Itatama din namin ang mga landas sa seksyong System configuration. Para sa isang talahanayan na may mga nilikhang user:

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

Sa seksyong Kernel, baguhin ang landas sa pagsasaayos ng kernel:

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

Ngayon ang aming mga file mula sa aming panlabas na puno ay gagamitin sa panahon ng pagpupulong. Kapag lumipat sa ibang direktoryo o ina-update ang buildroot, magkakaroon tayo ng kaunting problema.

Pagdaragdag ng root fs overlay:

Ang mekanismong ito ay nagbibigay-daan sa iyo na madaling magdagdag/magpalit ng mga file sa target na file system.
Kung ang file ay nasa root fs overlay, ngunit wala sa target, ito ay idaragdag
Kung ang file ay nasa root fs overlay at nasa target, pagkatapos ay papalitan ito.
Una, itakda natin ang landas sa root fs overlay dir. Ginagawa ito sa System configuration → Root filesystem overlay na seksyon ng mga direktoryo:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Ngayon gumawa tayo ng dalawang file.

[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

Ang unang file (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) ay papalitan ang /etc/hosts file sa tapos na system. Ang pangalawang file (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) ay idaragdag.

Kinokolekta at sinusuri namin:

Buildroot - bahagi 2. Paglikha ng configuration ng iyong board; gamit ang panlabas na puno, rootfs-overlay, post-build na mga script

Pagpapatupad ng mga script ng pagpapasadya sa iba't ibang yugto ng pagpupulong ng system

Kadalasan kailangan mong magsagawa ng ilang trabaho sa loob ng target na file system bago ito i-package sa mga imahe.

Magagawa ito sa seksyong System configuration:

Buildroot - bahagi 2. Paglikha ng configuration ng iyong board; gamit ang panlabas na puno, rootfs-overlay, post-build na mga script

Ang unang dalawang script ay naisakatuparan pagkatapos mabuo ang target na file system, ngunit bago ito i-package sa mga imahe. Ang kaibahan ay ang fakeroot script ay isinasagawa sa konteksto ng fakeroot, na ginagaya ang trabaho bilang root user.

Isinasagawa ang huling script pagkatapos malikha ang mga imahe ng system. Maaari kang magsagawa ng mga karagdagang aksyon dito, halimbawa, kopyahin ang mga kinakailangang file sa isang NFS server o lumikha ng isang imahe ng firmware ng iyong device.

Bilang isang halimbawa, gagawa ako ng script na magsusulat ng bersyon at petsa ng pagbuo sa /etc/.
Una ay ipahiwatig ko ang landas sa file na ito sa aking panlabas na puno:

Buildroot - bahagi 2. Paglikha ng configuration ng iyong board; gamit ang panlabas na puno, rootfs-overlay, post-build na mga script

At ngayon ang script mismo:

[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

Pagkatapos ng pagpupulong, makikita mo ang file na ito sa system.

Sa pagsasagawa, ang script ay maaaring maging malaki. Samakatuwid, sa totoong proyekto ay kumuha ako ng mas advanced na ruta:

  1. Gumawa ako ng isang direktoryo (my_tree/board_my_x86_board/inside_fakeroot_scripts) kung saan mayroong mga script na isasagawa, na may mga serial number. Halimbawa, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Sumulat ako ng script (my_tree/board_my_x86_board/run_inside_fakeroot.sh) na dumadaan sa direktoryo na ito at sunud-sunod na nagpapatupad ng mga script na nakapaloob dito
  3. Tinukoy ang script na ito sa mga setting ng board sa System configuration -> Mga custom na script na tatakbo sa loob ng fakeroot environment ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) na seksyon

Pinagmulan: www.habr.com

Magdagdag ng komento