Buildroot - deel 2. Skep jou bordkonfigurasie; met behulp van eksterne boom, rootfs-overlay, post-build skrifte

In hierdie afdeling kyk ek na sommige van die aanpassingsopsies wat ek nodig gehad het. Dit is nie 'n volledige lys van wat buildroot bied nie, maar hulle is redelik funksioneel en vereis nie ingryping in die lêers van buildroot self nie.

Gebruik die EKSTERNE meganisme vir aanpassing

In 'n vorige artikel Ons het na 'n eenvoudige voorbeeld van die byvoeging van jou eie konfigurasie gekyk deur die bord se defconfig en die nodige lêers direk by die Buildroot-gids by te voeg.

Maar hierdie metode is nie baie gerieflik nie, veral as u buildroot bywerk. Daar is 'n meganisme om hierdie probleem op te los eksterne boom. Die essensie daarvan is dat jy bord, konfigurasies, pakkette en ander gidse in 'n aparte gids kan stoor (ek gebruik byvoorbeeld die patches-gids om pleisters op pakkette toe te pas, meer besonderhede in 'n aparte afdeling) en buildroot self sal dit by dié in sy gids.

Let wel: jy kan verskeie eksterne bome gelyktydig oorlê, daar is 'n voorbeeld in die bouwortelhandleiding

Kom ons skep 'n gids my_tree, geleë langs die buildroot gids en dra ons konfigurasie daarheen. Die uitvoer moet die volgende lêerstruktuur wees:

[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

Soos u kan sien, herhaal die struktuur oor die algemeen die struktuur van bouwortel.

Каталог raad bevat lêers spesifiek vir elke raad in ons geval:

  • bef_cr_fs_img.sh is 'n skrip wat uitgevoer sal word nadat die teikenlêerstelsel gebou is, maar voordat dit in beelde verpak is. Ons sal dit in die toekoms gebruik
  • linux.config - kernkonfigurasie
  • rootfs_overlay - gids om bo-op die teikenlêerstelsel te bedek
  • users.txt - 'n lêer wat die gebruikers beskryf wat geskep moet word

Каталог configs bevat defconfig van ons borde. Ons het net een.

pakket - katalogus met ons pakkette. Aanvanklik bevat buildroot beskrywings en reëls vir die bou van 'n beperkte aantal pakkette. Later sal ons die icewm-vensterbestuurder en die Slim grafiese aanmeldbestuurder hier byvoeg.
Patches - laat jou toe om jou pleisters gerieflik vir verskillende pakkette te stoor. Meer besonderhede in 'n aparte afdeling hieronder.
Nou moet ons die beskrywingslêers vir ons eksterne boom byvoeg. Daar is 3 lêers wat hiervoor verantwoordelik is: external.desc, Config.in, external.mk.

ekstern.beskrywing bevat die werklike beskrywing:

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

Die eerste reël is die titel. In die toekoms bouwortel skep 'n veranderlike $(BR2_EXTERNAL_MY_TREE_PATH), wat gebruik moet word wanneer die samestelling gekonfigureer word. Byvoorbeeld, die pad na die gebruikerlêer kan soos volg gestel word:

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

Die tweede reël is 'n kort, mens-leesbare beskrywing.

Config.in, ekstern.mk - lêers om bygevoegde pakkette te beskryf. As jy nie jou eie pakkette byvoeg nie, kan hierdie lêers leeg gelaat word. Vir eers is dit wat ons sal doen.
Nou het ons ons eksterne boom gereed, wat die defconfig van ons bord en die lêers wat dit benodig bevat. Kom ons gaan na die buildroot-gids en spesifiseer om eksterne boom te gebruik:

[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

In die eerste opdrag gebruik ons ​​die argument BR2_EXTERNAL=../my_tree/, wat die gebruik van 'n eksterne boom aandui. Jy kan verskeie eksterne-bome vir gebruik op dieselfde tyd spesifiseer. In hierdie geval hoef jy dit net een keer te doen, waarna 'n lêeruitset/.br-external.mk geskep word wat stoor inligting oor die eksterne boom wat gebruik word:

[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

Belangrik! Die paaie in hierdie lêer sal absoluut wees!

'n Eksterne opsie-item het in die kieslys verskyn:

Buildroot - deel 2. Skep jou bordkonfigurasie; met behulp van eksterne boom, rootfs-overlay, post-build skrifte

Hierdie subkieslys sal ons pakkette van ons eksterne boom bevat. Hierdie afdeling is tans leeg.

Nou is dit vir ons belangriker om die nodige paaie te herskryf om eksterne-boom te gebruik.

Neem asseblief kennis dat in die Bou-opsies → Ligging om buildroot-konfigurasie te stoor, daar 'n absolute pad na die gestoorde defconfig sal wees. Dit word gevorm op die oomblik dat die gebruik van extgernal_tree gespesifiseer word.

Ons sal ook die paaie in die Stelselkonfigurasie-afdeling regstel. Vir 'n tabel met geskepte gebruikers:

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

In die kern-afdeling, verander die pad na die kernkonfigurasie:

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

Nou sal ons lêers van ons eksterne boom tydens samestelling gebruik word. Wanneer ons na 'n ander gids beweeg of die bouwortel bywerk, sal ons 'n minimum van probleme hê.

Voeg wortel fs-oorleg by:

Hierdie meganisme laat jou toe om lêers maklik by te voeg/vervang in die teikenlêerstelsel.
As die lêer in root fs-oorleg is, maar nie in teiken nie, sal dit bygevoeg word
As die lêer in root fs-oorleg en in teiken is, sal dit vervang word.
Kom ons stel eers die pad na root fs overlay dir. Dit word gedoen in die Stelselkonfigurasie → Wortellêerstelsel-oorleggidse afdeling:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Kom ons skep nou twee lêers.

[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

Die eerste lêer (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) sal die /etc/hosts-lêer op die voltooide stelsel vervang. Die tweede lêer (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) sal bygevoeg word.

Ons versamel en kontroleer:

Buildroot - deel 2. Skep jou bordkonfigurasie; met behulp van eksterne boom, rootfs-overlay, post-build skrifte

Uitvoering van pasmaakskrifte in verskillende stadiums van stelselsamestelling

Dikwels moet jy werk binne die teikenlêerstelsel verrig voordat dit in beelde verpak word.

Dit kan gedoen word in die Stelselkonfigurasie-afdeling:

Buildroot - deel 2. Skep jou bordkonfigurasie; met behulp van eksterne boom, rootfs-overlay, post-build skrifte

Die eerste twee skrifte word uitgevoer nadat die teikenlêerstelsel gebou is, maar voordat dit in beelde verpak is. Die verskil is dat die fakeroot-skrip in die konteks van fakeroot uitgevoer word, wat werk as die wortelgebruiker simuleer.

Die laaste skrip word uitgevoer nadat die stelselbeelde geskep is. Jy kan bykomende aksies daarin uitvoer, byvoorbeeld, kopieer die nodige lêers na 'n NFS-bediener of skep 'n prent van jou toestel se firmware.

As 'n voorbeeld sal ek 'n skrip skep wat die weergawe en boudatum sal skryf na /etc/.
Eerstens sal ek die pad na hierdie lêer in my eksterne boom aandui:

Buildroot - deel 2. Skep jou bordkonfigurasie; met behulp van eksterne boom, rootfs-overlay, post-build skrifte

En nou die skrif self:

[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

Na samestelling kan u hierdie lêer op die stelsel sien.

In die praktyk kan die draaiboek groot word. Daarom het ek in die regte projek 'n meer gevorderde roete geneem:

  1. Ek het 'n gids geskep (my_tree/board_my_x86_board/inside_fakeroot_scripts) waarin daar skrifte is wat uitgevoer moet word, met reeksnommers. Byvoorbeeld, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Ek het 'n skrif geskryf (my_tree/board_my_x86_board/run_inside_fakeroot.sh) wat deur hierdie gids gaan en die skrifte wat daarin vervat is, opeenvolgend uitvoer
  3. Spesifiseer hierdie skrif in die bordinstellings in die Stelselopstelling -> Pasgemaakte skrifte om binne die fakeroot-omgewing ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) te loop

Bron: will.com

Voeg 'n opmerking