Buildroot — osa 2. Omakonfiguraatori loomine oma plaadi jaoks; external tree, rootfs-overlay, post-build skriptide rakendamine

Selles osas kÀsitlen mÔningaid kohandamisvÔimalusi, mida mul oli vaja. See ei ole tÀielik nimekiri sellest, mida buildroot pakub, kuid need on tÀiesti toimivad ja ei nÔua sekkumist buildrooti failidesse.

EXTERNAL-mehhanismi kasutamine kohandamiseks

Eelnevas artiklis KÀsitleti lihtsat nÀidet oma konfiguratsiooni lisamisest, lisades laua defconfig'i ja vajalikud failid otse Buildrooti kataloogi.

Kuid see meetod ei ole eriti mugav, eriti buildrooti vÀrskendamisel. Selle probleemi lahendamiseks on mehhanism external tree. Selle olemus on see, et eraldi kataloogis saab hoida katalooge board, configs, packages ja muid (nÀiteks kasutan katalooge patches pakettide patch'ide rakendamiseks, rohkem teavet eraldi osas) ja buildroot lisab need automaatselt oma kataloogis olemasolevatele.

MÀrkuseks: saate rakendada mitu external tree korraga, sellest on nÀide buildrooti juhendis.

Loome katalooge my_tree, mis asub buildroot'i kÔrval ja viime sinna meie konfiguratsiooni. VÀljunds peaks olema jÀrgmine failistruktuur:

[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 katalooge, 7 faili

Kuidas nĂ€ha, peegeldab struktuur ĂŒldiselt buildroot'i struktuuri.

Kataloog board koosneb iga plaadi jaoks spetsiifilistest failidest, meie juhul:

  • bef_cr_fs_img.sh — skript, mis kĂ€ivitatakse pĂ€rast sihtfailisĂŒsteemi kogumist, kuid enne selle pildiks pakkimist. Kasutame seda hiljem
  • linux.config — tuuma konfiguratsioon
  • rootfs_overlay — kataloog sihtfailisĂŒsteemi pealelĂ”ikamiseks
  • users.txt — fail loodud kasutajate kirjelduseks

Kataloog configs sisaldab meie plaatide defconfig'e. Meil on seda ainult ĂŒks.

Paketid — kataloog meie pakettide jaoks. Esialgu sisaldab buildroot piiratud arvu pakettide kirjeldusi ja kogumise reegleid. Hiljem lisame siia aknahalduri icewm ja sĂŒsteemi graafilise sisselogimise halduri Slim.
Patches — vĂ”imaldab mugavalt hoida oma patĆĄe erinevate pakettide jaoks. Lisainfot leiate eraldi jaotises.
NĂŒĂŒd tuleb lisada meie external-tree kirjeldusfailid. Selle eest vastutavad 3 faili: external.desc, Config.in, external.mk.

external.desc sisaldab tegelikku kirjeldust:

[alexey@alexey-pc my_tree]$ cat external.desc 
name: my_tree
desc: Minu lihtne external-tree artikli jaoks

Esimene rida on nimi. Edasi koostab buildroot muutuja $(BR2_EXTERNAL_MY_TREE_PATH), mida tuleb kasutada ehituse konfigureerimisel. NÀiteks kasutajate faili tee saab mÀÀrata jÀrgmiselt:

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

Teine rida on lĂŒhike, inimesele arusaadav kirjeldus.

Config.in, external.mk — failid lisatavate pakettide kirjeldamiseks. Kui oma pakette ei lisata, vĂ”ivad need failid jÀÀda tĂŒhjaks. Praegu teeme just nii.
NĂŒĂŒd on meie external-tree valmis, sisaldades defconfig meie plaadi jaoks ja vajalikke faile. Liigume buildroot katalooge, mĂ€rkides, et kasutame external-tree:

[alexey@alexey-pc buildroot]$ make BR2_EXTERNAL=../my_tree/ my_x86_board_defconfig
#
# konfiguratsioon kirjutatud faili /home/alexey/dev/article/ramdisk/buildroot/.config
#
[alexey@alexey-pc buildroot]$ make menuconfig

Esimeses kĂ€skluses kasutame argumenti BR2_EXTERNAL=../my_tree/, mis nĂ€itab external tree. Samuti saab samal ajal mÀÀrata mitu external-tree, piisab, kui teha seda ĂŒhe korra, pĂ€rast mida luuakse fail output/.br-external.mk, mis salvestab teabe kasutatava external-tree kohta:

[alexey@alexey-pc buildroot]$ cat output/.br-external.mk 
#
# Automaatne genereeritud fail; ÄRGE MUUTKE.
#

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 = Minu lihtne external-tree artikli jaoks

Oluline! Selles failis on teed absoluutsetes vormides!

MenĂŒĂŒsse on lisatud punkt External options:

Buildroot — osa 2. Omakonfiguraatori loomine oma plaadi jaoks; external tree, rootfs-overlay, post-build skriptide rakendamine

Selles alammenĂŒĂŒs on meie paketid meie external-tree'ist. Praegu on see osa tĂŒhi.

Praegu on meil tĂ€htis ĂŒmber kirjutada vajalikud teed, et kasutada external-tree.

Pange tĂ€hele, et jaotises Build options → Location to save buildroot config, on absoluutne tee salvestatava defconfig'i juurde. See formuleeritakse, kui mÀÀratakse external_tree'i kasutamine.

Samuti muudame jaotises System configuration teed. Loendiga, mille loovad kasutajad:

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

Jaotises Kernel muudame teed kernel'i konfiguratsioonile:

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

NĂŒĂŒd kasutatakse koostamisel meie faile extern-tree'ist. Teise katalooge liigutamisel vĂ”i buildroot'i uuendamisel on meil vĂ€hemalt vĂ€he probleeme.

Root fs overlay'i lisamine:

See mehhanism vĂ”imaldab hĂ”lpsasti lisada/vÀÀrata faile siht-sĂŒsteemis.
Kui fail on root fs overlay'is, kuid puudub sihtsĂŒsteemis, siis lisatakse see.
Kui fail on nii root fs overlay'is kui ka sihtsĂŒsteemis, siis vahetatakse see vĂ€lja.
Esmalt mÀÀrame tee root fs overlay katalooge. Seda tehakse jaotises SĂŒsteemi konfiguratsioon → Root failisĂŒsteemi overlay kataloogid:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

NĂŒĂŒd loome kaks faili.

[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

Esimene fail (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) asendab faili /etc/hosts valmistanud sĂŒsteemis. Teine fail (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) lisatakse.

Kogume ja kontrollime:

Buildroot — osa 2. Omakonfiguraatori loomine oma plaadi jaoks; external tree, rootfs-overlay, post-build skriptide rakendamine

Kohandamisskriptide tĂ€itmine sĂŒsteemi koostamise erinevates etappides

Sageli on vajalik teatud toimingute tegemine siht-sĂŒsteemis enne selle pakendamist piltideks.

Selle saab teha sĂŒsteemi konfiguratsiooni jaotises:

Buildroot — osa 2. Omakonfiguraatori loomine oma plaadi jaoks; external tree, rootfs-overlay, post-build skriptide rakendamine

Esimesed kaks skripti kĂ€ivitatakse pĂ€rast siht-failisĂŒsteemi koostamist, kuid enne selle pildiks pakkimist. Erinevus seisneb selles, et fakeroot-skript kĂ€ivitatakse fakeroot kontekstis, st simuleeritakse root-kasutaja töö.

Viimane skript kĂ€ivitatakse juba pĂ€rast sĂŒsteemi piltide loomist. Selles saab teha tĂ€iendavaid toiminguid, nĂ€iteks kopeerida vajalikke faile nfs-serverisse vĂ”i luua oma seadme sisufaili pilt.

NÀiteks loon skripti, mis kirjutab versiooni ja koostamise kuupÀeva /etc/.
Esmalt mÀÀran selle faili tee oma external-tree-s:

Buildroot — osa 2. Omakonfiguraatori loomine oma plaadi jaoks; external tree, rootfs-overlay, post-build skriptide rakendamine

Ja nĂŒĂŒd pĂ”hi skript:

[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

PĂ€rast koostamist saab seda faili sĂŒsteemis nĂ€ha.

Tegelikult vÔib skript suureks minna. SeetÔttu lÀksin reaalses projektis rohkem arenenud teed:

  1. Loomiseks kaust (my_tree/board_my_x86_board/inside_fakeroot_scripts), milles on tÀidetavad skriptid, numbritega. NÀiteks, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Kirjutasin skripti (my_tree/board_my_x86_board/run_inside_fakeroot.sh), mis lÀbib selle katalooge ja jÀrjestikused skriptid, mis seal asuvad, tÀidab.
  3. MÀÀrasin selle skripti pĂ”hikuval seadetes jaotises SĂŒsteemi konfiguratsioon -> Kohandatud skriptid, mis kĂ€ivitatakse fakeroot keskkonnas ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh).

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster