Buildroot - Bagian 1. Informasi umum, membangun sistem minimal, pengaturan melalui menu

Pendahuluan


Dalam seri artikel ini saya ingin mempertimbangkan sistem distribusi buildroot dan berbagi pengalaman menyesuaikannya. Ini akan menjadi pengalaman praktis dalam menciptakan OS kecil dengan antarmuka grafis dan fungsionalitas minimal.


Pertama-tama, Anda tidak perlu bingung dengan sistem build dan distribusinya. Buildroot dapat membangun sistem dari sekumpulan paket yang ditawarkan. Buildroot dibangun di atas makefile dan karenanya memiliki kemampuan penyesuaian yang luar biasa. Ganti paket dengan versi lain, tambahkan paket Anda, ubah aturan untuk membuat 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 membangun kit distribusi dengan live-download, antarmuka icewm dan browser. Platform target adalah virtualbox.


Mengapa membangun distribusi Anda? Seringkali Anda memerlukan fungsionalitas terbatas dengan sumber daya terbatas. Lebih sering dalam otomatisasi Anda perlu membuat firmware. Mengadaptasi distribusi untuk keperluan umum, membersihkan paket tambahan dan mengubahnya menjadi firmware lebih memakan waktu daripada membangun distrib baru. Menggunakan Gentoo juga memiliki keterbatasan.


Sistem Buildroot sangat kuat, tetapi tidak akan melakukan apa pun untuk Anda. Itu hanya bisa memberi peluang dan mengotomatiskan proses perakitan.


Sistem build alternatif (yocto, open build system, dll.) Tidak dipertimbangkan atau dibandingkan.


Di mana untuk mendapatkan dan bagaimana memulai


Situs proyek adalah buildroot.org . Di sini Anda dapat mengunduh versi saat ini dan membaca manual. Anda juga dapat menghubungi komunitas di sana, ada pelacak bug, daftar surat, dan saluran irc.


Buildroot beroperasi dengan defconfig untuk papan target perakitan. Defconfig adalah file konfigurasi yang hanya menyimpan opsi yang tidak memiliki nilai default. Dialah yang menentukan apa dan bagaimana akan dikumpulkan. Dalam hal ini, Anda dapat mengkonfigurasi secara terpisah busybox konfigurasi, linux-kernel, uClibc, bootloaders u-boot dan barebox, tetapi semuanya akan diikat ke papan target.
Setelah membongkar arsip yang diunduh atau kloning dari git, kami menyiapkan buildroot untuk bekerja. Detail tentang struktur direktori dapat ditemukan di manual, saya akan berbicara tentang yang paling penting:


board - direktori dengan file khusus untuk setiap board. Ini bisa berupa skrip untuk membentuk gambar sistem (iso, sdcart, cpio, dll.), Direktori overlay, konfigurasi kernel, dll.
configs - sebenarnya defconfig board. Defconfig adalah konfigurasi papan yang tidak lengkap. Hanya parameter selain pengaturan default yang disimpan di dalamnya.
dl - direktori dengan kode sumber yang diunduh / file untuk perakitan
output / target - sistem file rakitan OS yang dihasilkan. Selanjutnya, gambar untuk mengunduh / menginstal dibuat darinya.
output / host - utilitas host untuk membangun
paket yang dikompilasi output / build


Konfigurasi build dilakukan melalui KConfig. Sistem yang sama digunakan untuk membangun kernel linux. Daftar perintah yang paling sering digunakan (jalankan di direktori buildroot):


  • make menuconfig - panggil konfigurasi build. Anda juga dapat menggunakan antarmuka grafis (make nconfig, make xconfig, make gconfig)
  • make linux-menuconfig - panggil konfigurasi kernel.
  • membuat hasil perakitan bersih - bersih (semua yang disimpan dalam output)
  • membuat - membangun sistem. Itu tidak membangun kembali proses yang sudah dikumpulkan
  • make defconfig_name - alihkan konfigurasi ke defconfig tertentu
  • make list-defconfigs - tampilkan daftar defconfig
  • make source - hanya unduh file instalasi, tanpa perakitan.
  • buatlah bantuan - buat daftar perintah yang mungkin

Catatan dan tips penting


Buildroot tidak membangun kembali paket yang sudah dikemas! Oleh karena itu, sebuah situasi dapat muncul ketika diperlukan reassembly lengkap.


Anda dapat membangun kembali satu paket dengan perintah make packagename-rebuild. Sebagai contoh, Anda dapat membangun kembali kernel linux:


make linux-rebuild 

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



Oleh karena itu, Anda dapat membangun kembali root-fs dan gambar 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 yang Berguna


Buildroot memiliki serangkaian variabel untuk konfigurasi yang mudah


  • $ TOPDIR - direktori root dari buildroot
  • Direktori $ BASEDIR - OUTPUT
  • $ HOST_DIR, $ STAGING_DIR, $ TARGET_DIR - direktori assembly host fs, pementasan fs, target fs.
  • $ BUILD_DIR - direktori dengan paket yang belum dibuka dan dirakit

Visualisasi


Buildroot memiliki kemampuan untuk memvisualisasikan. Anda dapat membangun diagram dependensi, timeline build, grafik ukuran paket dalam sistem akhir. Hasilnya dalam bentuk file pdf (Anda dapat memilih dari svn, png) di direktori output / grafik.


Contoh perintah visualisasi:


  • make graph-depends membangun pohon ketergantungan
  • make <pkg>-graph-depends build membangun pohon dependensi paket
  • BR2_GRAPH_OUT=png make graph-build waktu perakitan dengan output dalam PNG
  • make graph-size paket plot make graph-size

Skrip yang bermanfaat


Direktori buildroot memiliki subdirektori utils dengan skrip yang bermanfaat. Misalnya, ada skrip yang memverifikasi deskripsi paket yang benar. Ini bisa bermanfaat saat menambahkan paket saya (saya akan melakukannya nanti). File utils / readme.txt berisi deskripsi skrip-skrip ini.


Mari kita membangun distribusi stok


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


Kami melihat daftar konfigurasi:



Beralih ke konfigurasi qemu_x86_64_defconfig


 make qemu_x86_64_defconfig 

Dan kami memulai perakitan


 make 

Perakitan selesai dengan sukses, kami melihat hasilnya:



Buildroot telah mengompilasi gambar yang dapat Anda jalankan di Qemu dan memastikannya 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:



Membuat konfigurasi papan khusus


Menambahkan File Papan


Kami melihat daftar konfigurasi:



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


 cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig 

Segera buat direktori board untuk menyimpan skrip, overlay rootfs, dan file lain yang diperlukan:


 mkdir board/my_x86_board 

Beralih ke defconfig ini:


 make my_x86_board_defconfig 

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


Salin konfigurasi linux-kernel (berguna di masa depan):


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

Konfigurasikan opsi bangun melalui KConfig


Jalankan pengaturan:


 make menuconfig 

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



Kami memasuki bagian pertama dari Opsi Target. Di sini Anda dapat memilih arsitektur target untuk perakitan yang akan dilakukan.



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


Toolchain - di sini alat bantu dikonfigurasikan. Lebih banyak tentang dia.



Jenis Toolchain - jenis toolchain yang digunakan. Itu bisa bawaan untuk buildroot atau toolchain eksternal (Anda bisa menentukan direktori dengan yang sudah dibangun sebelumnya atau url untuk mengunduh). Untuk arsitektur yang berbeda ada opsi tambahan. Misalnya, untuk arm, Anda cukup memilih versi toolchain eksternal Linaro.


Perpustakaan C - pilihan perpustakaan C. Operasi seluruh sistem tergantung pada ini. Glibc biasanya digunakan, mendukung semua fungsionalitas yang mungkin. Tetapi mungkin terlalu besar untuk sistem embedded, jadi uClibc atau musl sering dipilih. Kami akan memilih glibc (di masa depan akan diperlukan untuk menggunakan systemd).


Kernel Headers dan Custom Kernel Headers series - harus cocok dengan versi kernel yang akan ada di sistem build. Untuk header kernel, Anda juga bisa menentukan path ke repositori tarball atau git.


GCC COMPILER VERSIONS - pilih versi kompiler yang akan digunakan untuk perakitan
Aktifkan dukungan C ++ - pilih untuk perakitan dengan dukungan untuk perpustakaan c ++ dalam sistem. Di masa depan, ini akan berguna.


Opsi gcc tambahan - Anda dapat mengatur opsi kompiler tambahan. Kami tidak perlu sejauh ini.


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



Sebagian besar poin jelas dari namanya. Perhatikan poin-poin berikut:
Path ke tabel pengguna - tabel dengan pengguna yang dibuat ( https://buildroot.org/downloads/manual/manual.html#makeuser-syntax ).


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


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

Root direktori overlay filesystem - direktori yang ditumpangkan di atas target-fs yang dirakit. Menambahkan file baru dan menggantikan yang sudah ada.


Skrip khusus untuk dijalankan sebelum membuat gambar sistem file - Skrip yang dieksekusi segera sebelum sistem file diciutkan menjadi gambar. Script itu sendiri akan dibiarkan kosong untuk saat ini.


Mari kita pindah ke bagian Kernel



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


Konfigurasi kernel - jalur ke konfigurasi kernel. Anda dapat memilih konfigurasi default untuk arsitektur yang dipilih atau defocnfig dari Linux. Sumber Linux memiliki set defconfig untuk sistem target yang berbeda. Anda dapat menemukan yang tepat dengan melihat langsung sumbernya di sini . Misalnya, untuk papan hitam tulang beagle, Anda dapat memilih konfigurasi .


Bagian Paket target memungkinkan Anda memilih paket mana yang akan diinstal pada sistem build. Biarkan tidak berubah untuk saat ini. Nanti kami akan menambahkan paket kami ke daftar ini.
Gambar sistem file - daftar gambar sistem file yang akan dikompilasi. Tambahkan gambar iso



Bootloaders - pilihan bootloader untuk dibangun Pilih isolinix



Konfigurasi Systemd


Systemd menjadi salah satu pilar linux, bersama dengan kernel dan glibc. Karena itu, saya membuat konfigurasinya dalam paragraf terpisah.


Ini dikonfigurasikan melalui make menuconfig, lalu paket Target → System tools → systemd. Di sini Anda dapat menentukan layanan systemd mana yang akan diinstal dan dimulai pada startup sistem.



Menyimpan konfigurasi sistem


Simpan konfigurasi ini melalui KConfig.


Kemudian simpan defconfig kami:


 make savedefconfig 

Konfigurasi kernel Linux


Konfigurasi kernel linux dipanggil dengan perintah berikut:


 make linux-menuconfig 

Tambahkan dukungan untuk kartu grafis Virtualbox



Tambahkan dukungan integrasi Virtualbox Guest



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



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 

Dengan perintah ini saya menyalin konfigurasi kernel FULL, yang tidak selalu diperlukan. Cara yang lebih benar adalah menjaga defconfig kernel:


 make linux-update-defconfig 

Setelah itu, kami melakukan reassembly lengkap dari seluruh sistem. Karena buildroot tidak memasang kembali yang sudah dirakit, Anda harus secara manual menentukan paket untuk pemasangan kembali. Agar tidak kehilangan waktu dan saraf, lebih mudah untuk membangun kembali seluruh sistem kecil):


 make clean;make 

Setelah selesai membangun, jalankan VirtualBox (diuji pada versi 5.2 dan 6.0) dengan mem-boot dari drive-cd. Parameter sistem:



Mulai dari iso yang dirakit:



Daftar bahan yang digunakan


  1. Manual buildroot

Source: https://habr.com/ru/post/id448638/


All Articles