Selles jaotisest uurin mÔningaid kohandamise vÔimalusi, mis mulle vajalikud olid. See ei ole tÀielik nimekiri sellest, mida buildroot pakub, kuid need on tÀiesti toimivad ja ei nÔua sekkumist buildrooti failidesse.
Kohandamise EXTERNAL-mehhanismi kasutamine
uuriti lihtsat nÀidet oma konfiguratsiooni lisamisest, lisades plaadi defconfig'i ja vajalikud failid otse Buildrooti katalooge.
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 muud (nÀiteks kasutan katalooge patches pakettide patchide rakendamiseks, lÀhemalt eraldi jaotises) ning buildroot lisab need automaatselt oma kataloogile.
MÀrkus: saab rakendada mitu external tree'i korraga, nÀide on buildrooti juhendis
Loome katalooge my_tree, mis asub buildroot'i katalooge kÔrval, ja viime sinna oma konfiguratsiooni. VÀljundina peaksime saama jÀrgmise failistruktuuri:
[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 failiNagu nĂ€ha, kordab struktuur ĂŒldiselt buildrooti struktuuri.
Kataloog board sisaldab meie vahetallistele spetsiifilisi faile:
- bef_cr_fs_img.sh â skript, mis kĂ€ivitatakse pĂ€rast sihtfaili sĂŒsteemi kogumist, kuid enne selle pakkimist piltideks. Hiljem kasutame seda
- linux.config â tuumakonfiguratsioon
- rootfs_overlay â kataloog, et katta sihtfaili sĂŒsteemi
- users.txt â fail loodavate kasutajate kirjeldamiseks
Kataloog configs sisaldab meie vahetalliste defconfig'e. Meil on neid vaid ĂŒks.
Package â kataloog meie pakettide jaoks. Alguses sisaldab buildroot piiratud arvu pakettide kirjeldusi ja kogumise reegleid. Hiljem lisame siia aknahalduri icewm ja sisse logimise halduri Slim.
Patches â vĂ”imaldab mugavalt hoida oma patĆĄe erinevate pakettide jaoks. LĂ€hemalt eraldi jaotises hiljem.
NĂŒĂŒd tuleb lisada meie external-tree'i 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 vÀline puu artikli jaoksEsimene rida on nimi. Edasi loob buildroot muutuja $(BR2_EXTERNAL_MY_TREE_PATH), mida tuleb kasutada ehituse konfigureerimisel. NÀiteks on kasutaja failile tee mÀÀramiseks vÔimalik kasutada jÀrgmist teed:
$(BR2_EXTERNAL_my_tree_PATH)\/board\/my_x86_board\/users.txtTeine rida on lĂŒhike, inimesele arusaadav kirjeldus.
Config.in, external.mk â failid, mis kirjeldavad lisatud pakette. Kui oma pakette ei lisata, saab need failid jĂ€tta tĂŒhjaks. Hetkel teeme just nii.
NĂŒĂŒd on meie vĂ€line puu valmis, sisaldades meie plaadi defconfig'i ja vajalikke faile. Siirdugem buildroot katalooge ja mÀÀratlegem vĂ€line puu:
[alexey@alexey-pc buildroot]$ make BR2_EXTERNAL=..\/my_tree\/ my_x86_board_defconfig
#
# konfigureerimine kirjutatud failile \/home\/alexey\/dev\/article\/ramdisk\/buildroot\/.config
#
[alexey@alexey-pc buildroot]$ make menuconfigEsimeses kĂ€sus kasutame argumenti BR2_EXTERNAL=..\/my_tree\/, mis nĂ€itab vĂ€list puu kasutamist. Samal ajal saab mÀÀrata mitu vĂ€list puu kasutamiseks. Selleks piisab, kui teha seda ĂŒks kord, seejĂ€rel luuakse fail output\/.br-external.mk, mis salvestab teavet kasutatava vĂ€list puu kohta:
[alexey@alexey-pc buildroot]$ cat output\/.br-external.mk
#
# Automaatne genereeritud fail; EI TOHI MUUTA.
#
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 vÀline puu artikli jaoksOluline! Sellel failil on teed absoluutsetena!
MenĂŒĂŒsse ilmus punkt External options:

Selles alammenĂŒĂŒs sisaldatakse meie pakette meie vĂ€list puust. Praegu on see osa tĂŒhi.
Praegu on olulisem kohandada vajalikke teid, et kasutada vÀlist puud.
Pange tĂ€hele, et Build options â Location to save buildroot config nimetus nĂ€itab absoluutset teed salvestatud defconfig'ile. See luuakse, kui mÀÀratakse vĂ€list puu kasutamine.
Samuti muudame sĂŒsteemi konfiguratsiooni sektsioonis teed. Loendiga loodud kasutajate jaoks:
$(BR2_EXTERNAL_my_tree_PATH)\/board\/my_x86_board\/users.txtKernel sektsioonis muudame kerneli konfigureerimise teed:
$(BR2_EXTERNAL_my_tree_PATH)\/board\/my_x86_board\/linux.configNĂŒĂŒd kasutatakse ehitamisel meie faile meie vĂ€list puust. Teise katalooge viimise vĂ”i buildroot'i uuendamise korral on meil minimaalne hĂ€da.
Root fs overlay'i lisamine:
See mehhanism vĂ”imaldab hĂ”lpsalt lisada\/asendada faile sihtfailisĂŒsteemis.
Kui fail on root fs overlay'is, kuid sihtkohas puudub, lisatakse see.
Kui fail on root fs overlay'is ja sihtkohas olemas, asendatakse see.
Esiteks mÀÀratleme tee root fs overlay kausta. Seda tehakse jaotises SĂŒsteemi konfiguratsioon â Root filesystem overlay directories:
$(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 valmis 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 kogumise erinevatel etappidel
Sageli on vajalik teatud toimingute tegemine sihtfailide sĂŒsteemis enne selle pakkimist piltideks.
Seda saab teha jaotises SĂŒsteemi konfiguratsioon:

Esimese kahe skripti tĂ€itmine toimub pĂ€rast sihtfailide sĂŒsteemi koostamist, kuid enne selle pakkimist piltideks. Erinevus on selles, et fakeroot-skript kĂ€ib fakerooti kontekstis, simuleerides root-kasutaja tööd.
Viimane skript tĂ€idetakse pĂ€rast sĂŒsteemi piltide loomist. Sellega saab teha tĂ€iendavaid toiminguid, nĂ€iteks kopeerida vajalikud failid nfs-serverisse vĂ”i luua oma seadme pildifail.
NÀiteks loon skripti, mis kirjutab versiooni ja kogumise kuupÀeva /etc/.
Esiteks mÀÀran selle faili tee oma external-tree'is:

Ja nĂŒĂŒd ise 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 kogumist saab selle faili sĂŒsteemist nĂ€ha.
Praktikas vÔib skript muutuda mahukaks. SeetÔttu lÀksin reaalses projektis edasi keerukamale lÀhenemisele:
- Loomisin kausta (my_tree/board_my_x86_board/inside_fakeroot_scripts), kus on tÀitmiseks ettekirjutatud skriptid, jÀrjestikuste 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 seda kausta ja tÀidab jÀrjestikku seal olevaid skripte.
- MĂ€rgin selle skripti plaadivaliku seadistustes jaotises SĂŒsteemi konfiguratsioon â Kohandatud skriptid fakeroot keskkonnas tĂ€itmiseks ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)
Allikas: habr.com
