Buildroot - part 2. Nggawe konfigurasi Papan Panjenengan; nggunakake wit eksternal, rootfs-overlay, skrip post-build

Ing bagean iki aku ndeleng sawetara opsi pangaturan dhewe sing dibutuhake. Iki dudu dhaptar lengkap babagan apa sing ditawakake buildroot, nanging cukup fungsional lan ora mbutuhake campur tangan ing file buildroot dhewe.

Nggunakake mekanisme EXTERNAL kanggo kustomisasi

Ing artikel sadurunge Kita ndeleng conto prasaja kanggo nambah konfigurasi dhewe kanthi nambahake defconfig papan lan file sing dibutuhake langsung menyang direktori Buildroot.

Nanging cara iki ora trep banget, utamane nalika nganyari buildroot. Ana mekanisme kanggo ngatasi masalah iki wit njaba. Intine yaiku sampeyan bisa nyimpen papan, konfigurasi, paket lan direktori liyane ing direktori sing kapisah (contone, aku nggunakake direktori patch kanggo ngetrapake patch menyang paket, luwih rinci ing bagean sing kapisah) lan buildroot dhewe bakal nambahake menyang sing ana. direktori sawijining.

Cathetan: sampeyan bisa overlay sawetara wit njaba bebarengan, ana conto ing manual buildroot

Ayo nggawe direktori my_tree, sing ana ing jejere direktori buildroot lan transfer konfigurasi kita ing kana. Output kudu dadi struktur file ing ngisor iki:

[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

Kaya sing sampeyan ngerteni, umume struktur mbaleni struktur buildroot.

Direktori Papan ngemot file khusus kanggo saben papan ing kasus kita:

  • bef_cr_fs_img.sh minangka skrip sing bakal dieksekusi sawise mbangun sistem file target, nanging sadurunge dikemas dadi gambar. Kita bakal nggunakake ing mangsa
  • linux.config - konfigurasi kernel
  • rootfs_overlay - direktori kanggo overlay ing ndhuwur sistem file target
  • users.txt - berkas sing njlèntrèhaké pangguna sing bakal digawe

Direktori configs ngandhut defconfig saka Papan kita. Kita mung duwe siji.

paket - katalog karo paket kita. Kaping pisanan, buildroot ngemot katrangan lan aturan kanggo mbangun paket sing winates. Mengko kita bakal nambah manager jendhela icewm lan manager login grafis Slim kene.
Patches - ngidini sampeyan nyimpen tembelan kanthi gampang kanggo macem-macem paket. Rincian liyane ing bagean kapisah ing ngisor iki.
Saiki kita kudu nambah file deskripsi kanggo wit njaba kita. Ana 3 file sing tanggung jawab kanggo iki: external.desc, Config.in, external.mk.

njaba.desc ngemot katrangan nyata:

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

Baris pisanan yaiku judhul. Ing mangsa buildroot nggawe variabel $(BR2_EXTERNAL_MY_TREE_PATH), sing kudu digunakake nalika ngatur perakitan. Contone, path menyang file pangguna bisa disetel kaya ing ngisor iki:

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

Baris kapindho minangka deskripsi cekak sing bisa diwaca manungsa.

Config.in, external.mk - file kanggo njlèntrèhaké paket ditambahaké. Yen sampeyan ora nambah paket sampeyan dhewe, file kasebut bisa dikosongake. Saiki, iki sing bakal kita lakoni.
Saiki kita wis siap njaba-wit, ngemot defconfig saka Papan kita lan file perlu. Ayo menyang direktori buildroot lan nemtokake kanggo nggunakake 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

Ing printah pisanan kita nggunakake argumen BR2_EXTERNAL=../my_tree/, nuduhake panggunaan wit njaba. Sampeyan bisa nemtokake sawetara wit-witan njaba kanggo digunakake ing wektu sing padha. Ing kasus iki, sampeyan mung kudu nindakake iki sapisan, sawise kang file output/.br-external.mk digawe sing nyimpen informasi babagan wit njaba sing digunakake:

[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

Penting! Path ing file iki bakal mutlak!

Item pilihan njaba wis katon ing menu:

Buildroot - part 2. Nggawe konfigurasi Papan Panjenengan; nggunakake wit eksternal, rootfs-overlay, skrip post-build

Submenu iki bakal ngemot paket kita saka njaba-wit kita. Bagean iki saiki kosong.

Saiki iku luwih penting kanggo kita nulis ulang path sing perlu kanggo nggunakake external-wit.

Wigati dimangerteni manawa ing opsi Mbangun → Lokasi kanggo nyimpen bagean konfigurasi buildroot, bakal ana path mutlak menyang defconfig sing disimpen. Iki dibentuk nalika nemtokake panggunaan extgernal_tree.

Kita uga bakal mbenerake path ing bagean konfigurasi Sistem. Kanggo tabel karo pangguna sing digawe:

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

Ing bagean Kernel, ganti path menyang konfigurasi kernel:

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

Saiki file kita saka njaba-wit kita bakal digunakake sak perakitan. Nalika pindhah menyang direktori liya utawa nganyari buildroot, kita bakal duwe masalah minimal.

Nambahake overlay root fs:

Mekanisme iki ngidini sampeyan nambah / ngganti file kanthi gampang ing sistem file target.
Yen file ana ing overlay root fs, nanging ora ana ing target, banjur bakal ditambahake
Yen file ana ing overlay root fs lan ing target, banjur bakal diganti.
Pisanan, ayo nyetel path menyang root fs overlay dir. Iki rampung ing konfigurasi Sistem → bagean direktori overlay sistem file root:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Saiki ayo nggawe rong file.

[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

File pisanan (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) bakal ngganti file /etc/hosts ing sistem rampung. File kapindho (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) bakal ditambahake.

Kita ngumpulake lan mriksa:

Buildroot - part 2. Nggawe konfigurasi Papan Panjenengan; nggunakake wit eksternal, rootfs-overlay, skrip post-build

Eksekusi skrip kustomisasi ing macem-macem tahap perakitan sistem

Asring sampeyan kudu nindakake sawetara karya ing sistem file target sadurunge dikemas menyang gambar.

Iki bisa ditindakake ing bagean konfigurasi Sistem:

Buildroot - part 2. Nggawe konfigurasi Papan Panjenengan; nggunakake wit eksternal, rootfs-overlay, skrip post-build

Rong skrip pisanan dieksekusi sawise sistem file target dibangun, nanging sadurunge dikemas dadi gambar. Bentenipun punika script fakeroot wis kaleksanan ing konteks fakeroot, kang simulates karya minangka pangguna root.

Skrip pungkasan dieksekusi sawise gambar sistem digawe. Sampeyan bisa nindakake tindakan tambahan, contone, nyalin file sing dibutuhake menyang server NFS utawa nggawe gambar perangkat kukuh piranti.

Minangka conto, aku bakal nggawe skrip sing bakal nulis versi lan tanggal mbangun menyang /etc/.
Kaping pisanan, aku bakal nuduhake path menyang file iki ing wit njaba:

Buildroot - part 2. Nggawe konfigurasi Papan Panjenengan; nggunakake wit eksternal, rootfs-overlay, skrip post-build

Lan saiki skrip dhewe:

[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

Sawise perakitan, sampeyan bisa ndeleng file iki ing sistem.

Ing laku, naskah bisa dadi gedhe. Mulane, ing proyek nyata aku njupuk rute sing luwih maju:

  1. Aku nggawe direktori (my_tree / board_my_x86_board / inside_fakeroot_scripts) sing ana skrip sing kudu dieksekusi, kanthi nomer seri. Contone, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Aku nulis skrip (my_tree/board_my_x86_board/run_inside_fakeroot.sh) sing ngliwati direktori iki lan nglakokake skrip sing ana ing kono.
  3. Ditemtokake skrip iki ing setelan papan ing konfigurasi Sistem -> Skrip khusus kanggo mbukak ing lingkungan fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) bagean

Source: www.habr.com

Add a comment