Buildroot - parte 2. Creando a súa configuración de placa; usando árbore externa, rootfs-overlay, scripts post-build

Nesta sección vexo algunhas das opcións de personalización que necesitaba. Esta non é unha lista completa do que ofrece buildroot, pero son bastante funcionais e non requiren intervención nos ficheiros de buildroot.

Usando o mecanismo EXTERNO para a personalización

Nun artigo anterior Miramos un exemplo sinxelo de engadir a súa propia configuración engadindo a defconfig do taboleiro e os ficheiros necesarios directamente ao directorio Buildroot.

Pero este método non é moi cómodo, especialmente cando se actualiza buildroot. Existe un mecanismo para resolver este problema árbore externa. A súa esencia é que pode almacenar placas, configuracións, paquetes e outros directorios nun directorio separado (por exemplo, eu uso o directorio de parches para aplicar parches aos paquetes, máis detalles nunha sección separada) e o propio buildroot engadiraos aos que están en o seu directorio.

Nota: podes superpoñer varias árbores externas á vez, hai un exemplo no manual buildroot

Imos crear un directorio my_tree, situado xunto ao directorio buildroot e transferir alí a nosa configuración. A saída debe ser a seguinte estrutura de ficheiros:

[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

Como podes ver, en xeral a estrutura repite a estrutura de buildroot.

Directorio placa contén ficheiros específicos para cada placa no noso caso:

  • bef_cr_fs_img.sh é un script que se executará despois de construír o sistema de ficheiros de destino, pero antes de empaquetalo en imaxes. Usarémolo no futuro
  • linux.config - configuración do núcleo
  • rootfs_overlay - directorio para superpoñer enriba do sistema de ficheiros de destino
  • users.txt - un ficheiro que describe os usuarios que se van crear

Directorio config contén defconfig dos nosos taboleiros. Só temos un.

Paquete - catálogo cos nosos paquetes. Inicialmente, buildroot contén descricións e regras para construír un número limitado de paquetes. Máis tarde engadiremos aquí o xestor de fiestras icewm e o xestor de inicio de sesión gráfico Slim.
Patches — permítelle almacenar convenientemente os seus parches para diferentes paquetes. Máis detalles nunha sección separada a continuación.
Agora necesitamos engadir os ficheiros de descrición para a nosa árbore externa. Hai 3 ficheiros responsables diso: external.desc, Config.in, external.mk.

externo.desc contén a descrición real:

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

A primeira liña é o título. No futuro buildroot cree unha variable $(BR2_EXTERNAL_MY_TREE_PATH), que se debe utilizar ao configurar o conxunto. Por exemplo, a ruta ao ficheiro de usuario pódese establecer do seguinte xeito:

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

A segunda liña é unha descrición curta e lexible por humanos.

Config.in, external.mk — ficheiros para describir paquetes engadidos. Se non engades os teus propios paquetes, estes ficheiros poden quedar baleiros. Polo momento, iso é o que faremos.
Agora temos a nosa árbore externa lista, que contén a configuración defconfig do noso taboleiro e os ficheiros que necesita. Imos ao directorio buildroot e especifiquemos usar 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

No primeiro comando usamos o argumento BR2_EXTERNAL=../a miña_árbore/, indicando o uso dunha árbore externa. Pode especificar varias árbores externas para o seu uso ao mesmo tempo. Neste caso, só precisa facelo unha vez, despois de que se crea un ficheiro output/.br-external.mk que almacena información sobre a árbore externa utilizada:

[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

Importante! As rutas deste ficheiro serán absolutas!

Apareceu un elemento de opcións externas no menú:

Buildroot - parte 2. Creando a súa configuración de placa; usando árbore externa, rootfs-overlay, scripts post-build

Este submenú conterá os nosos paquetes da nosa árbore externa. Esta sección está baleira.

Agora é máis importante para nós reescribir os camiños necesarios para usar external-tree.

Teña en conta que na sección Opcións de compilación → Localización para gardar a configuración de raíz de compilación, haberá unha ruta absoluta á configuración defconfig gardada. Fórmase no momento de especificar o uso de extgernal_tree.

Tamén corrixiremos os camiños na sección Configuración do sistema. Para unha táboa con usuarios creados:

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

Na sección Kernel, cambie o camiño á configuración do núcleo:

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

Agora os nosos ficheiros da nosa árbore externa utilizaranse durante a montaxe. Ao movernos a outro directorio ou actualizar o buildroot, teremos un mínimo de problemas.

Engadindo superposición root fs:

Este mecanismo permítelle engadir/substituír facilmente ficheiros no sistema de ficheiros de destino.
Se o ficheiro está na superposición root fs, pero non no destino, engadirase
Se o ficheiro está na superposición root fs e no destino, substituirase.
Primeiro, imos establecer o camiño para root fs overlay dir. Isto faise na sección Configuración do sistema → Directorios de superposición do sistema de ficheiros raíz:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Agora imos crear dous ficheiros.

[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

O primeiro ficheiro (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) substituirá o ficheiro /etc/hosts no sistema rematado. Engadirase o segundo ficheiro (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt).

Recollemos e comprobamos:

Buildroot - parte 2. Creando a súa configuración de placa; usando árbore externa, rootfs-overlay, scripts post-build

Execución de scripts de personalización en diferentes fases de montaxe do sistema

Moitas veces cómpre realizar algún traballo dentro do sistema de ficheiros de destino antes de que este se empaquete en imaxes.

Isto pódese facer na sección Configuración do sistema:

Buildroot - parte 2. Creando a súa configuración de placa; usando árbore externa, rootfs-overlay, scripts post-build

Os dous primeiros scripts execútanse despois de que o sistema de ficheiros de destino está construído, pero antes de que se empaquete en imaxes. A diferenza é que o script fakeroot execútase no contexto de fakeroot, que simula o traballo como usuario root.

O último script execútase despois de crear as imaxes do sistema. Podes realizar accións adicionais nel, por exemplo, copiar os ficheiros necesarios nun servidor NFS ou crear unha imaxe do firmware do teu dispositivo.

Como exemplo, crearei un script que escribirá a versión e a data de compilación en /etc/.
Primeiro indicarei o camiño a este ficheiro na miña árbore externa:

Buildroot - parte 2. Creando a súa configuración de placa; usando árbore externa, rootfs-overlay, scripts post-build

E agora o propio guión:

[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

Despois da montaxe, podes ver este ficheiro no sistema.

Na práctica, o guión pode facerse grande. Polo tanto, no proxecto real tomei unha ruta máis avanzada:

  1. Creei un directorio (my_tree/board_my_x86_board/inside_fakeroot_scripts) no que hai scripts a executar, con números de serie. Por exemplo, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Escribín un script (my_tree/board_my_x86_board/run_inside_fakeroot.sh) que pasa por este directorio e executa secuencialmente os scripts contidos nel
  3. Especificou este script na configuración do taboleiro na sección Configuración do sistema -> Scripts personalizados para executar dentro do contorno fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Fonte: www.habr.com

Engadir un comentario