Buildroot - rhan 2. Creu eich ffurfweddiad bwrdd; defnyddio coeden allanol, troshaen rootfs, sgriptiau ôl-adeiladu

Yn yr adran hon rwy'n edrych ar rai o'r opsiynau addasu yr oedd eu hangen arnaf. Nid yw hon yn rhestr gyflawn o'r hyn y mae buildroot yn ei gynnig, ond maent yn eithaf ymarferol ac nid oes angen ymyrraeth yn y ffeiliau buildroot ei hun.

Defnyddio'r mecanwaith ALLANOL ar gyfer addasu

Yn yr erthygl flaenorol Edrychom ar enghraifft syml o ychwanegu eich ffurfweddiad eich hun trwy ychwanegu defconfig y bwrdd a'r ffeiliau angenrheidiol yn uniongyrchol i gyfeiriadur Buildroot.

Ond nid yw'r dull hwn yn gyfleus iawn, yn enwedig wrth ddiweddaru buildroot. Mae yna fecanwaith i ddatrys y broblem hon coeden allanol. Ei hanfod yw y gallwch storio bwrdd, configs, pecynnau a chyfeiriaduron eraill mewn cyfeiriadur ar wahân (er enghraifft, rwy'n defnyddio'r cyfeiriadur clytiau i gymhwyso clytiau i becynnau, mwy o fanylion mewn adran ar wahân) a bydd buildroot ei hun yn eu hychwanegu at y rhai yn ei gyfeirlyfr.

Sylwch: gallwch droshaenu sawl coeden allanol ar unwaith, mae enghraifft yn y llawlyfr buildroot

Gadewch i ni greu cyfeiriadur my_tree, wedi'i leoli wrth ymyl y cyfeiriadur buildroot a throsglwyddo ein cyfluniad yno. Dylai'r allbwn fod y strwythur ffeil canlynol:

[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

Fel y gwelwch, yn gyffredinol mae'r strwythur yn ailadrodd strwythur buildroot.

Каталог bwrdd yn cynnwys ffeiliau sy'n benodol i bob bwrdd yn ein hachos ni:

  • bef_cr_fs_img.sh yn sgript a fydd yn cael ei weithredu ar ôl adeiladu'r system ffeiliau targed, ond cyn ei becynnu i mewn i ddelweddau. Byddwn yn ei ddefnyddio yn y dyfodol
  • linux.config - cyfluniad cnewyllyn
  • rootfs_overlay - cyfeiriadur i'w droshaenu ar ben y system ffeiliau targed
  • users.txt - ffeil yn disgrifio'r defnyddwyr i'w creu

Каталог configs yn cynnwys defconfig ein byrddau. Dim ond un sydd gennym.

pecyn - catalog gyda'n pecynnau. I ddechrau, mae buildroot yn cynnwys disgrifiadau a rheolau ar gyfer adeiladu nifer gyfyngedig o becynnau. Yn ddiweddarach byddwn yn ychwanegu'r rheolwr ffenestri icewm a'r rheolwr mewngofnodi graffigol Slim yma.
Clytiau - yn caniatáu ichi storio'ch clytiau'n gyfleus ar gyfer gwahanol becynnau. Mwy o fanylion mewn adran ar wahân isod.
Nawr mae angen i ni ychwanegu'r ffeiliau disgrifiad ar gyfer ein coeden allanol. Mae 3 ffeil yn gyfrifol am hyn: external.desc, Config.in, external.mk.

allanol.desc yn cynnwys y disgrifiad gwirioneddol:

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

Y llinell gyntaf yw'r teitl. Yn y dyfodol buildroot creu newidyn $(BR2_EXTERNAL_MY_TREE_PATH), y dylid ei ddefnyddio wrth ffurfweddu'r cynulliad. Er enghraifft, gellir gosod y llwybr i'r ffeil defnyddiwr fel a ganlyn:

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

Mae'r ail linell yn ddisgrifiad byr, hawdd ei ddarllen gan ddyn.

Config.in, allanol.mk — ffeiliau i ddisgrifio pecynnau ychwanegol. Os na fyddwch yn ychwanegu eich pecynnau eich hun, yna gellir gadael y ffeiliau hyn yn wag. Am y tro, dyna beth fyddwn ni'n ei wneud.
Nawr mae gennym ein coeden allanol yn barod, sy'n cynnwys defconfig ein bwrdd a'r ffeiliau sydd eu hangen arno. Gadewch i ni fynd i'r cyfeiriadur buildroot a nodi i ddefnyddio coeden allanol:

[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 y gorchymyn cyntaf rydyn ni'n defnyddio'r ddadl BR2_EXTERNAL=../my_tree/, sy'n nodi'r defnydd o goeden allanol. Gallwch chi nodi sawl coeden allanol i'w defnyddio ar yr un pryd. Yn yr achos hwn, dim ond unwaith y bydd angen i chi wneud hyn, ac ar ôl hynny mae ffeil output/.br-external.mk yn cael ei greu sy'n yn storio gwybodaeth am y goeden allanol a ddefnyddir:

[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

Pwysig! Bydd y llwybrau yn y ffeil hon yn absoliwt!

Mae eitem Opsiynau Allanol wedi ymddangos yn y ddewislen:

Buildroot - rhan 2. Creu eich ffurfweddiad bwrdd; defnyddio coeden allanol, troshaen rootfs, sgriptiau ôl-adeiladu

Bydd yr is-ddewislen hon yn cynnwys ein pecynnau o'n coeden allanol. Mae'r adran hon yn wag ar hyn o bryd.

Nawr mae'n bwysicach i ni ailysgrifennu'r llwybrau angenrheidiol i ddefnyddio coeden allanol.

Sylwch, yn yr adran opsiynau Adeiladu → Lleoliad i arbed ffurfwedd buildroot, bydd llwybr absoliwt i'r defconfig a arbedwyd. Mae'n cael ei ffurfio ar hyn o bryd o nodi'r defnydd o extgernal_tree.

Byddwn hefyd yn cywiro'r llwybrau yn yr adran cyfluniad System. Ar gyfer tabl gyda defnyddwyr wedi'u creu:

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

Yn yr adran Cnewyllyn, newidiwch y llwybr i ffurfweddiad y cnewyllyn:

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

Nawr bydd ein ffeiliau o'n coeden allanol yn cael eu defnyddio yn ystod y gwasanaeth. Wrth symud i gyfeiriadur arall neu ddiweddaru'r buildroot, bydd gennym leiafswm o broblemau.

Ychwanegu troshaen gwraidd fs:

Mae'r mecanwaith hwn yn caniatáu ichi ychwanegu / ailosod ffeiliau yn y system ffeiliau targed yn hawdd.
Os yw'r ffeil mewn troshaen gwraidd fs, ond nid yn y targed, yna bydd yn cael ei hychwanegu
Os yw'r ffeil mewn troshaen gwraidd fs ac yn y targed, yna bydd yn cael ei disodli.
Yn gyntaf, gadewch i ni osod y llwybr i gwraidd fs troshaenu dir. Gwneir hyn yn yr adran Cyfluniad System → Root system ffeiliau troshaenu cyfeiriaduron:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Nawr, gadewch i ni greu dwy ffeil.

[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

Bydd y ffeil gyntaf (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) yn disodli'r ffeil /etc/hosts ar y system orffenedig. Bydd yr ail ffeil (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) yn cael ei ychwanegu.

Rydym yn casglu ac yn gwirio:

Buildroot - rhan 2. Creu eich ffurfweddiad bwrdd; defnyddio coeden allanol, troshaen rootfs, sgriptiau ôl-adeiladu

Cyflawni sgriptiau addasu ar wahanol gamau o gydosod system

Yn aml mae angen i chi wneud rhywfaint o waith y tu mewn i'r system ffeiliau targed cyn iddo gael ei becynnu i ddelweddau.

Gellir gwneud hyn yn yr adran Cyfluniad System:

Buildroot - rhan 2. Creu eich ffurfweddiad bwrdd; defnyddio coeden allanol, troshaen rootfs, sgriptiau ôl-adeiladu

Mae'r ddwy sgript gyntaf yn cael eu gweithredu ar ôl adeiladu'r system ffeiliau targed, ond cyn iddo gael ei becynnu i ddelweddau. Y gwahaniaeth yw bod y sgript fakeroot yn cael ei weithredu yng nghyd-destun fakeroot, sy'n efelychu gwaith fel y defnyddiwr gwraidd.

Gweithredir y sgript olaf ar ôl i'r delweddau system gael eu creu. Gallwch chi gyflawni gweithredoedd ychwanegol ynddo, er enghraifft, copïo'r ffeiliau angenrheidiol i weinydd NFS neu greu delwedd o firmware eich dyfais.

Fel enghraifft, byddaf yn creu sgript a fydd yn ysgrifennu'r fersiwn ac yn adeiladu dyddiad i /etc/.
Yn gyntaf, byddaf yn nodi'r llwybr i'r ffeil hon yn fy nghoeden allanol:

Buildroot - rhan 2. Creu eich ffurfweddiad bwrdd; defnyddio coeden allanol, troshaen rootfs, sgriptiau ôl-adeiladu

Ac yn awr y sgript ei hun:

[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

Ar ôl y gwasanaeth, gallwch weld y ffeil hon ar y system.

Yn ymarferol, gall y sgript ddod yn fawr. Felly, yn y prosiect go iawn, cymerais lwybr mwy datblygedig:

  1. Creais gyfeiriadur (my_tree/board_my_x86_board/inside_fakeroot_scripts) lle mae sgriptiau i'w gweithredu, gyda rhifau cyfresol. Er enghraifft, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Ysgrifennais sgript (my_tree/board_my_x86_board/run_inside_fakeroot.sh) sy'n mynd drwy'r cyfeiriadur hwn ac yn gweithredu'r sgriptiau sydd ynddo yn olynol
  3. Penodwyd y sgript hon yn y gosodiadau bwrdd yn y ffurfweddiad System -> Sgriptiau personol i'w rhedeg y tu mewn i'r amgylchedd fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) adran

Ffynhonnell: hab.com

Ychwanegu sylw