Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Pengenalan

Dalam siri artikel ini, saya ingin melihat sistem binaan pengedaran buildroot dan berkongsi pengalaman saya dalam menyesuaikannya. Akan ada pengalaman praktikal dalam mencipta OS kecil dengan antara muka grafik dan fungsi minimum.

Pertama sekali, anda tidak seharusnya mengelirukan sistem binaan dan pengedaran. Buildroot boleh membina sistem daripada set pakej yang ditawarkan kepadanya. Buildroot dibina pada makefiles dan oleh itu mempunyai keupayaan penyesuaian yang besar. Gantikan pakej dengan versi lain, tambah pakej anda sendiri, tukar peraturan untuk membina pakej, sesuaikan sistem fail selepas memasang semua pakej? buildroot boleh melakukan semua ini.

Di Rusia, buildroot digunakan, tetapi pada pendapat saya terdapat sedikit maklumat bahasa Rusia untuk pemula.

Matlamat kerja adalah untuk memasang kit pengedaran dengan muat turun langsung, antara muka icewm dan penyemak imbas. Platform sasaran ialah kotak maya.

Mengapa membina pengedaran anda sendiri? Selalunya fungsi terhad diperlukan dengan sumber yang terhad. Lebih kerap dalam automasi anda perlu mencipta perisian tegar. Menyesuaikan pengedaran tujuan umum dengan membersihkan pakej yang tidak diperlukan dan mengubahnya menjadi perisian tegar adalah lebih intensif buruh daripada membina pengedaran baharu. Menggunakan Gentoo juga mempunyai hadnya.

Sistem Buildroot sangat berkuasa, tetapi ia tidak akan melakukan apa-apa untuk anda. Ia hanya boleh mendayakan dan mengautomasikan proses pemasangan.

Sistem binaan alternatif (yocto, sistem binaan terbuka dan lain-lain) tidak dipertimbangkan atau dibandingkan.

Di mana untuk mendapatkannya dan bagaimana untuk bermula

Laman web projek - buildroot.org. Di sini anda boleh memuat turun versi semasa dan membaca manual. Di sana anda boleh menghubungi komuniti, terdapat penjejak pepijat, senarai mel dan saluran irc.

Buildroot mengendalikan defconfig untuk papan sasaran binaan. Defconfig ialah fail konfigurasi yang menyimpan hanya pilihan yang tidak mempunyai nilai lalai. Dialah yang menentukan apa yang akan dikumpulkan dan bagaimana. Dalam kes ini, anda boleh mengkonfigurasi secara berasingan konfigurasi pemuat but busybox, linux-kernel, uglibc, u-boot dan barebox, tetapi kesemuanya akan diikat pada papan sasaran.
Selepas membongkar arkib atau pengklonan yang dimuat turun dari git, kami mendapat buildroot yang sedia untuk digunakan. Anda boleh membaca lebih lanjut mengenai struktur direktori dalam manual; Saya akan memberitahu anda tentang yang paling penting:

papan β€” direktori dengan fail khusus untuk setiap papan. Ini boleh menjadi skrip untuk membentuk imej sistem (iso, sdcart, cpio dan lain-lain), direktori tindanan, konfigurasi kernel, dll.
konfigurasi β€” defconfig sebenar papan. Defconfig ialah konfigurasi papan yang tidak lengkap. Ia hanya menyimpan parameter yang berbeza daripada tetapan lalai
dl β€” direktori dengan kod sumber/fail yang dimuat turun untuk pemasangan
output/sasaran β€” sistem fail yang dipasang bagi OS yang terhasil. Selepas itu, imej dicipta daripadanya untuk dimuat turun/pemasangan
output/hos - hos utiliti untuk pemasangan
keluaran/bina - pakej yang dipasang

Perhimpunan dikonfigurasikan melalui KConfig. Sistem yang sama digunakan untuk membina kernel Linux. Senarai arahan yang paling biasa digunakan (laksanakan dalam direktori buildroot):

  • buat menuconfig - panggil konfigurasi binaan. Anda juga boleh menggunakan antara muka grafik (buat nconfig, buat xconfig, buat gconfig)
  • buat linux-menuconfig - panggil konfigurasi kernel.
  • bersihkan - bersihkan hasil binaan (semuanya disimpan dalam output)
  • membuat - membina sistem. Ini tidak memasang semula proses yang telah dipasang.
  • buat defconfig_name - tukar konfigurasi kepada defconfig tertentu
  • buat list-defconfigs - tunjukkan senarai defconfigs
  • buat sumber - hanya muat turun fail pemasangan, tanpa membina.
  • buat bantuan - senaraikan arahan yang mungkin

Nota penting dan petua berguna

Buildroot tidak membina semula pakej yang telah dibina! Oleh itu, situasi mungkin timbul di mana pemasangan semula yang lengkap diperlukan.

Anda boleh membina semula pakej berasingan dengan arahan buat packagename-rebuild. Sebagai contoh, anda boleh membina semula kernel Linux:

make linux-rebuild

Buildroot menyimpan keadaan mana-mana pakej dengan mencipta fail .stamp dalam direktori output/build/$packagename:

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Oleh itu, anda boleh membina semula root-fs dan imej tanpa membina semula pakej:

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

Pembolehubah Berguna

buildroot mempunyai satu set pembolehubah untuk konfigurasi mudah

  • $TOPDIR - direktori buildroot
  • $BASEDIR - direktori OUTPUT
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR β€” hos fs, fs pementasan, direktori binaan fs sasaran.
  • $BUILD_DIR - direktori dengan pakej yang dibongkar dan dibina

Visualisasi

buildroot mempunyai ciri visualisasi. Anda boleh membina rajah kebergantungan, graf masa binaan dan graf saiz pakej dalam sistem akhir. Hasilnya adalah dalam bentuk fail pdf (anda boleh memilih daripada svn,png) dalam direktori output/graf.

Contoh arahan visualisasi:

  • make graph-depends membina pokok pergantungan
  • make <pkg>-graph-depends bina pokok pergantungan untuk pakej tertentu
  • BR2_GRAPH_OUT=png make graph-build masa bina plot dengan output PNG
  • make graph-size plot saiz paket

Skrip yang berguna

Terdapat subdirektori dalam direktori buildroot utils dengan skrip yang berguna. Sebagai contoh, terdapat skrip yang menyemak ketepatan perihalan pakej. Ini mungkin berguna apabila menambah pakej anda sendiri (saya akan lakukan ini kemudian). Fail utils/readme.txt mengandungi penerangan skrip ini.

Mari bina agihan saham

Adalah penting untuk diingat bahawa semua operasi dijalankan bagi pihak pengguna biasa, bukan root.
Semua arahan dilaksanakan dalam buildroot. Pakej buildroot sudah termasuk satu set konfigurasi untuk banyak papan biasa dan virtualisasi.

Mari lihat senarai konfigurasi:

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Tukar kepada konfigurasi qemu_x86_64_defconfig

make qemu_x86_64_defconfig

Dan kita mulakan perhimpunan

make

Binaan selesai dengan jayanya, lihat hasilnya:

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Buildroot telah menyusun imej yang boleh anda jalankan dalam Qemu dan mengesahkan bahawa ia berfungsi.

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

Hasilnya ialah sistem yang berjalan dalam qemu:

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Mencipta konfigurasi papan anda sendiri

Menambah Fail Papan

Mari lihat senarai konfigurasi:

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Dalam senarai kita lihat pc_x86_64_efi_defconfig. Kami akan membuat papan kami sendiri dengan menyalinnya daripada konfigurasi:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Mari segera buat direktori papan untuk menyimpan skrip, rootfs-overlay kami dan fail lain yang diperlukan:

mkdir board/my_x86_board

Beralih kepada defconfig ini:

make my_x86_board_defconfig

Oleh itu, kini konfigurasi binaan (disimpan dalam .config dalam akar direktori buildroot) sepadan dengan mesin sasaran but legacy(bios) x86-64.

Mari salin konfigurasi linux-kernel (berguna kemudian):

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

Menetapkan parameter binaan melalui KConfig

Mari mulakan persediaan:

make menuconfig 

Tetingkap KConfig akan dibuka. Ia adalah mungkin untuk mengkonfigurasi dengan antara muka grafik (buat nconfig, buat xconfig, buat gconfig):

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Kami memasuki bahagian pertama Pilihan Sasaran. Di sini anda boleh memilih seni bina sasaran yang mana binaan akan dijalankan.

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Pilihan binaan - terdapat pelbagai tetapan binaan di sini. Anda boleh menentukan direktori dengan kod sumber, bilangan benang binaan, cermin untuk memuat turun kod sumber dan tetapan lain. Mari biarkan tetapan pada lalai.

Rantaian alat - alat binaan itu sendiri dikonfigurasikan di sini. Baca lebih lanjut tentang dia.

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Jenis rantai alat – jenis rantai alat yang digunakan. Ini boleh menjadi rantai alat yang dibina ke dalam buildroot atau yang luaran (anda boleh menentukan direktori dengan yang telah dibina atau url untuk memuat turun). Terdapat pilihan tambahan untuk seni bina yang berbeza. Sebagai contoh, untuk lengan anda hanya boleh memilih versi Linaro rantai alat luaran.

Pustaka C – pemilihan perpustakaan C. Operasi keseluruhan sistem bergantung pada ini. Biasanya, glibc digunakan, yang menyokong semua fungsi yang mungkin. Tetapi ia mungkin terlalu besar untuk sistem terbenam, jadi uglibc atau musl sering dipilih. Kami akan memilih glibc (ini akan diperlukan kemudian untuk menggunakan systemd).

Siri Pengepala Kernel dan Pengepala Kernel Tersuai - mesti sepadan dengan versi kernel yang akan berada dalam sistem yang dipasang. Untuk pengepala kernel, anda juga boleh menentukan laluan ke repositori tarball atau git.

GCC COMPILER VERSIONS – pilih versi compiler yang akan digunakan untuk membina
Dayakan sokongan C++ – pilih untuk membina dengan sokongan untuk perpustakaan C++ dalam sistem. Ini akan berguna kepada kita pada masa hadapan.

Pilihan gcc tambahan – anda boleh menetapkan pilihan pengkompil tambahan. Kami tidak memerlukannya buat masa ini.

Konfigurasi sistem membolehkan anda menetapkan parameter masa depan sistem yang dibuat:

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Kebanyakan mata jelas daripada tajuk. Mari kita perhatikan perkara berikut:
Laluan ke jadual pengguna - jadual dengan pengguna yang akan dibuat (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Contoh fail. Pengguna pengguna akan dibuat dengan pentadbir kata laluan, secara automatik gid/uid, shell /bin/sh, pengguna kumpulan lalai, akar ahli kumpulan, ulasan 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

Direktori tindanan sistem fail akar - direktori bertindih di atas sasaran-fs yang dipasang. Menambah fail baharu dan menggantikan fail sedia ada.

Skrip tersuai untuk dijalankan sebelum mencipta imej sistem fail - Skrip dilaksanakan serta-merta sebelum melipat sistem fail menjadi imej. Biarkan skrip kosong buat masa ini.

Mari pergi ke bahagian Kernel

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Tetapan kernel ditetapkan di sini. Kernel itu sendiri dikonfigurasikan melalui make linux-menuconfig.
Anda boleh menetapkan versi kernel dengan cara yang berbeza: pilih daripada yang ditawarkan, masukkan versi secara manual, tentukan repositori atau tarball siap sedia.

Konfigurasi kernel β€” laluan ke konfigurasi kernel. Anda boleh memilih konfigurasi lalai untuk seni bina yang dipilih atau defocnfig daripada Linux. Sumber Linux mengandungi satu set defconfig untuk sistem sasaran yang berbeza. Anda boleh mencari yang anda perlukan dengan melihat terus sumber di sini. Sebagai contoh, untuk papan hitam tulang beagle anda boleh pilih konfigurasi.

Bahagian Pakej sasaran membolehkan anda memilih pakej yang akan dipasang pada sistem yang sedang dibina. Biarkan ia tidak berubah buat masa ini. Kami akan menambah pakej kami ke senarai ini kemudian.
Imej sistem fail - senarai imej sistem fail yang akan dikumpul. Tambah imej iso

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Pemuat but - pemilihan pemuat but untuk dikumpulkan. Jom pilih isolinix

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Mengkonfigurasi Systemd

Systemd menjadi salah satu tonggak Linux, bersama dengan kernel dan glibc. Oleh itu, saya mengalihkan tetapannya ke item yang berasingan.

Dikonfigurasikan melalui make menuconfig, kemudian Sasaran pakej β†’ Alat sistem β†’ systemd. Di sini anda boleh menentukan perkhidmatan systemd yang akan dipasang dan dimulakan apabila sistem bermula.

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Menyimpan konfigurasi sistem

Kami menyimpan konfigurasi ini melalui KConfig.

Kemudian simpan defconfig kami:

make savedefconfig

Konfigurasi Kernel Linux

Konfigurasi kernel Linux digunakan dengan arahan berikut:

make linux-menuconfig

Mari tambah sokongan untuk kad video Virtualbox

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Mari tambah sokongan penyepaduan Virtualbox Guest

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

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

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Oleh itu, anda perlu menyalin konfigurasi secara manual ke lokasi storan:

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

Selepas itu kami akan melakukan pemasangan semula lengkap keseluruhan sistem. buildroot tidak membina semula apa yang telah dibina, anda mesti menentukan secara manual pakej untuk membina semula. Untuk tidak membuang masa dan saraf, lebih mudah untuk membina semula sistem kecil sepenuhnya):

make clean;make

Setelah selesai membina, lancarkan VirtualBox (diuji pada versi 5.2 dan 6.0) but daripada CD. Parameter sistem:

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Pelancaran dari iso yang dipasang:

Buildroot - bahagian 1. Maklumat am, memasang sistem minimum, konfigurasi melalui menu

Senarai bahan yang digunakan

  1. Manual Buildroot

Sumber: www.habr.com

Tambah komen