Buildroot - part 2. Creació de la configuració de la placa; utilitzant arbre extern, rootfs-overlay, scripts posteriors a la creació

En aquesta secció veig algunes de les opcions de personalització que necessitava. Aquesta no és una llista completa del que ofereix buildroot, però són bastant funcionals i no requereixen intervenció en els fitxers de buildroot.

Ús del mecanisme EXTERN per a la personalització

En un article anterior Hem vist un exemple senzill d'afegir la vostra pròpia configuració afegint la defconfig del tauler i els fitxers necessaris directament al directori Buildroot.

Però aquest mètode no és molt convenient, sobretot quan actualitzeu buildroot. Hi ha un mecanisme per resoldre aquest problema arbre extern. La seva essència és que podeu emmagatzemar el tauler, les configuracions, els paquets i altres directoris en un directori separat (per exemple, faig servir el directori de pedaços per aplicar pedaços als paquets, més detalls en una secció separada) i el mateix buildroot els afegirà als de el seu directori.

Nota: podeu superposar diversos arbres externs alhora, hi ha un exemple al manual de buildroot

Creem un directori my_tree, situat al costat del directori buildroot i transferim la nostra configuració allà. La sortida hauria de ser la següent estructura de fitxers:

[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

Com podeu veure, en general l'estructura repeteix l'estructura de buildroot.

Каталог tauler conté fitxers específics per a cada tauler en el nostre cas:

  • bef_cr_fs_img.sh és un script que s'executarà després de construir el sistema de fitxers de destinació, però abans d'empaquetar-lo en imatges. L'utilitzarem en el futur
  • linux.config - configuració del nucli
  • rootfs_overlay - directori per superposar-se a la part superior del sistema de fitxers de destinació
  • users.txt: un fitxer que descriu els usuaris a crear

Каталог config conté defconfig dels nostres taulers. Només en tenim un.

paquet - catàleg amb els nostres paquets. Inicialment, buildroot conté descripcions i regles per construir un nombre limitat de paquets. Més endavant afegirem el gestor de finestres icewm i el gestor d'inici de sessió gràfic Slim aquí.
Pegats — us permet emmagatzemar còmodament els vostres pegats per a diferents paquets. Més detalls en una secció separada a continuació.
Ara hem d'afegir els fitxers de descripció del nostre arbre extern. Hi ha 3 fitxers responsables d'això: external.desc, Config.in, external.mk.

extern.desc conté la descripció real:

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

La primera línia és el títol. En el futur buildroot creeu una variable $(BR2_EXTERNAL_MY_TREE_PATH), que s'ha d'utilitzar a l'hora de configurar el conjunt. Per exemple, el camí al fitxer d'usuari es pot establir de la següent manera:

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

La segona línia és una descripció breu i llegible pels humans.

Config.in, external.mk — fitxers per descriure paquets afegits. Si no afegiu els vostres propis paquets, aquests fitxers es poden deixar buits. De moment, això és el que farem.
Ara ja tenim preparat el nostre arbre extern, que conté la configuració de defconfig del nostre tauler i els fitxers que necessita. Anem al directori buildroot i especifiquem utilitzar external-tree:

[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

A la primera ordre fem servir l'argument BR2_EXTERNAL=../el meu_arbre/, que indica l'ús d'un arbre extern. Podeu especificar diversos arbres externs per utilitzar-los al mateix temps. En aquest cas, només heu de fer-ho una vegada, després del qual es crea un fitxer output/.br-external.mk que emmagatzema informació sobre l'arbre extern utilitzat:

[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

Important! Els camins d'aquest fitxer seran absoluts!

Ha aparegut un element d'Opcions externes al menú:

Buildroot - part 2. Creació de la configuració de la placa; utilitzant arbre extern, rootfs-overlay, scripts posteriors a la creació

Aquest submenú contindrà els nostres paquets del nostre arbre extern. Aquesta secció està buida actualment.

Ara és més important per a nosaltres reescriure els camins necessaris per utilitzar l'arbre extern.

Si us plau, tingueu en compte que a la secció Opcions de compilació → Ubicació per desar la configuració de l'arrel de compilació, hi haurà un camí absolut a la configuració de defconfig desada. Es forma en el moment d'especificar l'ús d'extgernal_tree.

També corregirem els camins a la secció de configuració del sistema. Per a una taula amb usuaris creats:

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

A la secció Nucli, canvieu el camí a la configuració del nucli:

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

Ara els nostres fitxers del nostre arbre extern s'utilitzaran durant el muntatge. Quan ens movem a un altre directori o actualitzem el buildroot, tindrem un mínim de problemes.

Afegint una superposició root fs:

Aquest mecanisme us permet afegir/substituir fitxers fàcilment al sistema de fitxers de destinació.
Si el fitxer es troba a la superposició root fs, però no a la destinació, s'afegirà
Si el fitxer es troba a la superposició root fs i a la destinació, es substituirà.
Primer, establim el camí a root fs overlay dir. Això es fa a la secció Configuració del sistema → Directoris de superposició del sistema de fitxers arrel:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Ara creem dos fitxers.

[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

El primer fitxer (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) substituirà el fitxer /etc/hosts al sistema acabat. S'afegirà el segon fitxer (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt).

Recollim i comprovem:

Buildroot - part 2. Creació de la configuració de la placa; utilitzant arbre extern, rootfs-overlay, scripts posteriors a la creació

Execució de scripts de personalització en diferents etapes de muntatge del sistema

Sovint, heu de realitzar una mica de treball dins del sistema de fitxers de destinació abans d'empaquetar-lo en imatges.

Això es pot fer a la secció de configuració del sistema:

Buildroot - part 2. Creació de la configuració de la placa; utilitzant arbre extern, rootfs-overlay, scripts posteriors a la creació

Els dos primers scripts s'executen després de construir el sistema de fitxers de destinació, però abans d'empaquetar-lo en imatges. La diferència és que l'script fakeroot s'executa en el context de fakeroot, que simula el treball com a usuari root.

L'últim script s'executa després de crear les imatges del sistema. Podeu realitzar-hi accions addicionals, per exemple, copiar els fitxers necessaris a un servidor NFS o crear una imatge del microprogramari del vostre dispositiu.

Com a exemple, crearé un script que escriurà la versió i la data de construcció a /etc/.
Primer indicaré el camí a aquest fitxer al meu arbre extern:

Buildroot - part 2. Creació de la configuració de la placa; utilitzant arbre extern, rootfs-overlay, scripts posteriors a la creació

I ara el guió en si:

[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

Després del muntatge, podeu veure aquest fitxer al sistema.

A la pràctica, el guió pot arribar a ser gran. Per tant, en el projecte real vaig fer una ruta més avançada:

  1. He creat un directori (my_tree/board_my_x86_board/inside_fakeroot_scripts) en el qual hi ha scripts per executar, amb números de sèrie. Per exemple, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Vaig escriure un script (my_tree/board_my_x86_board/run_inside_fakeroot.sh) que passa per aquest directori i executa seqüencialment els scripts que hi conté
  3. Especificat aquest script a la configuració del tauler a la secció Configuració del sistema -> Scripts personalitzats per executar-se dins de l'entorn fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Font: www.habr.com

Afegeix comentari