Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Εισαγωγή

Σε αυτήν τη σειρά άρθρων, θέλω να εξετάσω το σύστημα κατασκευής διανομής buildroot και να μοιραστώ την εμπειρία μου στην προσαρμογή του. Θα υπάρχει πρακτική εμπειρία στη δημιουργία ενός μικρού λειτουργικού συστήματος με γραφικό περιβάλλον και ελάχιστη λειτουργικότητα.

Πρώτα απ 'όλα, δεν πρέπει να συγχέετε το σύστημα κατασκευής και τη διανομή. Το Buildroot μπορεί να δημιουργήσει ένα σύστημα από ένα σύνολο πακέτων που του προσφέρονται. Το Buildroot είναι χτισμένο σε makefiles και επομένως έχει τεράστιες δυνατότητες προσαρμογής. Να αντικαταστήσετε ένα πακέτο με μια άλλη έκδοση, να προσθέσετε το δικό σας πακέτο, να αλλάξετε τους κανόνες για τη δημιουργία ενός πακέτου, να προσαρμόσετε το σύστημα αρχείων μετά την εγκατάσταση όλων των πακέτων; Το buildroot μπορεί να τα κάνει όλα αυτά.

Στη Ρωσία, χρησιμοποιείται το buildroot, αλλά κατά τη γνώμη μου υπάρχουν λίγες πληροφορίες στη ρωσική γλώσσα για αρχάριους.

Σκοπός της εργασίας είναι η κατασκευή κιτ διανομής με ζωντανή λήψη, διεπαφή icewm και πρόγραμμα περιήγησης. Η πλατφόρμα στόχος είναι το virtualbox.

Γιατί να δημιουργήσετε τη δική σας διανομή; Συχνά χρειάζεστε περιορισμένη λειτουργικότητα με περιορισμένους πόρους. Πιο συχνά στον αυτοματισμό, πρέπει να δημιουργήσετε υλικολογισμικό. Η προσαρμογή μιας διανομής γενικού σκοπού με τον καθαρισμό περιττών πακέτων και τη μετατροπή του σε υλικολογισμικό είναι ένας πιο χρονοβόρος τρόπος από τη δημιουργία μιας νέας διανομής. Η χρήση του Gentoo έχει επίσης τους περιορισμούς της.

Το σύστημα Buildroot είναι πολύ ισχυρό, αλλά δεν θα σας κάνει τίποτα. Μπορεί να ενεργοποιήσει και να αυτοματοποιήσει μόνο τη διαδικασία συναρμολόγησης.

Εναλλακτικά συστήματα κατασκευής (yocto, ανοιχτό σύστημα κατασκευής κ.λπ.) δεν λαμβάνονται υπόψη ούτε συγκρίνονται.

Πού να το αποκτήσετε και πώς να ξεκινήσετε

Ιστοσελίδα έργου - buildroot.org. Εδώ μπορείτε να κάνετε λήψη της τρέχουσας έκδοσης και να διαβάσετε το εγχειρίδιο. Εκεί μπορείτε να επικοινωνήσετε με την κοινότητα, υπάρχει ένας εντοπιστής σφαλμάτων, λίστες αλληλογραφίας και ένα κανάλι irc.

Το Buildroot λειτουργεί με defconfigs για την πλακέτα κατασκευής στόχου. Το Defconfig είναι ένα αρχείο διαμόρφωσης που περιέχει μόνο επιλογές που δεν έχουν προεπιλεγμένη τιμή. Είναι αυτός που καθορίζει τι και πώς θα συλλεχθεί. Σε αυτήν την περίπτωση, μπορείτε να διαμορφώσετε ξεχωριστά τις παραμέτρους busybox, linux-kernel, uglibc, u-boot και barebox bootloader, αλλά θα συνδεθούν όλες στον πίνακα στόχο.
Μετά την αποσυσκευασία του ληφθέντος αρχείου ή την κλωνοποίηση από το git, ετοιμάζουμε το buildroot για εργασία. Μπορείτε να διαβάσετε περισσότερα για τη δομή του καταλόγου στο εγχειρίδιο, θα σας πω για τα πιο σημαντικά:

επιτροπή — κατάλογος με αρχεία ειδικά για κάθε πίνακα. Αυτά μπορεί να είναι σενάρια απεικόνισης συστήματος (iso, sdcart, cpio και άλλα), κατάλογος επικάλυψης, διαμόρφωση πυρήνα κ.λπ.
configs - την πραγματική defconfig της πλακέτας. Το Defconfig είναι μια ημιτελής διαμόρφωση πλακέτας. Αποθηκεύει μόνο παραμέτρους εκτός από τις προεπιλεγμένες ρυθμίσεις.
dl - κατάλογος με ληφθέντες πηγαίους κώδικες / αρχεία για συναρμολόγηση
έξοδος/στόχος - το συναρμολογημένο σύστημα αρχείων του ληφθέντος ΛΣ. Στο μέλλον, δημιουργούνται εικόνες από αυτό για λήψη / εγκατάσταση
έξοδος/κεντρικός υπολογιστής - βοηθητικά προγράμματα υποδοχής για συναρμολόγηση
έξοδος/κατασκευή - συναρμολογημένες συσκευασίες

Η διαμόρφωση συναρμολόγησης γίνεται μέσω του KConfig. Το ίδιο σύστημα χρησιμοποιείται για την κατασκευή του πυρήνα του linux. Λίστα με τις πιο συχνά χρησιμοποιούμενες εντολές (εκτελούνται στον κατάλογο buildroot):

  • make menuconfig - καλέστε τη διαμόρφωση build. Μπορείτε επίσης να χρησιμοποιήσετε τη γραφική διεπαφή (make nconfig, make xconfig, make gconfig)
  • make linux-menuconfig - κλήση διαμόρφωσης πυρήνα.
  • κάνει καθαρά αποτελέσματα κατασκευής (ό,τι είναι αποθηκευμένο στην έξοδο)
  • make - κατασκευή του συστήματος. Αυτό δεν αναδομεί ήδη χτισμένες διαδικασίες.
  • make defconfig_name - αλλάξτε τη διαμόρφωση σε ένα συγκεκριμένο defconfig
  • make list-defconfigs - εμφάνιση λίστας defconfigs
  • make source - απλώς κατεβάστε τα αρχεία εγκατάστασης, χωρίς δημιουργία.
  • make help - εμφάνιση μιας λίστας πιθανών εντολών

Σημαντικές σημειώσεις και χρήσιμες συμβουλές

Το Buildroot δεν ανακατασκευάζει ήδη χτισμένα πακέτα! Επομένως, μπορεί να προκύψει μια κατάσταση όταν απαιτείται πλήρης επανασυναρμολόγηση.

Μπορείτε να δημιουργήσετε ξανά ένα ξεχωριστό πακέτο με την εντολή makepackname-rebuild. Για παράδειγμα, μπορείτε να δημιουργήσετε ξανά τον πυρήνα του Linux:

make linux-rebuild

Το Buildroot αποθηκεύει την κατάσταση οποιουδήποτε πακέτου δημιουργώντας αρχεία .stamp στον κατάλογο output/build/$packagename:

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Ως εκ τούτου, είναι δυνατή η αναδόμηση των root-fs και των εικόνων χωρίς την αναδόμηση πακέτων:

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

Χρήσιμες μεταβλητές

Το buildroot έχει ένα σύνολο μεταβλητών για εύκολη διαμόρφωση

  • $TOPDIR - ριζικός κατάλογος buildroot
  • $BASEDIR - Κατάλογος OUTPUT
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — host fs, σταδιοποίηση fs, στόχος fs δημιουργία καταλόγων.
  • $BUILD_DIR - κατάλογος με μη συσκευασμένα και ενσωματωμένα πακέτα

Οραματισμός

Το buildroot έχει μια δυνατότητα οπτικοποίησης. Μπορείτε να δημιουργήσετε ένα διάγραμμα εξαρτήσεων, ένα γράφημα χρόνου κατασκευής και ένα γράφημα μεγεθών πακέτων στο τελικό σύστημα. Τα αποτελέσματα είναι σε μορφή αρχείων pdf (μπορείτε να επιλέξετε από svn,png) στον κατάλογο εξόδου/γραφήματος.

Παραδείγματα εντολών απόδοσης:

  • make graph-depends δόμηση δέντρου εξάρτησης
  • make <pkg>-graph-depends να δημιουργήσετε το δέντρο εξάρτησης ενός συγκεκριμένου πακέτου
  • BR2_GRAPH_OUT=png make graph-build Γράφημα χρόνου κατασκευής πλοκής με έξοδο PNG
  • make graph-size μέγεθος πακέτου οικοπέδου

Χρήσιμα σενάρια

Υπάρχει ένας υποκατάλογος στον κατάλογο buildroot σκεύη με χρήσιμα σενάρια. Για παράδειγμα, υπάρχει ένα σενάριο που ελέγχει την ορθότητα των περιγραφών των πακέτων. Αυτό μπορεί να είναι χρήσιμο όταν προσθέτετε τα δικά σας πακέτα (θα το κάνω αργότερα). Το αρχείο utils/readme.txt περιέχει μια περιγραφή αυτών των σεναρίων.

Ας φτιάξουμε μια διανομή μετοχών

Είναι σημαντικό να υπενθυμίσουμε ότι όλες οι λειτουργίες εκτελούνται για λογαριασμό ενός τακτικού χρήστη και όχι για λογαριασμό του root.
Όλες οι εντολές εκτελούνται στο buildroot. Το πακέτο buildroot περιλαμβάνει ήδη ένα σύνολο διαμορφώσεων για πολλές κοινές πλακέτες και εικονικοποίηση.

Δείτε τη λίστα με τις διαμορφώσεις:

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Μετάβαση στο qemu_x86_64_defconfig config

make qemu_x86_64_defconfig

Και ξεκινήστε την κατασκευή

make

Η κατασκευή ολοκληρώθηκε με επιτυχία, δείτε τα αποτελέσματα:

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Το Buildroot έχει συγκεντρώσει εικόνες που μπορείτε να εκτελέσετε στο Qemu και να επαληθεύσετε ότι λειτουργούν.

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

Το αποτέλεσμα είναι ένα σύστημα που τρέχει σε qemu:

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Δημιουργία της δικής σας διαμόρφωσης πλακέτας

Προσθήκη αρχείων πίνακα

Δείτε τη λίστα με τις διαμορφώσεις:

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Στη λίστα βλέπουμε pc_x86_64_efi_defconfig. Θα δημιουργήσουμε τον πίνακα μας αντιγράφοντας τον από τη διαμόρφωση:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Ας δημιουργήσουμε αμέσως έναν κατάλογο πίνακα για να αποθηκεύσουμε τα σενάρια, το rootfs-overlay και άλλα απαραίτητα αρχεία:

mkdir board/my_x86_board

Μεταβείτε σε αυτό το defconfig:

make my_x86_board_defconfig

Έτσι, τώρα το build config (αποθηκευμένο στο .config στη ρίζα του καταλόγου buildroot) αντιστοιχεί στο μηχάνημα προορισμού εκκίνησης x86-64 legacy(bios).

Αντιγράψτε τη διαμόρφωση του πυρήνα του Linux (χρήσιμο αργότερα):

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

Διαμόρφωση επιλογών δόμησης μέσω του KConfig

Ας ξεκινήσουμε τη ρύθμιση:

make menuconfig 

Θα ανοίξει το παράθυρο KConfig. Είναι δυνατή η διαμόρφωση με μια γραφική διεπαφή (make nconfig, make xconfig, make gconfig):

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Μπαίνουμε στην πρώτη ενότητα Επιλογές στόχου. Εδώ μπορείτε να επιλέξετε την αρχιτεκτονική στόχο για την οποία θα πραγματοποιηθεί η κατασκευή.

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Επιλογές κατασκευής - υπάρχουν διάφορες επιλογές κατασκευής εδώ. Μπορείτε να καθορίσετε καταλόγους με πηγαίους κώδικες, τον αριθμό των νημάτων κατασκευής, καθρέφτες για τη λήψη πηγαίων κωδίκων και άλλες ρυθμίσεις. Ας αφήσουμε τις προεπιλεγμένες ρυθμίσεις.

Toolchain - η ίδια η εργαλειοθήκη κατασκευής διαμορφώνεται εδώ. Περισσότερα για αυτόν.

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Τύπος αλυσίδας εργαλείων - ο τύπος της αλυσίδας εργαλείων που χρησιμοποιείται. Αυτό μπορεί να ενσωματωθεί στο buildroot ή σε μια εξωτερική αλυσίδα εργαλείων (μπορείτε να καθορίσετε έναν κατάλογο με έναν ήδη ενσωματωμένο ή ένα url για λήψη). Υπάρχουν πρόσθετες επιλογές για διαφορετικές αρχιτεκτονικές. Για παράδειγμα, για βραχίονα, μπορείτε απλά να επιλέξετε την έκδοση της εξωτερικής αλυσίδας εργαλείων Linaro.

Βιβλιοθήκη C - επιλογή της βιβλιοθήκης C. Η λειτουργία ολόκληρου του συστήματος εξαρτάται από αυτό. Συνήθως χρησιμοποιείται το glibc, το οποίο υποστηρίζει όλες τις πιθανές λειτουργίες. Αλλά μπορεί να είναι πολύ μεγάλο για ένα ενσωματωμένο σύστημα, επομένως συχνά επιλέγεται uglibc ή musl. Θα επιλέξουμε το glibc (αυτό θα χρειαστεί αργότερα για να χρησιμοποιήσετε το systemd).

Κεφαλίδες πυρήνα και σειρές προσαρμοσμένων κεφαλίδων πυρήνα – πρέπει να ταιριάζουν με την έκδοση του πυρήνα που θα υπάρχει στο συναρμολογημένο σύστημα. Για τις κεφαλίδες του πυρήνα, μπορείτε επίσης να καθορίσετε τη διαδρομή προς το αποθετήριο tarball ή git.

GCC COMPILER VERSIONS - επιλέξτε την έκδοση μεταγλωττιστή που θα χρησιμοποιηθεί για την κατασκευή
Ενεργοποίηση υποστήριξης C++ - επιλέξτε για δημιουργία με υποστήριξη για βιβλιοθήκες c++ στο σύστημα. Θα το χρειαστούμε αργότερα.

Πρόσθετες επιλογές gcc - μπορείτε να ορίσετε πρόσθετες επιλογές μεταγλωττιστή. Δεν το χρειαζόμαστε προς το παρόν.

Η διαμόρφωση συστήματος σάς επιτρέπει να ορίσετε τις μελλοντικές παραμέτρους του δημιουργημένου συστήματος:

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Οι περισσότεροι βαθμοί είναι ξεκάθαροι από τον τίτλο. Ας προσέξουμε τα ακόλουθα σημεία:
Διαδρομή στους πίνακες χρηστών - πίνακας με χρήστες που πρόκειται να δημιουργηθούν (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Παράδειγμα αρχείου. Ο χρήστης χρήστης θα δημιουργηθεί με τον κωδικό πρόσβασης admin, αυτόματα gid/uid, /bin/sh shell, προεπιλεγμένο χρήστη ομάδας, root μέλος ομάδας, comment user Foo

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

Καταλόγους επικάλυψης συστήματος αρχείων ρίζας - ένας κατάλογος που επικαλύπτεται πάνω από το μεταγλωττισμένο target-fs. Προσθέτει νέα αρχεία και αντικαθιστά τα υπάρχοντα.

Προσαρμοσμένα σενάρια για εκτέλεση πριν από τη δημιουργία εικόνων συστήματος αρχείων - Σενάρια που εκτελούνται αμέσως πριν διπλώσετε το σύστημα αρχείων σε εικόνες. Ας αφήσουμε το σενάριο κενό προς το παρόν.

Ας πάμε στην ενότητα Kernel

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Οι ρυθμίσεις πυρήνα ορίζονται εδώ. Ο ίδιος ο πυρήνας ρυθμίζεται μέσω του make linux-menuconfig.
Μπορείτε να ορίσετε την έκδοση του πυρήνα με διάφορους τρόπους: επιλέξτε από αυτούς που προσφέρονται, εισάγετε την έκδοση με μη αυτόματο τρόπο, καθορίστε ένα αποθετήριο ή ένα έτοιμο tarball.

Διαμόρφωση πυρήνα - διαδρομή προς τη διαμόρφωση πυρήνα. Μπορείτε να επιλέξετε την προεπιλεγμένη διαμόρφωση για την επιλεγμένη αρχιτεκτονική ή το defocnfig από το Linux. Οι πηγές Linux έχουν ένα σύνολο παραμέτρων defconfig για διαφορετικά συστήματα προορισμού. Μπορείτε να βρείτε αυτό που χρειάζεστε κοιτάζοντας απευθείας τις πηγές εδώ. Για παράδειγμα, για μια μαύρη σανίδα από κόκαλο λαγωνικό μπορείτε επιλέξτε διαμόρφωση.

Η ενότητα "Πακέτα στόχου" σάς επιτρέπει να επιλέξετε ποια πακέτα θα εγκατασταθούν στο σύστημα προορισμού. Ας το αφήσουμε αμετάβλητο προς το παρόν. Αργότερα θα προσθέσουμε τα πακέτα μας σε αυτή τη λίστα.
Εικόνες συστήματος αρχείων - Λίστα εικόνων συστήματος αρχείων προς δημιουργία. Προσθέστε μια εικόνα iso

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Bootloaders - η επιλογή των συλλεγμένων bootloaders. Επιλέξτε isolinix

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Διαμόρφωση συστήματος

Το Systemd γίνεται ένας από τους πυλώνες του linux, μαζί με τον πυρήνα και το glibc. Επομένως, έβγαλα τη ρύθμισή του σε ξεχωριστή παράγραφο.

Ρυθμίζεται μέσω του make menuconfig και, στη συνέχεια, Target packages → System tools → systemd. Εδώ μπορείτε να καθορίσετε ποιες υπηρεσίες systemd θα εγκατασταθούν και θα ξεκινήσουν κατά την εκκίνηση του συστήματος.

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Αποθήκευση της διαμόρφωσης συστήματος

Αποθηκεύουμε αυτήν τη διαμόρφωση μέσω του KConfig.

Στη συνέχεια αποθηκεύουμε το defconfig μας:

make savedefconfig

Διαμόρφωση πυρήνα Linux

Η διαμόρφωση του πυρήνα του Linux καλείται με την ακόλουθη εντολή:

make linux-menuconfig

Προσθήκη υποστήριξης για κάρτα βίντεο Virtualbox

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Ας προσθέσουμε υποστήριξη ενοποίησης Virtualbox Guest

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Αποθηκεύουμε και βγαίνουμε. ΣΗΜΑΝΤΙΚΟ: η διαμόρφωση θα αποθηκευτεί στο output/build/linux-$version/config, αλλά όχι στο board/my_x86_board/linux.config

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Επομένως, πρέπει να αντιγράψετε με μη αυτόματο τρόπο τη διαμόρφωση στη θέση αποθήκευσης:

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

Μετά από αυτό, θα εκτελέσουμε μια πλήρη επανασυναρμολόγηση ολόκληρου του συστήματος. Το buildroot δεν αναδημιουργεί ό,τι έχει ήδη χτιστεί, πρέπει να καθορίσετε με μη αυτόματο τρόπο τα πακέτα προς ανακατασκευή. Για να μην χάνετε χρόνο και νεύρα, είναι ευκολότερο να ξαναχτίσετε ένα μικρό σύστημα ως σύνολο):

make clean;make

Μετά την ολοκλήρωση της συναρμολόγησης, εκκινούμε το VirtualBox (δοκιμασμένο στις εκδόσεις 5.2 και 6.0) με εκκίνηση από το cd-disk. Παράμετροι συστήματος:

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Ξεκινώντας από το ενσωματωμένο iso:

Buildroot - Μέρος 1 - Επισκόπηση, Minimal System Build, Menu Setup

Κατάλογος χρησιμοποιημένων υλικών

  1. Εγχειρίδιο Buildroot

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο