Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

Giriş

Bu məqalələr silsiləsində mən buildroot paylanmasının qurma sistemini nəzərdən keçirmək və onun fərdiləşdirilməsi üzrə təcrübəmi bölüşmək istəyirəm. Qrafik interfeysə və minimal funksionallığa malik kiçik ƏS-nin yaradılmasında praktiki təcrübə olacaq.

Əvvəla, quraşdırma sistemini paylama ilə qarışdırmayın. Buildroot ona təklif olunan paketlər dəstindən sistem qura bilər. Buildroot makefiles üzərində qurulub və buna görə də bir çox fərdiləşdirmə seçimlərinə malikdir. Paketi başqa versiya ilə əvəz edin, öz paketinizi əlavə edin, paketin qurulması qaydalarını dəyişdirin, bütün paketləri quraşdırdıqdan sonra fayl sistemini fərdiləşdirin? Bütün bunlar kök yarada bilər.

Rusiyada buildroot istifadə olunur, amma mənim fikrimcə yeni başlayanlar üçün rus dilində məlumat azdır.

İşin məqsədi canlı yükləmə, icewm interfeysi və brauzer ilə paylama dəsti qurmaqdır. Hədəf platforma virtual qutudur.

Niyə öz paylamanızı qurun? Çox vaxt məhdud resurslarla məhdud funksionallıq lazımdır. Daha tez-tez avtomatlaşdırmada proqram təminatı yaratmalısınız. Ehtiyatsız paketləri təmizləmək və onu proqram təminatına çevirməklə ümumi təyinatlı paylamanın uyğunlaşdırılması yeni paylamanı bir araya gətirməkdən daha çox vaxt aparan yoldur. Gentoo istifadəsinin də məhdudiyyətləri var.

Buildroot sistemi çox güclüdür, lakin sizin üçün heç nə etməyəcək. O, yalnız montaj prosesini aktivləşdirə və avtomatlaşdıra bilər.

Alternativ qurma sistemləri (yocto, open build system və s.) nəzərə alınmır və müqayisə edilmir.

Haradan almaq və necə başlamaq lazımdır

Layihə veb-saytı - buildroot.org. Burada ən son versiyanı yükləyə və təlimatı oxuya bilərsiniz. Orada icma ilə də əlaqə saxlaya bilərsiniz, səhv izləyicisi, poçt siyahıları və irc kanalı var.

Buildroot, hədəf qurma lövhəsi üçün defconfigs ilə işləyir. Defconfig yalnız standart dəyəri olmayan seçimləri ehtiva edən konfiqurasiya faylıdır. Nəyi və necə toplanacağını o müəyyən edir. Bu halda siz busybox, linux-kernel, uglibc, u-boot və barebox bootloader konfiqurasiyalarını ayrıca konfiqurasiya edə bilərsiniz, lakin onların hamısı hədəf lövhəsinə bağlanacaq.
Yüklənmiş arxivi açdıqdan və ya git-dən klonladıqdan sonra biz buildroot-u işə hazırlayırıq. Kataloq quruluşu haqqında daha çox təlimatda oxuya bilərsiniz, mən sizə ən vacibləri haqqında məlumat verəcəyəm:

kollegiya — hər bir lövhə üçün xüsusi faylları olan kataloq. Bunlar sistem təsviri skriptləri (iso, sdcart, cpio və başqaları), üst-üstə düşmə kataloqu, kernel konfiqurasiyası və s. ola bilər.
konfiqurasiyalar - lövhənin faktiki defconfig. Defconfig natamam lövhə konfiqurasiyasıdır. O, yalnız standart parametrlərdən başqa parametrləri saxlayır.
dl - montaj üçün yüklənmiş mənbə kodları / faylları olan qovluq
çıxış/hədəf - alınan OS-nin yığılmış fayl sistemi. Gələcəkdə yükləmə / quraşdırma üçün ondan şəkillər yaradılır
çıxış/host - montaj üçün host kommunalları
çıxış/qurmaq - yığılmış paketlər

Montaj konfiqurasiyası KConfig vasitəsilə həyata keçirilir. Eyni sistem linux nüvəsini qurmaq üçün istifadə olunur. Ən çox istifadə olunan əmrlərin siyahısı (yapı kök qovluğunda icra edin):

  • make menuconfig - qurma konfiqurasiyasına zəng edin. Siz həmçinin GUI-dən istifadə edə bilərsiniz (nconfig et, xconfig et, gconfig et)
  • linux-menuconfig etmək - nüvə konfiqurasiyasına zəng edin.
  • təmiz olun - təmiz qurma nəticələri (çıxışda saxlanılan hər şey)
  • etmək - sistemi qurmaq. Bu, artıq qurulmuş prosesləri bərpa etmir.
  • defconfig_name etmək - konfiqurasiyanı xüsusi defconfig-ə keçirin
  • make list-defconfigs - defconfigs siyahısını göstərin
  • mənbə yaratmaq - yalnız quraşdırma fayllarını yükləyin, montaj yoxdur.
  • yardım etmək - mümkün əmrlərin siyahısını göstərmək

Vacib qeydlər və faydalı məsləhətlər

Buildroot artıq qurulmuş paketləri yenidən qurmur! Buna görə də, tam yenidən montaj tələb olunduqda vəziyyət yarana bilər.

Komanda ilə tək paketi yenidən qura bilərsiniz paket adını yenidən qurun. Məsələn, Linux nüvəsini yenidən qura bilərsiniz:

make linux-rebuild

Buildroot çıxış/build/$packagename kataloqunda .stamp faylları yaratmaqla istənilən paketin vəziyyətini saxlayır:

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

Buna görə də, paketləri yenidən qurmadan kök-fs və şəkilləri yenidən qurmaq mümkündür:

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

Faydalı Dəyişənlər

buildroot asan konfiqurasiya üçün bir sıra dəyişənlərə malikdir

  • $TOPDIR - qurucu kök qovluğu
  • $BASEDIR - OUTPUT kataloqu
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR - host fs, fs quruluşu, hədəf fs qovluqların qurulması.
  • $BUILD_DIR - açılmamış və qurulmuş paketləri olan qovluq

Vizualizasiya

buildroot vizuallaşdırma qabiliyyətinə malikdir.Son sistemdə asılılıq diaqramı, vaxt qrafiki, paket ölçüsü qrafiki qura bilərsiniz. Nəticələr çıxış/qrafik kataloqunda pdf faylları (svn,png arasından seçə bilərsiniz).

Render əmrlərinin nümunələri:

  • make graph-depends asılılıq ağacı qurmaq
  • make <pkg>-graph-depends xüsusi paketin asılılıq ağacını qurun
  • BR2_GRAPH_OUT=png make graph-build PNG çıxışı ilə qurulma vaxtı qrafiki
  • make graph-size paket ölçüsünü təyin edin

Faydalı skriptlər

Buildroot kataloqunun alt kataloqu var əşyalar faydalı skriptlərlə. Məsələn, paket təsvirlərinin düzgünlüyünü yoxlayan bir skript var. Bu, fərdi paketlər əlavə edərkən faydalı ola bilər (bunu sonra edəcəm). utils/readme.txt faylında bu skriptlərin təsviri var.

Səhmlərin paylanmasını quraq

Bütün əməliyyatların kök deyil, adi istifadəçi adından həyata keçirildiyini xatırlamaq vacibdir.
Bütün əmrlər buildroot-da yerinə yetirilir. Buildroot paylanması artıq bir çox ümumi lövhələr və virtuallaşdırma üçün bir sıra konfiqurasiyaya malikdir.

Konfiqurasiyaların siyahısına baxın:

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

qemu_x86_64_defconfig konfiqurasiyasına keçin

make qemu_x86_64_defconfig

Və qurmağa başlayın

make

Quraşdırma uğurla tamamlanır, nəticələrə baxın:

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

Buildroot, Qemu-da işləyə biləcəyiniz şəkilləri bir araya gətirdi və onların işlədiyini görə bilərsiniz.

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

Nəticə qemu-da işləyən bir sistemdir:

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

Öz lövhə konfiqurasiyanızı yaradın

Lövhə fayllarının əlavə edilməsi

Konfiqurasiyaların siyahısına baxın:

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

Siyahıda biz pc_x86_64_efi_defconfig görürük. Konfiqurasiyadan kopyalayaraq lövhəmizi yaradacağıq:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Skriptlərimizi, rootfs-overlay və digər zəruri faylları saxlamaq üçün dərhal lövhə kataloqu yaradın:

mkdir board/my_x86_board

Bu defconfig-ə keçin:

make my_x86_board_defconfig

Beləliklə, indi qurma konfiqurasiyası (bullroot kataloqunun kökündə .config-də saxlanılır) x86-64 legacy(bios) hədəf maşınına yükləmə ilə uyğun gəlir.

Linux-kernel konfiqurasiyasını kopyalayın (daha sonra faydalı olacaq):

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

KConfig vasitəsilə Quraşdırma Seçimlərinin Konfiqurasiyası

Quraşdırmaya başlayaq:

make menuconfig 

KConfig pəncərəsi açılacaq. Qrafik interfeys ilə konfiqurasiya etmək mümkündür (nconfig et, xconfig et, gconfig et):

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

Birinci bölməyə daxil oluruq Hədəf Seçimləri. Burada montajın aparılacağı hədəf arxitekturasını seçə bilərsiniz.

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

Quraşdırma variantları - burada müxtəlif qurma variantları var. Siz mənbə kodları, qurma mövzularının sayı, mənbə kodlarını yükləmək üçün güzgülər və digər parametrləri olan qovluqları təyin edə bilərsiniz. Gəlin standart parametrləri tərk edək.

Alətlər silsiləsi - quraşdırma alət dəstinin özü burada konfiqurasiya edilmişdir. Onun haqqında daha çox.

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

Alət zəncirinin növü - istifadə olunan alət zəncirinin növü. Bu, buildroot və ya xarici alətlər silsiləsində quraşdırıla bilər (siz artıq qurulmuş kataloqu və ya yükləmək üçün url-ni təyin edə bilərsiniz). Müxtəlif arxitekturalar üçün əlavə variantlar var. Məsələn, qol üçün siz sadəcə olaraq xarici Linaro alətlər silsiləsi versiyasını seçə bilərsiniz.

C kitabxanası - C kitabxanasının seçilməsi.Bütün sistemin işləməsi bundan asılıdır. Adətən bütün mümkün funksiyaları dəstəkləyən glibc istifadə olunur. Ancaq daxili sistem üçün çox böyük ola bilər, ona görə də tez-tez uglibc və ya musl seçilir. Biz glibc seçəcəyik (bu, daha sonra systemd istifadə etmək üçün tələb olunacaq).

Kernel Headers və Custom Kernel Headers seriyası - qurulan sistemdə olacaq kernel versiyasına uyğun olmalıdır. Kernel başlıqları üçün siz həmçinin tarballa və ya git repozitoriyasına gedən yolu təyin edə bilərsiniz.

GCC COMPILER VERSIONS - tikinti üçün istifadə olunacaq kompilyator versiyasını seçin
C++ dəstəyini aktivləşdirin - sistemdə c++ kitabxanaları dəstəyi ilə qurmaq üçün seçin. Bundan sonra bizə lazım olacaq.

Əlavə gcc seçimləri - əlavə kompilyator seçimlərini təyin edə bilərsiniz. Hələlik buna ehtiyacımız yoxdur.

Sistem konfiqurasiyası yaradılmış sistemin gələcək parametrlərini təyin etməyə imkan verir:

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

Əksər məqamlar başlıqdan aydın görünür. Aşağıdakı məqamlara diqqət yetirək:
İstifadəçi cədvəllərinə yol - yaradılmış istifadəçiləri olan cədvəl (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Fayl nümunəsi. İstifadəçi istifadəçisi parol admin, avtomatik gid/uid, /bin/sh shell, standart qrup istifadəçisi, qrup kökünün üzvü, şərh Foo istifadəçisi ilə yaradılacaq.

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

Kök fayl sisteminin üst-üstə düşməsi qovluqları - tərtib edilmiş target-fs-in üstünə qoyulmuş qovluq. Yeni faylları əlavə edir və mövcud olanları əvəz edir.

Fayl sistemi şəkillərini yaratmazdan əvvəl işləmək üçün xüsusi skriptlər Skripti hələlik boş buraxın.

Gəlin Kernel bölməsinə keçək

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

Bu, nüvə parametrlərinin təyin olunduğu yerdir. Kernel özü make linux-menuconfig vasitəsilə konfiqurasiya edilir.
Siz nüvə versiyasını müxtəlif yollarla təyin edə bilərsiniz: təklif olunanlardan seçin, versiyanı əl ilə daxil edin, depo və ya hazır tarball təyin edin.

Kernel konfiqurasiyası - nüvə konfiqurasiyasına gedən yol. Siz seçilmiş arxitektura üçün standart konfiqurasiyanı və ya Linux-dan defocnfig seçə bilərsiniz. Linux mənbələrində müxtəlif hədəf sistemlər üçün bir sıra defconfigs var. Sizə lazım olanı tapa bilərsiniz burada birbaşa mənbəyə baxır. Məsələn, beagle bone qara lövhəsi üçün edə bilərsiniz konfiqurasiya seçin.

Hədəf paketləri bölməsi hədəf sistemdə hansı paketlərin quraşdırılacağını seçməyə imkan verir. Hələlik bunu dəyişməz buraxaq. Daha sonra paketlərimizi bu siyahıya əlavə edəcəyik.
Fayl sistemi şəkilləri - Qurulacaq fayl sistemi şəkillərinin siyahısı. Bir iso şəkli əlavə edin

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

Yükləyicilər - toplanmış yükləyicilərin seçimi. isolinix seçin

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

Systemd konfiqurasiyası

Systemd kernel və glibc ilə birlikdə linuxun sütunlarından birinə çevrilir. Buna görə də onun quruluşunu ayrıca bir paraqrafda çıxardım.

O, make menuconfig, sonra Hədəf paketləri → Sistem alətləri → systemd vasitəsilə konfiqurasiya edilir. Burada sistem işə salındıqda hansı sistem xidmətlərinin quraşdırılacağını və işə salınacağını təyin edə bilərsiniz.

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

Sistem konfiqurasiyasının saxlanması

Bu konfiqurasiyanı KConfig vasitəsilə saxlayırıq.

Sonra defconfig-i saxlayırıq:

make savedefconfig

Linux nüvəsinin konfiqurasiyası

Linux nüvəsinin konfiqurasiyası aşağıdakı əmrlə çağırılır:

make linux-menuconfig

Virtualbox video kartı üçün dəstək əlavə edin

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

Virtualbox Qonaq inteqrasiya dəstəyi əlavə edin

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

Saxlayırıq və çıxırıq. Vacib: konfiqurasiya output/build/linux-$version/config-də yadda saxlanılacaq, lakin board/my_x86_board/linux.config-də deyil

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

Buna görə konfiqurasiyanı saxlama yerinə əl ilə kopyalamalısınız:

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

Bundan sonra bütün sistemin tam yenidən yığılmasını həyata keçirəcəyik. buildroot artıq qurulmuş şeyi yenidən qurmur, siz yenidən qurmaq üçün paketləri əl ilə təyin etməlisiniz. Vaxt və əsəbləri itirməmək üçün bütövlükdə kiçik bir sistemi yenidən qurmaq daha asandır):

make clean;make

Montaj başa çatdıqdan sonra biz VirtualBox-u (5.2 və 6.0 versiyalarında sınaqdan keçirilmişdir) cd-diskdən yükləmə ilə işə salırıq.Sistem parametrləri:

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

Quraşdırılmış iso-dan başlayaraq:

Buildroot - Hissə 1 - İcmal, Minimal Sistem Quraşdırma, Menyu Quraşdırma

İstifadə olunan materialların siyahısı

  1. Buildroot təlimatı

Mənbə: www.habr.com

Добавить комментарий