Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

pengenalan

Dalam rangkaian artikel ini, saya ingin melihat sistem build distribusi buildroot dan berbagi pengalaman saya dalam menyesuaikannya. Di sini Anda akan mendapatkan pengalaman praktis dalam membuat OS kecil dengan antarmuka grafis dan fungsionalitas minimal.

Pertama-tama, Anda tidak boleh bingung antara sistem build dan distribusinya. Buildroot dapat membangun sistem dari sekumpulan paket yang ditawarkan padanya. Buildroot dibangun di atas makefile dan karenanya memiliki kemampuan penyesuaian yang sangat besar. Ganti paket dengan versi lain, tambahkan paket Anda sendiri, ubah aturan pembuatan paket, sesuaikan sistem file setelah menginstal semua paket? buildroot dapat melakukan semua ini.

Di Rusia, buildroot digunakan, tetapi menurut saya hanya ada sedikit informasi berbahasa Rusia untuk pemula.

Tujuan dari pekerjaan ini adalah untuk merakit kit distribusi dengan pengunduhan langsung, antarmuka icewm, dan browser. Platform targetnya adalah kotak virtual.

Mengapa membangun distribusi Anda sendiri? Seringkali fungsionalitas yang terbatas diperlukan dengan sumber daya yang terbatas. Bahkan lebih sering dalam otomatisasi Anda perlu membuat firmware. Mengadaptasi distribusi tujuan umum dengan membersihkan paket-paket yang tidak diperlukan dan mengubahnya menjadi firmware lebih memakan banyak tenaga dibandingkan membangun distribusi baru. Menggunakan Gentoo juga memiliki keterbatasan.

Sistem Buildroot sangat kuat, tetapi tidak akan memberikan manfaat apa pun bagi Anda. Itu hanya dapat mengaktifkan dan mengotomatiskan proses perakitan.

Sistem pembangunan alternatif (yocto, sistem pembangunan terbuka, dan lainnya) tidak dipertimbangkan atau dibandingkan.

Di mana mendapatkannya dan bagaimana memulainya

Situs web proyek - buildroot.org. Di sini Anda dapat mengunduh versi saat ini dan membaca manualnya. Di sana Anda dapat menghubungi komunitas, ada pelacak bug, daftar email, dan saluran irc.

Buildroot mengoperasikan defconfigs untuk papan target build. Defconfig adalah file konfigurasi yang hanya menyimpan opsi yang tidak memiliki nilai default. Dialah yang menentukan apa yang akan dikumpulkan dan bagaimana caranya. Dalam hal ini, Anda dapat secara terpisah mengkonfigurasi konfigurasi bootloader busybox, linux-kernel, uglibc, u-boot dan barebox, tetapi semuanya akan terikat ke papan target.
Setelah membongkar arsip yang diunduh atau mengkloning dari git, kami mendapatkan buildroot yang siap digunakan. Anda dapat membaca lebih lanjut tentang struktur direktori di manual; Saya akan memberi tahu Anda tentang yang paling penting:

papan — direktori dengan file khusus untuk setiap papan. Ini bisa berupa skrip untuk membentuk image sistem (iso, sdcart, cpio, dan lainnya), direktori overlay, konfigurasi kernel, dll.
konfigurasi — defconfig papan yang sebenarnya. Defconfig adalah konfigurasi papan yang tidak lengkap. Ini hanya menyimpan parameter yang berbeda dari pengaturan default
dl — direktori dengan kode sumber/file yang diunduh untuk perakitan
keluaran/sasaran — sistem file rakitan dari OS yang dihasilkan. Selanjutnya, gambar dibuat darinya untuk diunduh/instalasi
keluaran/host - utilitas host untuk perakitan
keluaran/bangun - paket rakitan

Majelis dikonfigurasi melalui KConfig. Sistem yang sama digunakan untuk membangun kernel Linux. Daftar perintah yang paling umum digunakan (dijalankan di direktori buildroot):

  • make menuconfig - memanggil konfigurasi build. Anda juga dapat menggunakan antarmuka grafis (buat nconfig, buat xconfig, buat gconfig)
  • make linux-menuconfig - memanggil konfigurasi kernel.
  • make clean - membersihkan hasil build (semuanya tersimpan di output)
  • membuat - membangun sistem. Ini tidak merakit kembali proses yang sudah dirakit.
  • make defconfig_name - mengalihkan konfigurasi ke defconfig tertentu
  • make list-defconfigs - tampilkan daftar defconfigs
  • make source - cukup unduh file instalasi, tanpa membangun.
  • buat bantuan - buat daftar perintah yang mungkin

Catatan penting dan tips bermanfaat

Buildroot tidak membangun kembali paket yang telah dibuat! Oleh karena itu, situasi mungkin timbul ketika diperlukan perakitan kembali secara menyeluruh.

Anda dapat membangun kembali paket terpisah dengan perintah buat nama paket-rebuild. Misalnya, Anda dapat membangun kembali kernel Linux:

make linux-rebuild

Buildroot menyimpan status paket apa pun dengan membuat file .stamp di direktori output/build/$packagename:

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Oleh karena itu, Anda dapat membangun kembali root-fs dan image tanpa membangun kembali paket:

rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make

Variabel Berguna

buildroot memiliki sekumpulan variabel untuk memudahkan konfigurasi

  • $TOPDIR - direktori buildroot
  • $BASEDIR - direktori OUTPUT
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — host fs, staging fs, target fs direktori build.
  • $BUILD_DIR - direktori dengan paket yang belum dibongkar dan dibuat

Visualisasi

buildroot memiliki fitur visualisasi, Anda dapat membuat diagram ketergantungan, grafik waktu pembuatan, dan grafik ukuran paket di sistem akhir. Hasilnya berupa file pdf (bisa dipilih svn,png) di direktori output/graph.

Contoh perintah visualisasi:

  • make graph-depends membangun pohon ketergantungan
  • make <pkg>-graph-depends membangun pohon ketergantungan untuk paket tertentu
  • BR2_GRAPH_OUT=png make graph-build waktu pembuatan plot dengan keluaran PNG
  • make graph-size ukuran paket plot

Skrip yang berguna

Ada subdirektori di direktori buildroot utilitas dengan skrip yang berguna. Misalnya, ada skrip yang memeriksa kebenaran deskripsi paket. Ini mungkin berguna saat menambahkan paket Anda sendiri (saya akan melakukannya nanti). File utils/readme.txt berisi deskripsi skrip ini.

Mari kita membangun distribusi stok

Penting untuk diingat bahwa semua operasi dilakukan atas nama pengguna biasa, bukan root.
Semua perintah dijalankan di buildroot. Paket buildroot sudah menyertakan serangkaian konfigurasi untuk banyak papan umum dan virtualisasi.

Mari kita lihat daftar konfigurasinya:

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Beralih ke konfigurasi qemu_x86_64_defconfig

make qemu_x86_64_defconfig

Dan kami memulai perakitan

make

Build berhasil diselesaikan, lihat hasilnya:

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Buildroot telah mengkompilasi gambar yang dapat Anda jalankan di Qemu dan memverifikasi bahwa gambar tersebut berfungsi.

qemu-system-x86_64 -kernel output/images/bzImage -hda    output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S

Hasilnya adalah sistem yang berjalan di qemu:

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Membuat konfigurasi papan Anda sendiri

Menambahkan File Papan

Mari kita lihat daftar konfigurasinya:

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Dalam daftar kita melihat pc_x86_64_efi_defconfig. Kami akan membuat papan kami sendiri dengan menyalinnya dari konfigurasi:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Mari segera buat direktori board untuk menyimpan skrip, rootfs-overlay, dan file lain yang diperlukan:

mkdir board/my_x86_board

Beralih ke defconfig ini:

make my_x86_board_defconfig

Jadi, sekarang konfigurasi build (disimpan dalam .config di root direktori buildroot) sesuai dengan mesin target boot x86-64 legacy (bios).

Mari kita salin konfigurasi kernel linux (berguna nanti):

cp board/pc/linux.config board/my_x86_board/

Mengatur parameter build melalui KConfig

Mari kita mulai penyiapannya:

make menuconfig 

Jendela KConfig akan terbuka. Dimungkinkan untuk mengkonfigurasi dengan antarmuka grafis (buat nconfig, buat xconfig, buat gconfig):

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Kita masuk ke bagian pertama Opsi Target. Di sini Anda dapat memilih arsitektur target yang pembangunannya akan dilakukan.

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Opsi build - ada berbagai pengaturan build di sini. Anda dapat menentukan direktori dengan kode sumber, jumlah thread build, mirror untuk mengunduh kode sumber, dan pengaturan lainnya. Biarkan pengaturannya default.

Toolchain – alat pembangunannya sendiri dikonfigurasikan di sini. Baca lebih lanjut tentang dia.

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Jenis rantai alat – jenis rantai alat yang digunakan. Ini bisa berupa rantai alat yang dibangun di dalam buildroot atau yang eksternal (Anda dapat menentukan direktori dengan yang sudah dibangun atau url untuk mengunduh). Ada opsi tambahan untuk arsitektur yang berbeda. Misalnya, untuk lengan Anda cukup memilih versi Linaro dari rantai alat eksternal.

Perpustakaan C – pemilihan perpustakaan C. Pengoperasian seluruh sistem bergantung pada ini. Biasanya, glibc digunakan, yang mendukung semua fungsi yang mungkin. Namun mungkin terlalu besar untuk sistem tertanam, sehingga uglibc atau musl sering dipilih. Kami akan memilih glibc (ini akan diperlukan nanti untuk menggunakan systemd).

Seri Kernel Header dan Custom Kernel Headers – harus sesuai dengan versi kernel yang akan ada di sistem rakitan. Untuk header kernel, Anda juga dapat menentukan jalur ke repositori tarball atau git.

GCC COMPILER VERSIONS – pilih versi compiler yang akan digunakan untuk pembuatan
Aktifkan dukungan C++ – pilih untuk membangun dengan dukungan untuk pustaka C++ di sistem. Ini akan berguna bagi kita di masa depan.

Opsi gcc tambahan – Anda dapat mengatur opsi kompiler tambahan. Kami tidak membutuhkannya untuk saat ini.

Konfigurasi sistem memungkinkan Anda mengatur parameter masa depan dari sistem yang dibuat:

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Sebagian besar poinnya jelas dari judulnya. Mari kita perhatikan hal-hal berikut ini:
Jalur ke tabel pengguna - tabel dengan pengguna yang akan dibuat (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Contoh berkas. Pengguna pengguna akan dibuat dengan kata sandi admin, secara otomatis gid/uid, /bin/sh shell, pengguna grup default, root anggota grup, komentar Foo pengguna

[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt 
user -1 user -1 =admin /home/user /bin/sh root Foo user

Direktori overlay sistem file root - direktori yang dihamparkan di atas target-fs yang telah dirakit. Menambahkan file baru dan mengganti file yang sudah ada.

Skrip khusus untuk dijalankan sebelum membuat gambar sistem file - Skrip dieksekusi segera sebelum melipat sistem file menjadi gambar. Biarkan skripnya kosong untuk saat ini.

Mari kita pergi ke bagian Kernel

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Pengaturan kernel diatur di sini. Kernel itu sendiri dikonfigurasi melalui make linux-menuconfig.
Anda dapat mengatur versi kernel dengan berbagai cara: pilih dari yang ditawarkan, masukkan versi secara manual, tentukan repositori atau tarball yang sudah jadi.

Konfigurasi kernel — jalur ke konfigurasi kernel. Anda dapat memilih konfigurasi default untuk arsitektur yang dipilih atau defocnfig dari Linux. Sumber Linux berisi sekumpulan defconfigs untuk sistem target yang berbeda. Anda dapat menemukan yang Anda butuhkan dengan melihat langsung sumbernya disini. Misalnya, untuk papan hitam tulang beagle bisa pilih konfigurasi.

Bagian Paket target memungkinkan Anda memilih paket mana yang akan diinstal pada sistem yang sedang dibangun. Mari kita biarkan tidak berubah untuk saat ini. Kami akan menambahkan paket kami ke daftar ini nanti.
Gambar sistem file - daftar gambar sistem file yang akan dikumpulkan. Tambahkan gambar iso

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Bootloader - pemilihan bootloader untuk dikumpulkan. Ayo pilih isolinix

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Mengonfigurasi Systemd

Systemd menjadi salah satu pilar Linux, bersama dengan kernel dan glibc. Oleh karena itu, saya memindahkan pengaturannya ke item terpisah.

Dikonfigurasi melalui make menuconfig, lalu Paket target → Alat sistem → systemd. Di sini Anda dapat menentukan layanan systemd mana yang akan diinstal dan dimulai ketika sistem dimulai.

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Menyimpan konfigurasi sistem

Kami menyimpan konfigurasi ini melalui KConfig.

Kemudian simpan defconfig kami:

make savedefconfig

Konfigurasi Kernel Linux

Konfigurasi kernel Linux dipanggil dengan perintah berikut:

make linux-menuconfig

Mari tambahkan dukungan untuk kartu video Virtualbox

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Mari tambahkan dukungan integrasi Virtualbox Guest

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Simpan dan keluar. PENTING: konfigurasi akan disimpan di output/build/linux-$version/config, tetapi tidak di board/my_x86_board/linux.config

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Oleh karena itu, Anda perlu menyalin konfigurasi secara manual ke lokasi penyimpanan:

cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config

Setelah itu kami akan melakukan perakitan kembali seluruh sistem secara menyeluruh. buildroot tidak membangun kembali apa yang telah dibangun, Anda harus menentukan paket untuk membangun kembali secara manual. Agar tidak membuang waktu dan kegelisahan, lebih mudah untuk membangun kembali sistem kecil secara keseluruhan):

make clean;make

Setelah menyelesaikan build, luncurkan VirtualBox (diuji pada versi 5.2 dan 6.0) dengan mem-boot dari CD Parameter sistem:

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Berjalan dari iso rakitan:

Buildroot - bagian 1. Informasi umum, perakitan sistem minimal, konfigurasi melalui menu

Daftar bahan yang digunakan

  1. Panduan buildroot

Sumber: www.habr.com

Tambah komentar