Buildroot - bahagian 2. Mencipta konfigurasi papan anda; menggunakan pokok luaran, rootfs-overlay, skrip pasca binaan

Dalam bahagian ini saya melihat beberapa pilihan penyesuaian yang saya perlukan. Ini bukan senarai lengkap tentang tawaran buildroot, tetapi ia agak berfungsi dan tidak memerlukan campur tangan dalam fail buildroot itu sendiri.

Menggunakan mekanisme LUARAN untuk penyesuaian

Dalam artikel sebelum ini Kami melihat contoh mudah untuk menambah konfigurasi anda sendiri dengan menambahkan defconfig papan dan fail yang diperlukan terus ke direktori Buildroot.

Tetapi kaedah ini tidak begitu mudah, terutamanya apabila mengemas kini buildroot. Terdapat mekanisme untuk menyelesaikan masalah ini pokok luaran. Intinya ialah anda boleh menyimpan papan, konfigurasi, pakej dan direktori lain dalam direktori yang berasingan (sebagai contoh, saya menggunakan direktori patch untuk menggunakan patch pada pakej, butiran lanjut dalam bahagian berasingan) dan buildroot sendiri akan menambahkannya kepada mereka dalam direktorinya.

Nota: anda boleh menindih beberapa pokok luaran sekali gus, terdapat contoh dalam manual buildroot

Mari buat direktori my_tree, terletak di sebelah direktori buildroot dan pindahkan konfigurasi kami ke sana. Output mestilah struktur fail 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 struktur mengulangi struktur buildroot.

Direktori papan mengandungi fail khusus untuk setiap papan dalam kes kami:

  • bef_cr_fs_img.sh ialah skrip yang akan dilaksanakan selepas membina sistem fail sasaran, tetapi sebelum membungkusnya ke dalam imej. Kami akan menggunakannya pada masa hadapan
  • linux.config - konfigurasi kernel
  • rootfs_overlay - direktori untuk tindanan di atas sistem fail sasaran
  • users.txt - fail yang menerangkan pengguna yang akan dibuat

Direktori konfigurasi mengandungi defconfig papan kami. Kami hanya ada satu.

Pakej - katalog dengan pakej kami. Pada mulanya, buildroot mengandungi penerangan dan peraturan untuk membina bilangan pakej yang terhad. Kemudian kami akan menambah pengurus tetingkap icewm dan pengurus log masuk grafik Slim di sini.
Tampalan — membolehkan anda menyimpan patch anda dengan mudah untuk pakej yang berbeza. Butiran lanjut dalam bahagian berasingan di bawah.
Sekarang kita perlu menambah fail penerangan untuk pokok luaran kita. Terdapat 3 fail yang bertanggungjawab untuk ini: external.desc, Config.in, external.mk.

luaran.desc mengandungi penerangan sebenar:

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

Baris pertama ialah tajuk. Pada buildroot masa depan buat pembolehubah $(BR2_EXTERNAL_MY_TREE_PATH), yang harus digunakan semasa mengkonfigurasi pemasangan. Sebagai contoh, laluan ke fail pengguna boleh ditetapkan seperti berikut:

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

Baris kedua ialah penerangan ringkas yang boleh dibaca oleh manusia.

Config.in, external.mk — fail untuk menerangkan pakej tambahan. Jika anda tidak menambah pakej anda sendiri, maka fail ini boleh dibiarkan kosong. Buat masa ini, itulah yang akan kami lakukan.
Sekarang kami telah menyediakan pokok luaran kami, yang mengandungi defconfig papan kami dan fail yang diperlukannya. Mari pergi ke direktori buildroot dan tentukan untuk menggunakan 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

Dalam arahan pertama kita menggunakan hujah BR2_LUARAN=../my_tree/, menunjukkan penggunaan pokok luaran. Anda boleh menentukan beberapa pokok luaran untuk digunakan pada masa yang sama. Dalam kes ini, anda hanya perlu melakukan ini sekali sahaja, selepas itu output fail/.br-external.mk dicipta itu menyimpan maklumat tentang pokok luaran 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! Laluan dalam fail ini adalah mutlak!

Item pilihan luaran telah muncul dalam menu:

Buildroot - bahagian 2. Mencipta konfigurasi papan anda; menggunakan pokok luaran, rootfs-overlay, skrip pasca binaan

Submenu ini akan mengandungi pakej kami daripada pokok luaran kami. Bahagian ini kosong pada masa ini.

Kini adalah lebih penting bagi kita untuk menulis semula laluan yang diperlukan untuk menggunakan pokok luaran.

Sila ambil perhatian bahawa dalam pilihan Binaan → Lokasi untuk menyimpan bahagian konfigurasi buildroot, akan ada laluan mutlak ke defconfig yang disimpan. Ia terbentuk pada saat menentukan penggunaan extgernal_tree.

Kami juga akan membetulkan laluan dalam bahagian konfigurasi Sistem. Untuk jadual dengan pengguna yang dibuat:

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

Dalam bahagian Kernel, tukar laluan ke konfigurasi kernel:

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

Sekarang fail kami dari pokok luaran kami akan digunakan semasa pemasangan. Apabila berpindah ke direktori lain atau mengemas kini buildroot, kami akan menghadapi masalah minimum.

Menambah tindanan fs akar:

Mekanisme ini membolehkan anda menambah/mengganti fail dengan mudah dalam sistem fail sasaran.
Jika fail berada dalam tindanan fs akar, tetapi tidak dalam sasaran, maka ia akan ditambahkan
Jika fail berada dalam tindanan fs akar dan dalam sasaran, maka ia akan diganti.
Mula-mula, mari kita tetapkan laluan ke root fs overlay dir. Ini dilakukan dalam konfigurasi Sistem → bahagian direktori tindanan sistem fail akar:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Sekarang mari kita buat dua fail.

[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

Fail pertama (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) akan menggantikan fail /etc/hosts pada sistem siap. Fail kedua (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) akan ditambahkan.

Kami mengumpul dan menyemak:

Buildroot - bahagian 2. Mencipta konfigurasi papan anda; menggunakan pokok luaran, rootfs-overlay, skrip pasca binaan

Pelaksanaan skrip penyesuaian pada peringkat pemasangan sistem yang berbeza

Selalunya anda perlu melakukan beberapa kerja di dalam sistem fail sasaran sebelum ia dibungkus ke dalam imej.

Ini boleh dilakukan dalam bahagian konfigurasi Sistem:

Buildroot - bahagian 2. Mencipta konfigurasi papan anda; menggunakan pokok luaran, rootfs-overlay, skrip pasca binaan

Dua skrip pertama dilaksanakan selepas sistem fail sasaran dibina, tetapi sebelum ia dibungkus ke dalam imej. Perbezaannya ialah skrip fakeroot dilaksanakan dalam konteks fakeroot, yang mensimulasikan kerja sebagai pengguna root.

Skrip terakhir dilaksanakan selepas imej sistem dibuat. Anda boleh melakukan tindakan tambahan di dalamnya, sebagai contoh, menyalin fail yang diperlukan ke pelayan NFS atau mencipta imej perisian tegar peranti anda.

Sebagai contoh, saya akan mencipta skrip yang akan menulis versi dan tarikh binaan ke /etc/.
Mula-mula saya akan menunjukkan laluan ke fail ini dalam pokok luaran saya:

Buildroot - bahagian 2. Mencipta konfigurasi papan anda; menggunakan pokok luaran, rootfs-overlay, skrip pasca binaan

Dan kini skrip itu 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

Selepas pemasangan, anda boleh melihat fail ini pada sistem.

Dalam amalan, skrip boleh menjadi besar. Oleh itu, dalam projek sebenar saya mengambil laluan yang lebih maju:

  1. Saya mencipta direktori (my_tree/board_my_x86_board/inside_fakeroot_scripts) di mana terdapat skrip untuk dilaksanakan, dengan nombor siri. Contohnya, 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 melalui direktori ini dan secara berurutan melaksanakan skrip yang terkandung di dalamnya
  3. Menentukan skrip ini dalam tetapan papan dalam konfigurasi Sistem -> Skrip tersuai untuk dijalankan di dalam persekitaran fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh) bahagian

Sumber: www.habr.com

Tambah komen