Buildroot - parte 2. Crea a vostra cunfigurazione di bordu; usendu l'arburu esternu, rootfs-overlay, script post-build

In questa sezione fighjulà alcune di l'opzioni di persunalizazione chì avia bisognu. Questa ùn hè micca una lista cumpleta di ciò chì buildroot prupone, ma sò abbastanza funziunali è ùn necessitanu micca intervenzione in i schedarii di buildroot stessu.

Utilizà u mecanismu EXTERNAL per a persunalizazione

In l'articulu precedente Avemu vistu un esempiu simplice di aghjunghje a vostra propria cunfigurazione aghjunghjendu a defconfig di u bordu è i schedarii necessarii direttamente à u cartulare Buildroot.

Ma stu metudu ùn hè micca assai còmuda, soprattuttu quandu aghjurnà buildroot. Ci hè un mecanismu per risolve stu prublema arbre esternu. A so essenza hè chì pudete almacenà bordu, cunfigurazioni, pacchetti è altri cartulari in un repertoriu separatu (per esempiu, aghju utilizatu u repertoriu di patch per applicà patch à i pacchetti, più dettagli in una sezione separata) è buildroot stessu li aghjunghje à quelli in u so repertoriu.

Nota: pudete sovrappone parechji arburi esterni à una volta, ci hè un esempiu in u manual buildroot

Creemu un repertoriu my_tree, situatu vicinu à u repertoriu buildroot è trasfiriu a nostra cunfigurazione quì. L'output deve esse a seguente struttura di file:

[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

Comu pudete vede, in generale a struttura ripete a struttura di buildroot.

catalogo bordu cuntene i schedari specifichi per ogni bordu in u nostru casu:

  • bef_cr_fs_img.sh hè un script chì serà eseguitu dopu à custruisce u sistema di schedariu di destinazione, ma prima di imballà in imagine. Avemu aduprà in u futuru
  • linux.config - cunfigurazione di u kernel
  • rootfs_overlay - repertoriu per sovrappone nantu à u sistema di fugliale di destinazione
  • users.txt - un schedariu chì descrive l'utilizatori per esse creatu

catalogo cunfrunti cuntene defconfig di i nostri bordi. Avemu solu unu.

pacchettu - catalogu cù i nostri pacchetti. Inizialmente, buildroot cuntene descrizzioni è regule per custruisce un numeru limitatu di pacchetti. In seguitu aghjunghjemu u gestore di finestra icewm è u gestore di login graficu Slim quì.
Patches - vi permette di almacenà convenientemente i vostri patch per diversi pacchetti. Più dettagli in una sezione separata sottu.
Avà avemu bisognu di aghjunghje i schedarii di descrizzione per u nostru arbre esternu. Ci sò 3 schedarii rispunsevuli di questu: external.desc, Config.in, external.mk.

esterni.desc cuntene a descrizzione attuale:

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

A prima linea hè u titulu. In u futuru buildroot crea una variabile $(BR2_EXTERNAL_MY_TREE_PATH), chì deve esse usatu quandu cunfigurà l'assemblea. Per esempiu, u percorsu à u schedariu d'utilizatore pò esse stabilitu cum'è seguitu:

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

A seconda linea hè una breve descrizzione leggibile da l'omu.

Config.in, external.mk - fugliali per descriverà i pacchetti aghjuntu. Se ùn aghjunghje micca i vostri pacchetti, allora questi schedari ponu esse vioti. Per avà, hè ciò chì faremu.
Avà avemu u nostru arbulu esternu prontu, chì cuntene a defconfig di u nostru bordu è i schedari chì hà bisognu. Andemu à u cartulare buildroot è specifichi per utilizà l'arburu esternu:

[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 u primu cumandamentu usemu l'argumentu BR2_EXTERNAL=../my_tree/, chì indica l'usu di un arburu esternu. Pudete specificà parechji arburi esterni per l'usu à u stessu tempu. In questu casu, avete bisognu di fà questu una volta, dopu chì un schedariu output/.br-external.mk hè creatu chì almacena infurmazione nantu à l'arburu esternu utilizatu:

[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

Impurtante! I camini in stu schedariu seranu assoluti!

Una voce Opzioni esterni hè apparsu in u menu:

Buildroot - parte 2. Crea a vostra cunfigurazione di bordu; usendu l'arburu esternu, rootfs-overlay, script post-build

Stu submenu cuntene i nostri pacchetti da u nostru arbre esternu. Questa sezione hè attualmente viota.

Avà hè più impurtante per noi di riscrive i camini necessarii per utilizà l'arbulu esternu.

Per piacè nutate chì in l'opzioni di custruzzione → Locu per salvà a sezione di cunfigurazione di buildroot, ci sarà una strada assoluta à a defconfig salvata. Hè furmatu à u mumentu di specificà l'usu di extgernal_tree.

Correggeremu ancu i percorsi in a sezione di cunfigurazione di u Sistema. Per una tavula cù utilizatori creati:

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

In a sezione Kernel, cambia a strada à a cunfigurazione di u kernel:

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

Avà i nostri schedari da u nostru arbre esternu seranu utilizati durante l'assemblea. Quandu si move in un altru repertoriu o aghjurnà u buildroot, averemu un minimu di prublemi.

Aghjunghjendu a superposizione di root fs:

Stu mekanismu permette di facilmente aghjunghje / rimpiazzà i schedari in u sistema di schedariu di destinazione.
Se u schedariu hè in overlay root fs, ma micca in destinazione, allora serà aghjuntu
Se u schedariu hè in overlay root fs è in target, allora serà rimpiazzatu.
Prima, stabiliscemu a strada per root fs overlay dir. Questu hè fattu in a Configurazione di u Sistema → Sezione di cartulari di sovrapposizione di filesystem root:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Avà avemu crià dui schedari.

[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

U primu schedariu (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) rimpiazzà u schedariu /etc/hosts in u sistema finitu. U secondu schedariu (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) serà aghjuntu.

Raccogliemu è verificate:

Buildroot - parte 2. Crea a vostra cunfigurazione di bordu; usendu l'arburu esternu, rootfs-overlay, script post-build

Esecuzione di script di persunalizazione in diverse tappe di l'assemblea di u sistema

Spessu avete bisognu di fà qualchì travagliu in u sistema di fugliali di destinazione prima chì sia imballatu in imagine.

Questu pò esse fattu in a sezione di cunfigurazione di u Sistema:

Buildroot - parte 2. Crea a vostra cunfigurazione di bordu; usendu l'arburu esternu, rootfs-overlay, script post-build

I primi dui scripts sò eseguiti dopu chì u sistema di u schedariu di destinazione hè custruitu, ma prima chì hè imballatu in imagine. A diferenza hè chì l'script fakeroot hè eseguitu in u cuntestu di fakeroot, chì simula u travagliu cum'è l'utilizatore root.

L'ultimu script hè eseguitu dopu chì l'imaghjini di u sistema sò creati. Pudete realizà azzioni supplementari in questu, per esempiu, copià i schedarii necessarii à un servitore NFS o crea una maghjina di u firmware di u vostru dispositivu.

Per esempiu, crearaghju un script chì scriverà a versione è a data di custruzzione in /etc/.
Prima indicà a strada di stu schedariu in u mo arbre esternu:

Buildroot - parte 2. Crea a vostra cunfigurazione di bordu; usendu l'arburu esternu, rootfs-overlay, script post-build

È avà u script stessu:

[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

Dopu à l'assemblea, pudete vede stu schedariu nantu à u sistema.

In pratica, u script pò diventà grande. Dunque, in u veru prughjettu aghju pigliatu una strada più avanzata:

  1. Aghju creatu un repertoriu (my_tree/board_my_x86_board/inside_fakeroot_scripts) in quale ci sò scripts per esse eseguiti, cù numeri di serie. Per esempiu, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Aghju scrittu un script (my_tree/board_my_x86_board/run_inside_fakeroot.sh) chì passa per questu repertoriu è eseguisce in sequenza i scripts cuntenuti in questu.
  3. Specificatu stu script in i paràmetri di u bordu in a Configurazione di u Sistema -> Scripts persunalizati per eseguisce in l'ambiente fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) sezione

Source: www.habr.com

Add a comment