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
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 filesComme 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 articleLa 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.txtLa 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 menuconfigDans 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 articleImportant! Les chemins dans ce fichier seront absolus !
Un élément Options externes est apparu dans le menu :

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.txtDans la section Kernel, modifiez le chemin d'accĂšs Ă la configuration du noyau :
$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/linux.configDé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 overlayLe 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 :

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 :

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 :

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-releaseAprĂš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 :
- 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
- 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
- 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
