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, 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:
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ı qurmaqmake <pkg>-graph-depends
xüsusi paketin asılılıq ağacını qurunBR2_GRAPH_OUT=png make graph-build
PNG çıxışı ilə qurulma vaxtı qrafikimake 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:
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, 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:
Öz lövhə konfiqurasiyanızı yaradın
Lövhə fayllarının əlavə edilməsi
Konfiqurasiyaların siyahısına baxın:
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):
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.
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.
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:
Ə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 (
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
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
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
Yükləyicilər - toplanmış yükləyicilərin seçimi. isolinix seçin
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.
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
Virtualbox Qonaq inteqrasiya dəstəyi əlavə edin
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
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:
Quraşdırılmış iso-dan başlayaraq:
İstifadə olunan materialların siyahısı
- Buildroot təlimatı
Mənbə: www.habr.com