Pambuka
Ing seri artikel iki, aku pengin ndeleng sistem mbangun distribusi buildroot lan nuduhake pengalaman babagan ngatur. Bakal ana pengalaman praktis kanggo nggawe OS cilik kanthi antarmuka grafis lan fungsionalitas minimal.
Kaping pisanan, sampeyan ora kudu bingung sistem mbangun lan distribusi. Buildroot bisa mbangun sistem saka sakumpulan paket sing ditawakake. Buildroot dibangun ing makefiles lan mulane nduweni kemampuan kustomisasi sing gedhe banget. Ngganti paket karo versi liyane, nambah paket dhewe, ngganti aturan kanggo mbangun paket, ngatur sistem file sawise nginstal kabeh paket? buildroot bisa nindakake kabeh iki.
Ing Rusia, buildroot digunakake, nanging mratelakake panemume, ora ana informasi basa Rusia kanggo pamula.
Sasaran saka karya punika ngumpul kit distribusi karo download urip, icewm antarmuka lan browser. Platform target yaiku virtualbox.
Apa mbangun distribusi dhewe? Asring fungsi winates dibutuhake kanthi sumber daya sing winates. Malah luwih kerep ing otomatisasi sampeyan kudu nggawe perangkat kukuh. Ngadaptasi distribusi tujuan umum kanthi ngresiki paket sing ora perlu lan ngowahi dadi perangkat kukuh luwih akeh tenaga kerja tinimbang mbangun distribusi anyar. Nggunakake Gentoo uga duwe watesan.
Sistem Buildroot banget kuat, nanging ora bakal nindakake apa-apa kanggo sampeyan. Mung bisa ngaktifake lan ngotomatisasi proses perakitan.
Sistem mbangun alternatif (yocto, sistem mbangun mbukak lan liya-liyane) ora dianggep utawa dibandhingake.
Where kanggo njaluk lan carane miwiti
Situs web proyek -
Buildroot ngoperasikake defconfig kanggo papan target bangunan kasebut. Defconfig minangka file konfigurasi sing mung nyimpen opsi sing ora duwe nilai standar. Dheweke sing nemtokake apa sing bakal diklumpukake lan kepiye carane. Ing kasus iki, sampeyan bisa ngatur konfigurasi saka busybox, linux-kernel, uglibc, u-boot lan barebox bootloader, nanging kabeh mau bakal disambungake menyang papan target.
Sawise mbongkar arsip sing diundhuh utawa kloning saka git, kita entuk buildroot sing siap digunakake. Sampeyan bisa maca liyane babagan struktur direktori ing manual; Aku bakal pitutur marang kowe bab sing paling penting:
Papan - direktori karo file tartamtu kanggo saben Papan. Iki bisa dadi skrip kanggo mbentuk gambar sistem (iso, sdcart, cpio lan liya-liyane), direktori overlay, konfigurasi kernel, lsp.
configs - defconfig nyata saka Papan. Defconfig minangka konfigurasi papan sing ora lengkap. Iku mung nyimpen paramèter sing beda-beda saka setelan gawan
dl — direktori karo kode sumber diundhuh / file kanggo perakitan
output / target - sistem file sing dirakit saka OS sing diasilake. Sabanjure, gambar digawe saka iku kanggo ngundhuh / instalasi
output / inang - utilitas inang kanggo perakitan
output / mbangun - paket dirakit
Déwan dikonfigurasi liwat KConfig. Sistem sing padha digunakake kanggo mbangun kernel Linux. Dhaptar perintah sing paling umum digunakake (eksekusi ing direktori buildroot):
- nggawe menuconfig - nelpon konfigurasi mbangun. Sampeyan uga bisa nggunakake antarmuka grafis (gawe nconfig, nggawe xconfig, nggawe gconfig)
- nggawe linux-menuconfig - nelpon konfigurasi kernel.
- nggawe resik - ngresiki asil mbangun (kabeh disimpen ing output)
- nggawe - mbangun sistem. Iki ora reassemble proses wis nglumpuk.
- nggawe defconfig_name - ngalih konfigurasi menyang defconfig tartamtu
- nggawe dhaptar-defconfigs - nuduhake dhaptar defconfigs
- nggawe sumber - mung ngundhuh file instalasi, tanpa mbangun.
- nggawe bantuan - dhaptar printah bisa
Cathetan penting lan tips sing migunani
Buildroot ora mbangun maneh paket sing wis dibangun! Mulane, bisa uga ana kahanan sing mbutuhake reassembly lengkap.
Sampeyan bisa mbangun maneh paket kapisah karo printah nggawe packagename-rebuild. Contone, sampeyan bisa mbangun maneh kernel Linux:
make linux-rebuild
Buildroot nyimpen status paket apa wae kanthi nggawe file .stamp ing direktori output/build/$packagename:
Mulane, sampeyan bisa mbangun maneh root-fs lan gambar tanpa mbangun maneh 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 migunani
buildroot duwe set variabel kanggo konfigurasi gampang
- $TOPDIR - direktori buildroot
- $BASEDIR - direktori OUTPUT
- $HOST_DIR, $STAGING_DIR, $TARGET_DIR - host fs, staging fs, target fs mbangun direktori.
- $BUILD_DIR - direktori karo paket unpacked lan dibangun
Visualisasi
buildroot nduweni fitur visualisasi. Sampeyan bisa nggawe diagram dependensi, grafik wektu mbangun, lan grafik ukuran paket ing sistem pungkasan. Asil ana ing wangun file pdf (sampeyan bisa milih saka svn, png) ing output / direktori grafik.
Conto perintah visualisasi:
make graph-depends
mbangun wit dependensimake <pkg>-graph-depends
mbangun wit dependensi kanggo paket tartamtuBR2_GRAPH_OUT=png make graph-build
wektu mbangun plot karo output PNGmake graph-size
ukuran paket plot
Tulisan sing migunani
Ana subdirektori ing direktori buildroot migunani karo script migunani. Contone, ana skrip sing mriksa kabeneran deskripsi paket. Iki bisa uga migunani nalika nambah paket sampeyan dhewe (aku bakal nindakake iki mengko). File utils/readme.txt ngemot katrangan babagan skrip kasebut.
Ayo mbangun distribusi saham
Penting kanggo elinga yen kabeh operasi ditindakake atas jenenge pangguna biasa, dudu root.
Kabeh printah dieksekusi ing buildroot. Paket buildroot wis kalebu set konfigurasi kanggo akeh papan umum lan virtualisasi.
Ayo ndeleng dhaptar konfigurasi:
Ngalih menyang qemu_x86_64_defconfig config
make qemu_x86_64_defconfig
Lan kita miwiti perakitan
make
Bangunan rampung kanthi sukses, deleng asil:
Buildroot wis nyusun gambar sing bisa digunakake ing Qemu lan verifikasi manawa bisa digunakake.
qemu-system-x86_64 -kernel output/images/bzImage -hda output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S
Asilé yaiku sistem sing mlaku ing qemu:
Nggawe konfigurasi Papan dhewe
Nambahake File Papan
Ayo ndeleng dhaptar konfigurasi:
Ing dhaptar kita ndeleng pc_x86_64_efi_defconfig. Kita bakal nggawe papan dhewe kanthi nyalin saka konfigurasi:
cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig
Ayo langsung nggawe direktori papan kanggo nyimpen skrip, rootfs-overlay lan file liyane sing dibutuhake:
mkdir board/my_x86_board
Ngalih menyang defconfig iki:
make my_x86_board_defconfig
Mangkono, saiki config mbangun (disimpen ing .config ing ROOT direktori buildroot) cocog karo mesin target boot x86-64 warisan(bios).
Ayo nyalin konfigurasi linux-kernel (migunani mengko):
cp board/pc/linux.config board/my_x86_board/
Setelan paramèter mbangun liwat KConfig
Ayo miwiti persiyapan:
make menuconfig
Jendhela KConfig bakal mbukak. Sampeyan bisa ngatur kanthi antarmuka grafis (nggawe nconfig, nggawe xconfig, nggawe gconfig):
Kita mlebu ing bagean pisanan Pilihan Target. Ing kene sampeyan bisa milih arsitektur target sing bakal ditindakake.
Opsi mbangun - ana macem-macem setelan mbangun ing kene. Sampeyan bisa nemtokake direktori kanthi kode sumber, jumlah benang mbangun, pangilon kanggo ndownload kode sumber lan setelan liyane. Ayo dadi ninggalake setelan ing gawan.
Toolchain - alat mbangun dhewe dikonfigurasi ing kene. Waca liyane babagan dheweke.
Jinis toolchain - jinis toolchain sing digunakake. Iki bisa dadi toolchain sing dibangun ing buildroot utawa eksternal (sampeyan bisa nemtokake direktori karo sing wis dibangun utawa url kanggo diundhuh). Ana opsi tambahan kanggo arsitektur beda. Contone, kanggo lengen sampeyan mung bisa milih versi Linaro saka toolchain external.
perpustakaan C - pilihan saka perpustakaan C. Operasi saka kabeh sistem gumantung iki. Biasane, glibc digunakake, sing ndhukung kabeh fungsi sing bisa ditindakake. Nanging bisa uga gedhe banget kanggo sistem sing dipasang, mula uglibc utawa musl asring dipilih. Kita bakal milih glibc (iki bakal dibutuhake mengko kanggo nggunakake systemd).
Kernel Headers lan Custom Kernel Headers seri - kudu cocog karo versi kernel sing bakal ana ing sistem sing dirakit. Kanggo header kernel, sampeyan uga bisa nemtokake dalan menyang gudang tarball utawa git.
GCC COMPILER VERSIONS - pilih versi compiler sing bakal digunakake kanggo mbangun
Aktifake dhukungan C ++ - pilih mbangun kanthi dhukungan kanggo perpustakaan C ++ ing sistem. Iki bakal migunani kanggo kita ing mangsa ngarep.
Opsi gcc tambahan - sampeyan bisa nyetel opsi kompiler tambahan. Saiki kita ora butuh.
Konfigurasi sistem ngidini sampeyan nyetel paramèter ing mangsa ngarep saka sistem sing digawe:
Sebagéan gedhé poin sing jelas saka judhul. Ayo menehi perhatian marang titik-titik ing ngisor iki:
Path menyang tabel pangguna - tabel karo pangguna sing bakal digawe (
Tuladha file. Pangguna pangguna bakal digawe nganggo admin sandi, gid / uid kanthi otomatis, / bin / sh cangkang, pangguna grup standar, root anggota grup, pangguna komentar 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 overlay sistem file root - direktori dilapisi ing ndhuwur target-fs sing dirakit. Nambah file anyar lan ngganti sing wis ana.
Skrip khusus kanggo mbukak sadurunge nggawe gambar sistem file - Skrip dieksekusi langsung sadurunge lempitan sistem file dadi gambar. Ayo ninggalake script kosong kanggo saiki.
Ayo menyang bagean Kernel
Setelan kernel disetel ing kene. Kernel dhewe dikonfigurasi liwat make linux-menuconfig.
Sampeyan bisa nyetel versi kernel kanthi macem-macem cara: pilih saka sing ditawakake, ketik versi kanthi manual, nemtokake repositori utawa tarball sing wis siap.
Konfigurasi kernel - path menyang konfigurasi kernel. Sampeyan bisa milih konfigurasi standar kanggo arsitektur sing dipilih utawa defocnfig saka Linux. Sumber Linux ngemot set defconfig kanggo sistem target sing beda. Sampeyan bisa nemokake sing sampeyan butuhake
Bagean paket Target ngidini sampeyan milih paket sing bakal diinstal ing sistem sing dibangun. Ayo saiki ora owah. Kita bakal nambah paket kita menyang dhaptar iki mengko.
Gambar sistem file - dhaptar gambar sistem file sing bakal diklumpukake. Tambah gambar iso
Bootloaders - pilihan saka bootloaders kanggo ngumpulake. Ayo milih isolinix
Konfigurasi Systemd
Systemd dadi salah sawijining pilar Linux, bebarengan karo kernel lan glibc. Mulane, aku dipindhah setelan kanggo item kapisah.
Dikonfigurasi liwat make menuconfig, banjur Target paket → Alat sistem → systemd. Ing kene sampeyan bisa nemtokake layanan systemd sing bakal diinstal lan diwiwiti nalika sistem diwiwiti.
Nyimpen konfigurasi sistem
Kita nyimpen konfigurasi iki liwat KConfig.
Banjur simpen defconfig kita:
make savedefconfig
Konfigurasi Kernel Linux
Konfigurasi kernel Linux dijaluk nganggo printah ing ngisor iki:
make linux-menuconfig
Ayo nambah dhukungan kanggo kertu video Virtualbox
Ayo ditambahake dhukungan integrasi Tamu Virtualbox
Simpen lan metu. PENTING: konfigurasi bakal disimpen ing output/build/linux-$version/config, nanging ora ing board/my_x86_board/linux.config
Mulane, sampeyan kudu nyalin konfigurasi kanthi manual menyang lokasi panyimpenan:
cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config
Sawise kita bakal nindakake reassembly lengkap kabeh sistem. buildroot ora mbangun maneh sing wis dibangun, sampeyan kudu nemtokake paket kanthi manual kanggo mbangun maneh. Supaya ora mbuwang wektu lan saraf, luwih gampang kanggo mbangun maneh sistem cilik kabeh):
make clean;make
Sawise rampung mbangun, bukak VirtualBox (dites ing versi 5.2 lan 6.0) boot saka CD. Parameter sistem:
Mlaku saka iso dirakit:
Dhaptar bahan sing digunakake
- Buildroot manual
Source: www.habr.com