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
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 failiKuidas 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 jaoksEsimene 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.txtTeine 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 menuconfigEsimeses 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 jaoksOluline! Selles failis on teed absoluutsetes vormides!
MenĂŒĂŒsse on lisatud punkt External options:

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.txtJaotises Kernel muudame teed kernel'i konfiguratsioonile:
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/linux.configNĂŒĂŒ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 overlayEsimene 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:

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:

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:

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-releasePĂ€rast koostamist saab seda faili sĂŒsteemis nĂ€ha.
Tegelikult vÔib skript suureks minna. SeetÔttu lÀksin reaalses projektis rohkem arenenud teed:
- 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
- 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.
- 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
