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

Add a comment