Buildroot - bagian 2. Membuat konfigurasi papan Anda; menggunakan pohon eksternal, rootfs-overlay, skrip pasca-pembangunan

Di bagian ini saya melihat beberapa opsi penyesuaian yang saya perlukan. Ini bukan daftar lengkap dari apa yang ditawarkan buildroot, tetapi cukup fungsional dan tidak memerlukan intervensi pada file buildroot itu sendiri.

Menggunakan mekanisme EKSTERNAL untuk penyesuaian

Dalam artikel sebelumnya Kami melihat contoh sederhana menambahkan konfigurasi Anda sendiri dengan menambahkan defconfig board dan file yang diperlukan langsung ke direktori Buildroot.

Namun cara ini sangat tidak nyaman, terutama saat mengupdate buildroot. Ada mekanisme untuk mengatasi masalah ini pohon eksternal. Intinya adalah Anda dapat menyimpan board, konfigurasi, paket, dan direktori lain di direktori terpisah (misalnya, saya menggunakan direktori patch untuk menerapkan patch ke paket, detail lebih lanjut di bagian terpisah) dan buildroot sendiri akan menambahkannya ke yang ada di direktorinya.

Catatan: Anda dapat melapisi beberapa pohon eksternal sekaligus, ada contohnya di manual buildroot

Mari buat direktori my_tree, yang terletak di sebelah direktori buildroot dan transfer konfigurasi kita ke sana. Outputnya harus berupa struktur file berikut:

[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

Seperti yang Anda lihat, secara umum strukturnya mengulangi struktur buildroot.

Direktori papan berisi file khusus untuk setiap papan dalam kasus kami:

  • bef_cr_fs_img.sh adalah skrip yang akan dieksekusi setelah membangun sistem file target, tetapi sebelum mengemasnya menjadi gambar. Kami akan menggunakannya di masa depan
  • linux.config - konfigurasi kernel
  • rootfs_overlay - direktori untuk dihamparkan di atas sistem file target
  • pengguna.txt - file yang menjelaskan pengguna yang akan dibuat

Direktori konfigurasi berisi defconfig papan kami. Kami hanya punya satu.

Paket - katalog dengan paket kami. Awalnya, buildroot berisi deskripsi dan aturan untuk membangun paket dalam jumlah terbatas. Nanti kita akan menambahkan window manager icewm dan manajer login grafis Slim di sini.
Patch — memungkinkan Anda menyimpan patch dengan mudah untuk paket berbeda. Rincian lebih lanjut di bagian terpisah di bawah.
Sekarang kita perlu menambahkan file deskripsi untuk pohon eksternal kita. Ada 3 file yang bertanggung jawab untuk ini: external.desc, Config.in, external.mk.

eksternal.desc berisi deskripsi sebenarnya:

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

Baris pertama adalah judulnya. Di masa depan, buildroot membuat variabel $(BR2_EXTERNAL_MY_TREE_PATH), yang harus digunakan saat mengonfigurasi rakitan. Misalnya, jalur ke file pengguna dapat diatur sebagai berikut:

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

Baris kedua adalah deskripsi singkat yang dapat dibaca manusia.

Konfigurasi di, eksternal.mk — file untuk menjelaskan paket tambahan. Jika Anda tidak menambahkan paket Anda sendiri, file-file ini dapat dibiarkan kosong. Untuk saat ini, itulah yang akan kami lakukan.
Sekarang kita sudah menyiapkan pohon eksternal, berisi defconfig board kita dan file yang dibutuhkan. Mari pergi ke direktori buildroot dan tentukan untuk menggunakan pohon eksternal:

[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

Pada perintah pertama kita menggunakan argumen BR2_EXTERNAL=../pohon_saya/, menunjukkan penggunaan pohon eksternal. Anda dapat menentukan beberapa pohon eksternal untuk digunakan secara bersamaan. Dalam hal ini, Anda hanya perlu melakukan ini sekali, setelah itu file output/.br-external.mk dibuat yang menyimpan informasi tentang pohon eksternal yang digunakan:

[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! Jalur dalam file ini akan bersifat absolut!

Item Opsi eksternal telah muncul di menu:

Buildroot - bagian 2. Membuat konfigurasi papan Anda; menggunakan pohon eksternal, rootfs-overlay, skrip pasca-pembangunan

Submenu ini akan berisi paket-paket kami dari pohon eksternal kami. Bagian ini saat ini kosong.

Sekarang lebih penting bagi kita untuk menulis ulang jalur yang diperlukan untuk menggunakan pohon eksternal.

Harap dicatat bahwa di bagian Opsi build → Lokasi untuk menyimpan konfigurasi buildroot, akan ada jalur absolut ke defconfig yang disimpan. Itu terbentuk pada saat menentukan penggunaan extgernal_tree.

Kami juga akan memperbaiki jalur di bagian Konfigurasi sistem. Untuk tabel dengan pengguna yang dibuat:

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

Di bagian Kernel, ubah jalur ke konfigurasi kernel:

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

Sekarang file kita dari pohon eksternal akan digunakan selama perakitan. Saat berpindah ke direktori lain atau memperbarui buildroot, kita akan menghadapi sedikit masalah.

Menambahkan hamparan root fs:

Mekanisme ini memungkinkan Anda dengan mudah menambah/mengganti file di sistem file target.
Jika file berada di root fs overlay, tetapi tidak dalam target, maka file tersebut akan ditambahkan
Jika file berada di root fs overlay dan di target, maka akan diganti.
Pertama, mari kita atur path ke direktori root fs overlay. Ini dilakukan di bagian Konfigurasi sistem → Direktori overlay sistem file root:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Sekarang mari kita buat dua 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 pertama (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) akan menggantikan file /etc/hosts pada sistem yang sudah selesai. File kedua (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) akan ditambahkan.

Kami mengumpulkan dan memeriksa:

Buildroot - bagian 2. Membuat konfigurasi papan Anda; menggunakan pohon eksternal, rootfs-overlay, skrip pasca-pembangunan

Eksekusi skrip penyesuaian pada berbagai tahap perakitan sistem

Seringkali Anda perlu melakukan beberapa pekerjaan di dalam sistem file target sebelum dikemas menjadi gambar.

Ini dapat dilakukan di bagian Konfigurasi sistem:

Buildroot - bagian 2. Membuat konfigurasi papan Anda; menggunakan pohon eksternal, rootfs-overlay, skrip pasca-pembangunan

Dua skrip pertama dijalankan setelah sistem file target dibuat, tetapi sebelum dikemas menjadi gambar. Perbedaannya adalah skrip fakeroot dijalankan dalam konteks fakeroot, yang mensimulasikan pekerjaan sebagai pengguna root.

Skrip terakhir dijalankan setelah image sistem dibuat. Anda dapat melakukan tindakan tambahan di dalamnya, misalnya, menyalin file yang diperlukan ke server NFS atau membuat gambar firmware perangkat Anda.

Sebagai contoh, saya akan membuat skrip yang akan menulis versi dan tanggal pembuatan ke /etc/.
Pertama saya akan menunjukkan jalur ke file ini di pohon eksternal saya:

Buildroot - bagian 2. Membuat konfigurasi papan Anda; menggunakan pohon eksternal, rootfs-overlay, skrip pasca-pembangunan

Dan sekarang skripnya sendiri:

[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

Setelah perakitan, Anda dapat melihat file ini di sistem.

Dalam prakteknya, naskahnya bisa menjadi besar. Oleh karena itu, dalam proyek sebenarnya saya mengambil rute yang lebih maju:

  1. Saya membuat direktori (my_tree/board_my_x86_board/inside_fakeroot_scripts) yang di dalamnya terdapat skrip yang akan dieksekusi, dengan nomor seri. Misalnya, 0001-add-my_small_linux-version.sh, 0002-clear-Apache-root-dir.sh
  2. Saya menulis skrip (my_tree/board_my_x86_board/run_inside_fakeroot.sh) yang melewati direktori ini dan secara berurutan mengeksekusi skrip yang ada di dalamnya
  3. Menentukan skrip ini dalam pengaturan papan di konfigurasi Sistem -> Skrip khusus untuk dijalankan di dalam lingkungan fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Sumber: www.habr.com

Tambah komentar