Buildroot - hluti 2. Að búa til borðstillingar þínar; nota utanaðkomandi tré, rootfs-yfirlag, forskriftir eftir byggingu

Í þessum hluta skoða ég nokkra sérstillingarvalkosti sem ég þurfti. Þetta er ekki tæmandi listi yfir það sem buildroot býður upp á, en þeir eru nokkuð hagnýtir og þurfa ekki inngrip í skrárnar á buildroot sjálfum.

Að nota EXTERNAL vélbúnaðinn til að sérsníða

Í fyrri greininni Við skoðuðum einfalt dæmi um að bæta við eigin stillingum með því að bæta defconfig borðsins og nauðsynlegum skrám beint í Buildroot möppuna.

En þessi aðferð er ekki mjög þægileg, sérstaklega þegar þú uppfærir buildroot. Það er kerfi til að leysa þetta vandamál ytra tré. Kjarni þess er að þú getur geymt borð, stillingar, pakka og aðrar möppur í sérstakri möppu (til dæmis nota ég plástraskrána til að setja plástra á pakka, nánari upplýsingar í sérstökum hluta) og buildroot sjálft mun bæta þeim við þá í skrá hennar.

Athugið: þú getur lagt yfir nokkur ytri tré í einu, það er dæmi í byggingarrótarhandbókinni

Við skulum búa til möppu my_tree, staðsett við hliðina á buildroot möppunni og flytja stillingar okkar þangað. Úttakið ætti að vera eftirfarandi skráarbygging:

[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

Eins og þú sérð endurtekur uppbyggingin almennt uppbyggingu byggingarrótar.

Directory Stjórn inniheldur skrár sem eru sértækar fyrir hvert borð í okkar tilviki:

  • bef_cr_fs_img.sh er forskrift sem verður keyrð eftir að markskráarkerfið er byggt, en áður en því er pakkað í myndir. Við munum nota það í framtíðinni
  • linux.config - kjarnastillingar
  • rootfs_overlay - skrá til að leggja ofan á markskráarkerfið
  • users.txt - skrá sem lýsir notendum sem á að búa til

Directory stillingar inniheldur defconfig af borðum okkar. Við eigum bara einn.

Pakki - verslun með pakka okkar. Upphaflega inniheldur buildroot lýsingar og reglur um byggingu takmarkaðs fjölda pakka. Síðar munum við bæta við icewm gluggastjóranum og Slim grafíska innskráningarstjóranum hér.
Bætur — gerir þér kleift að geyma plástrana þína á þægilegan hátt fyrir mismunandi pakka. Nánari upplýsingar í sérstökum kafla hér að neðan.
Nú þurfum við að bæta við lýsingarskrám fyrir ytra tréð okkar. Það eru 3 skrár sem bera ábyrgð á þessu: external.desc, Config.in, external.mk.

ytri.desc inniheldur raunverulega lýsingu:

[alexey@alexey-pc my_tree]$ cat external.desc 
name: my_tree
desc: My simple external-tree for article

Fyrsta línan er titillinn. Í framtíðinni býrðu til breytu $(BR2_EXTERNAL_MY_TREE_PATH), sem ætti að nota þegar samsetningin er stillt. Til dæmis er hægt að stilla slóðina að notendaskránni sem hér segir:

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

Önnur línan er stutt, læsileg lýsing.

Config.in, external.mk — skrár til að lýsa bættum pökkum. Ef þú bætir ekki við þínum eigin pakka, þá er hægt að skilja þessar skrár eftir tómar. Í bili munum við gera það.
Nú höfum við ytra tréð okkar tilbúið, sem inniheldur defconfig borðsins okkar og skrárnar sem það þarf. Við skulum fara í buildroot möppuna og tilgreina að nota ytra tré:

[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

Í fyrstu skipuninni notum við rökin BR2_EXTERNAL=../my_tree/, sem gefur til kynna notkun á ytri tré. Þú getur tilgreint nokkur ytri tré til notkunar á sama tíma. Í þessu tilviki þarftu aðeins að gera þetta einu sinni, eftir það er búið til skráarúttak/.br-external.mk sem geymir upplýsingar um ytra tréð sem notað er:

[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

Mikilvægt! Slóðirnar í þessari skrá verða algjörar!

Ytri valkostir atriði hefur birst í valmyndinni:

Buildroot - hluti 2. Að búa til borðstillingar þínar; nota utanaðkomandi tré, rootfs-yfirlag, forskriftir eftir byggingu

Þessi undirvalmynd mun innihalda pakka okkar frá ytri trénu okkar. Þessi hluti er tómur eins og er.

Nú er mikilvægara fyrir okkur að endurskrifa nauðsynlegar leiðir til að nota ytra tré.

Vinsamlegast athugaðu að í hlutanum Byggja valkostir → Staðsetning til að vista buildroot config, mun vera alger slóð að vistuðu defconfig. Það er myndað á því augnabliki að tilgreina notkun á ytri_tré.

Við munum einnig leiðrétta slóðirnar í hlutanum Kerfisstillingar. Fyrir töflu með stofnuðum notendum:

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

Í kjarnahlutanum skaltu breyta slóðinni að kjarnastillingunum:

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

Nú verða skrárnar okkar frá ytri trénu okkar notaðar við samsetningu. Þegar við færum okkur yfir í aðra möppu eða uppfærir byggingarrótina munum við lenda í lágmarksvandamálum.

Bætir við rót fs yfirborði:

Þetta fyrirkomulag gerir þér kleift að bæta við/skipta um skrár í markskráarkerfinu auðveldlega.
Ef skráin er í root fs overlay, en ekki í target, þá verður henni bætt við
Ef skráin er í root fs overlay og í target, þá verður henni skipt út.
Fyrst skulum við stilla slóðina að root fs overlay dir. Þetta er gert í hlutanum Kerfisstillingar → Yfirborðsskráarmöppur rótarskráa:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Nú skulum við búa til tvær skrár.

[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

Fyrsta skráin (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) mun koma í stað /etc/hosts skrána á fullbúnu kerfinu. Seinni skránni (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) verður bætt við.

Við söfnum og athugum:

Buildroot - hluti 2. Að búa til borðstillingar þínar; nota utanaðkomandi tré, rootfs-yfirlag, forskriftir eftir byggingu

Framkvæmd sérsniðna forskrifta á mismunandi stigum kerfissamsetningar

Oft þarftu að framkvæma einhverja vinnu inni í markskráarkerfinu áður en því er pakkað inn í myndir.

Þetta er hægt að gera í hlutanum Kerfisstillingar:

Buildroot - hluti 2. Að búa til borðstillingar þínar; nota utanaðkomandi tré, rootfs-yfirlag, forskriftir eftir byggingu

Fyrstu tvær forskriftirnar eru keyrðar eftir að markskráarkerfið er byggt, en áður en því er pakkað inn í myndir. Munurinn er sá að fakeroot handritið er keyrt í samhengi við fakeroot, sem líkir eftir vinnu sem rót notandi.

Síðasta handritið er keyrt eftir að kerfismyndirnar eru búnar til. Þú getur framkvæmt viðbótaraðgerðir í því, til dæmis, afritað nauðsynlegar skrár á NFS netþjón eða búið til mynd af vélbúnaðar tækisins.

Sem dæmi mun ég búa til handrit sem skrifar útgáfuna og smíðadagsetningu í /etc/.
Fyrst mun ég gefa til kynna slóðina að þessari skrá í ytra trénu mínu:

Buildroot - hluti 2. Að búa til borðstillingar þínar; nota utanaðkomandi tré, rootfs-yfirlag, forskriftir eftir byggingu

Og nú handritið sjálft:

[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

Eftir samsetningu geturðu séð þessa skrá á kerfinu.

Í reynd getur handritið orðið stórt. Þess vegna, í alvöru verkefninu, tók ég lengra komna leið:

  1. Ég bjó til möppu (my_tree/board_my_x86_board/inside_fakeroot_scripts) þar sem það eru forskriftir til að keyra, með raðnúmerum. Til dæmis, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Ég skrifaði handrit (my_tree/board_my_x86_board/run_inside_fakeroot.sh) sem fer í gegnum þessa möppu og keyrir forskriftirnar sem eru í henni í röð
  3. Tilgreindi þessa skriftu í töflustillingunum í Kerfisstillingar -> Sérsniðnar skriftur til að keyra inni í fakeroot umhverfinu ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) hlutanum

Heimild: www.habr.com

Bæta við athugasemd