Buildroot - diel 2. It meitsjen fan jo boerdkonfiguraasje; mei help fan eksterne beam, rootfs-overlay, post-build skripts

Yn dizze seksje sjoch ik nei guon fan 'e oanpassingsopsjes dy't ik nedich wie. Dit is net in folsleine list fan wat buildroot biedt, mar se binne frij funksjoneel en hawwe gjin yntervinsje nedich yn 'e bestannen fan buildroot sels.

It brûken fan it EKSTERNE meganisme foar oanpassing

Yn it foarige artikel Wy seagen in ienfĂąldich foarbyld fan it tafoegjen fan jo eigen konfiguraasje troch de defconfig fan it boerd en de nedige bestannen direkt ta te foegjen oan de Buildroot-map.

Mar dizze metoade is net heul handich, foaral by it bywurkjen fan buildroot. D'r is in meganisme om dit probleem op te lossen eksterne beam. De essinsje dĂȘrfan is dat jo board, konfiguraasjes, pakketten en oare mappen kinne opslaan yn in aparte map (ik brĂ»k bygelyks de patchesmap om patches oan te passen op pakketten, mear details yn in aparte seksje) en buildroot sels sil se tafoegje oan dy yn syn map.

Opmerking: jo kinne ferskate eksterne beammen tagelyk oerlizze, d'r is in foarbyld yn 'e buildroot-hantlieding

Litte wy in map my_tree oanmeitsje, lizzend neist de buildroot-map en Ășs konfiguraasje dĂȘr oerdrage. De Ăștfier moat de folgjende triemstruktuer wĂȘze:

[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

Sa't jo sjen kinne, yn 't algemien, de struktuer werhellet de struktuer fan buildroot.

directory board befettet triemmen spesifyk foar elk bestjoer yn Ășs gefal:

  • bef_cr_fs_img.sh is in skript dat sil wurde Ăștfierd nei it bouwen fan it doeltriemsysteem, mar foardat it yn bylden ferpakt wurdt. Wy sille it yn 'e takomst brĂ»ke
  • linux.config - kernel konfiguraasje
  • rootfs_overlay - map om boppe op it doelbestĂąnsysteem te oerlizzen
  • users.txt - in triem dy't de brĂ»kers beskriuwt dy't oanmakke wurde

directory configs befettet defconfig fan Ășs boards. Wy hawwe mar ien.

Pakket - katalogus mei Ășs pakketten. Yn earste ynstĂąnsje befettet buildroot beskriuwingen en regels foar it bouwen fan in beheind oantal pakketten. Letter sille wy hjir de icewm-finsterbehearder en de Slim grafyske loginbehearder tafoegje.
Patches - kinne jo jo patches maklik opslaan foar ferskate pakketten. Mear details yn in aparte seksje hjirûnder.
No moatte wy de beskriuwingsbestannen tafoegje foar Ășs eksterne beam. Der binne 3 triemmen ferantwurdlik foar dit: external.desc, Config.in, external.mk.

ekstern.desc befettet de eigentlike beskriuwing:

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

De earste rigel is de titel. Yn 'e takomst meitsje buildroot in fariabele $(BR2_EXTERNAL_MY_TREE_PATH), dy't brûkt wurde moatte by it konfigurearjen fan de gearkomste. Bygelyks, it paad nei it brûkersbestùn kin as folget ynsteld wurde:

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

De twadde rigel is in koarte, foar de minske lĂȘsbere beskriuwing.

Config.in, ekstern.mk - bestannen om tafoege pakketten te beskriuwen. As jo ​​jo eigen pakketten net tafoegje, dan kinne dizze bestannen leech wurde litten. Foar no sille wy dat dwaan.
No hawwe wy Ășs eksterne beam klear, mei de defconfig fan Ășs boerd en de bestannen dy't it nedich is. Litte wy nei de buildroot-map gean en spesifisearje om eksterne-beam te brĂ»ken:

[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

Yn it earste kommando brĂ»ke wy it argumint BR2_EXTERNAL=../my_tree/, wat oanjout op it brĂ»ken fan in eksterne beam. Jo kinne ferskate eksterne-beammen opjaan foar gebrĂ»k tagelyk. Yn dit gefal hoege jo dit mar ien kear te dwaan, wĂȘrnei't in triemĂștfier/.br-external.mk makke wurdt dy't bewarret ynformaasje oer de brĂ»kte eksterne beam:

[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

Belangryk! De paden yn dizze triem sille absolĂșt wĂȘze!

In item foar eksterne opsjes is ferskynd yn it menu:

Buildroot - diel 2. It meitsjen fan jo boerdkonfiguraasje; mei help fan eksterne beam, rootfs-overlay, post-build skripts

Dit submenu sil Ășs pakketten befetsje fan Ășs eksterne beam. Dizze seksje is op it stuit leech.

No is it wichtiger foar Ășs om de nedige paden te herskriuwen om eksterne-beam te brĂ»ken.

Tink derom dat yn 'e Build-opsjes → Lokaasje om buildroot-konfiguraasje te bewarjen, d'r in absolĂșt paad sil wĂȘze nei de bewarre defconfig. It wurdt foarme op it momint fan oantsjutte it brĂ»ken fan extgernal_tree.

Wy sille ek de paden korrigearje yn 'e seksje Systeemkonfiguraasje. Foar in tabel mei oanmakke brûkers:

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

Yn 'e Kernel-seksje feroarje it paad nei de kernel-konfiguraasje:

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

No sille Ășs bestannen fan Ășs eksterne beam brĂ»kt wurde by montage. As jo ​​​​nei in oare map ferpleatse of de buildroot bywurkje, sille wy in minimum fan problemen hawwe.

Root fs-overlay tafoegje:

Dit meganisme lit jo bestannen maklik tafoegje / ferfange yn it doelbestĂąnsysteem.
As it bestĂąn yn root fs-overlay is, mar net yn doel, dan sil it wurde tafoege
As it bestĂąn yn root fs-overlay en yn doel is, dan sil it ferfongen wurde.
Lit Ășs earst it paad ynstelle nei root fs overlay dir. Dit wurdt dien yn 'e Systeemkonfiguraasje → Root-bestĂąnsysteem-overlay-mappen seksje:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Litte wy no twa bestannen oanmeitsje.

[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

It earste bestĂąn (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) sil it /etc/hosts-bestĂąn ferfange op it foltĂŽge systeem. De twadde triem (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) wurdt tafoege.

Wy sammelje en kontrolearje:

Buildroot - diel 2. It meitsjen fan jo boerdkonfiguraasje; mei help fan eksterne beam, rootfs-overlay, post-build skripts

Utfiering fan oanpassingsskripts yn ferskate stadia fan systeemmontage

Faak moatte jo wat wurk Ăștfiere binnen it doelbestĂąnsysteem foardat it wurdt ferpakt yn ĂŽfbyldings.

Dit kin dien wurde yn 'e seksje Systeemkonfiguraasje:

Buildroot - diel 2. It meitsjen fan jo boerdkonfiguraasje; mei help fan eksterne beam, rootfs-overlay, post-build skripts

De earste twa skripts wurde Ăștfierd neidat it doeltriemsysteem boud is, mar foardat it yn bylden ferpakt is. It ferskil is dat it fakeroot-skript wurdt Ăștfierd yn 'e kontekst fan fakeroot, dy't wurk simulearret as de root-brĂ»ker.

It lĂȘste skript wurdt Ăștfierd neidat de systeemĂŽfbyldings makke binne. Jo kinne dĂȘr ekstra aksjes yn Ăștfiere, bygelyks de nedige bestannen kopiearje nei in NFS-tsjinner of in ĂŽfbylding meitsje fan jo apparaatfirmware.

As foarbyld sil ik in skript meitsje dat de ferzje en bouwdatum sil skriuwe nei /etc/.
Earst sil ik it paad nei dit bestĂąn yn myn eksterne beam oanjaan:

Buildroot - diel 2. It meitsjen fan jo boerdkonfiguraasje; mei help fan eksterne beam, rootfs-overlay, post-build skripts

En no it skript sels:

[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

Nei gearstalling kinne jo dizze triem sjen op it systeem.

Yn 'e praktyk kin it skript grut wurde. DĂȘrom naam ik yn it echte projekt in mear avansearre rĂ»te:

  1. Ik haw in map makke (my_tree/board_my_x86_board/inside_fakeroot_scripts) wĂȘryn d'r skripts binne dy't moatte wurde Ăștfierd, mei serial numbers. Bygelyks, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Ik haw in skript skreaun (my_tree/board_my_x86_board/run_inside_fakeroot.sh) dat troch dizze map giet en de skripts dy't deryn befetsje opfolgjend Ăștfiert
  3. Spesifisearre dit skript yn 'e boerdynstellingen yn' e Systeemkonfiguraasje -> Oanpaste skripts om te rinnen yn 'e fakeroot-omjouwing ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) seksje

Boarne: www.habr.com

Keapje betroubere hosting foar siden mei DDoS-beskerming, VPS VDS-tsjinners đŸ”„ Keapje betroubere websidehosting mei DDoS-beskerming, VPS VDS-tsjinners | ProHoster