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
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:
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:
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:
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:
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:
- 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
- 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
- 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