Buildroot - partie 2. CrĂ©ation de la configuration de votre carte ; en utilisant une arborescence externe, une superposition rootfs, des scripts de post-construction

Dans cette section, j'examine certaines des options de personnalisation dont j'avais besoin. Ce n'est pas une liste complĂšte de ce que propose buildroot, mais ils sont tout Ă  fait fonctionnels et ne nĂ©cessitent pas d'intervention dans les fichiers de buildroot lui-mĂȘme.

Utilisation du mécanisme EXTERNE pour la personnalisation

Dans un article précédent Nous avons examiné un exemple simple d'ajout de votre propre configuration en ajoutant le defconfig de la carte et les fichiers nécessaires directement dans le répertoire Buildroot.

Mais cette mĂ©thode n'est pas trĂšs pratique, surtout lors de la mise Ă  jour de buildroot. Il existe un mĂ©canisme pour rĂ©soudre ce problĂšme arbre externe. Son essence est que vous pouvez stocker la carte, les configurations, les packages et autres rĂ©pertoires dans un rĂ©pertoire sĂ©parĂ© (par exemple, j'utilise le rĂ©pertoire patches pour appliquer des correctifs aux packages, plus de dĂ©tails dans une section sĂ©parĂ©e) et buildroot lui-mĂȘme les ajoutera Ă  ceux de son rĂ©pertoire.

Remarque : vous pouvez superposer plusieurs arborescences externes Ă  la fois, il y a un exemple dans le manuel buildroot

CrĂ©ons un rĂ©pertoire my_tree, situĂ© Ă  cĂŽtĂ© du rĂ©pertoire buildroot et transfĂ©rons-y notre configuration. Le rĂ©sultat doit ĂȘtre la structure de fichier suivante :

[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

Comme vous pouvez le voir, en général, la structure répÚte la structure de buildroot.

Annuaire planche contient des fichiers spécifiques à chaque carte dans notre cas :

  • bef_cr_fs_img.sh est un script qui sera exĂ©cutĂ© aprĂšs la construction du systĂšme de fichiers cible, mais avant de l'empaqueter en images. Nous l'utiliserons Ă  l'avenir
  • linux.config - configuration du noyau
  • rootfs_overlay - rĂ©pertoire Ă  superposer au-dessus du systĂšme de fichiers cible
  • users.txt - un fichier dĂ©crivant les utilisateurs Ă  crĂ©er

Annuaire configs contient defconfig de nos cartes. Nous n'en avons qu'un.

Forfait - catalogue avec nos forfaits. Initialement, buildroot contient des descriptions et des rĂšgles pour construire un nombre limitĂ© de packages. Plus tard, nous ajouterons ici le gestionnaire de fenĂȘtres icewm et le gestionnaire de connexion graphique Slim.
Corrections - vous permet de stocker facilement vos correctifs pour différents packages. Plus de détails dans une section distincte ci-dessous.
Nous devons maintenant ajouter les fichiers de description de notre arborescence externe. Il y a 3 fichiers responsables de cela : external.desc, Config.in, external.mk.

externe.desc contient la description rĂ©elle :

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

La premiĂšre ligne est le titre. Dans le futur, buildroot crĂ©e une variable $(BR2_EXTERNAL_MY_TREE_PATH), qui doit ĂȘtre utilisĂ© lors de la configuration de l’assembly. Par exemple, le chemin d'accĂšs au fichier utilisateur peut ĂȘtre dĂ©fini comme suit :

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

La deuxiùme ligne est une courte description lisible par l’homme.

Config.in, externe.mk - des fichiers pour décrire les packages ajoutés. Si vous n'ajoutez pas vos propres packages, ces fichiers peuvent rester vides. Pour l'instant, c'est ce que nous allons faire.
Nous avons maintenant notre arborescence externe prĂȘte, contenant la configuration def de notre carte et les fichiers dont elle a besoin. Allons dans le rĂ©pertoire buildroot et spĂ©cifions d'utiliser 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

Dans la premiĂšre commande, nous utilisons l'argument BR2_EXTERNAL=../mon_arbre/, indiquant l'utilisation d'une arborescence externe. Vous pouvez spĂ©cifier plusieurs arborescences externes Ă  utiliser en mĂȘme temps. Dans ce cas, vous ne devez le faire qu'une seule fois, aprĂšs quoi un fichier output/.br-external.mk est créé qui stocke des informations sur l'arborescence externe utilisĂ©e :

[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! Les chemins dans ce fichier seront absolus !

Un Ă©lĂ©ment Options externes est apparu dans le menu :

Buildroot - partie 2. CrĂ©ation de la configuration de votre carte ; en utilisant une arborescence externe, une superposition rootfs, des scripts de post-construction

Ce sous-menu contiendra nos packages de notre arborescence externe. Cette section est actuellement vide.

Il est maintenant plus important pour nous de réécrire les chemins nécessaires pour utiliser l'arborescence externe.

Veuillez noter que dans la section Options de construction → Emplacement pour enregistrer la configuration buildroot, il y aura un chemin absolu vers la configuration defconfig enregistrĂ©e. Il est formĂ© au moment de spĂ©cifier l'utilisation de extgernal_tree.

Nous corrigerons Ă©galement les chemins dans la section Configuration du systĂšme. Pour une table avec des utilisateurs créés :

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

Dans la section Kernel, modifiez le chemin d'accĂšs Ă  la configuration du noyau :

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

Désormais, nos fichiers de notre arborescence externe seront utilisés lors de l'assemblage. Lors du déplacement vers un autre répertoire ou de la mise à jour du buildroot, nous aurons un minimum de problÚmes.

Ajout de la superposition root fs :

Ce mécanisme vous permet d'ajouter/remplacer facilement des fichiers dans le systÚme de fichiers cible.
Si le fichier est dans la superposition root fs, mais pas dans la cible, alors il sera ajouté
Si le fichier est dans la superposition root fs et dans la cible, il sera remplacé.
Tout d’abord, dĂ©finissons le chemin vers le rĂ©pertoire de superposition root fs. Cela se fait dans la section Configuration du systĂšme → RĂ©pertoires de superposition du systĂšme de fichiers racine :

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Créons maintenant deux fichiers.

[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

Le premier fichier (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) remplacera le fichier /etc/hosts sur le systÚme terminé. Le deuxiÚme fichier (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) sera ajouté.

Nous collectons et vérifions :

Buildroot - partie 2. CrĂ©ation de la configuration de votre carte ; en utilisant une arborescence externe, une superposition rootfs, des scripts de post-construction

Exécution de scripts de personnalisation à différentes étapes de l'assemblage du systÚme

Souvent, vous devez effectuer certains travaux à l'intérieur du systÚme de fichiers cible avant qu'il ne soit empaqueté en images.

Cela peut ĂȘtre fait dans la section Configuration du systĂšme :

Buildroot - partie 2. CrĂ©ation de la configuration de votre carte ; en utilisant une arborescence externe, une superposition rootfs, des scripts de post-construction

Les deux premiers scripts sont exécutés aprÚs la création du systÚme de fichiers cible, mais avant qu'il ne soit conditionné en images. La différence est que le script fakeroot est exécuté dans le contexte de fakeroot, qui simule le travail en tant qu'utilisateur root.

Le dernier script est exécuté aprÚs la création des images systÚme. Vous pouvez y effectuer des actions supplémentaires, par exemple copier les fichiers nécessaires sur un serveur NFS ou créer une image du micrologiciel de votre appareil.

À titre d'exemple, je vais crĂ©er un script qui Ă©crira la version et la date de build dans /etc/.
Je vais d'abord indiquer le chemin de ce fichier dans mon arborescence externe :

Buildroot - partie 2. CrĂ©ation de la configuration de votre carte ; en utilisant une arborescence externe, une superposition rootfs, des scripts de post-construction

Et maintenant le script lui-mĂȘme :

[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

AprĂšs l'assemblage, vous pouvez voir ce fichier sur le systĂšme.

En pratique, le script peut devenir volumineux. Par consĂ©quent, dans le projet rĂ©el, j’ai empruntĂ© une voie plus avancĂ©e :

  1. J'ai créé un répertoire (my_tree/board_my_x86_board/inside_fakeroot_scripts) dans lequel se trouvent des scripts à exécuter, avec des numéros de série. Par exemple, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. J'ai écrit un script (my_tree/board_my_x86_board/run_inside_fakeroot.sh) qui parcourt ce répertoire et exécute séquentiellement les scripts qu'il contient
  3. Spécifié ce script dans les paramÚtres de la carte dans la section Configuration systÚme -> Scripts personnalisés à exécuter dans l'environnement fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Source: habr.com

Achetez un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Achetez un hĂ©bergement web fiable avec protection DDoS, serveurs VPS et VDS | ProHoster