Buildroot - μέρος 2. Δημιουργία της διαμόρφωσης της πλακέτας σας. χρησιμοποιώντας εξωτερικό δέντρο, rootfs-overlay, σενάρια μετά την κατασκευή

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

Χρήση του ΕΞΩΤΕΡΙΚΟΥ μηχανισμού για προσαρμογή

Σε ένα προηγούμενο άρθρο Εξετάσαμε ένα απλό παράδειγμα προσθήκης της δικής σας διαμόρφωσης προσθέτοντας το defconfig του πίνακα και τα απαραίτητα αρχεία απευθείας στον κατάλογο Buildroot.

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

Σημείωση: μπορείτε να επικαλύψετε πολλά εξωτερικά δέντρα ταυτόχρονα, υπάρχει ένα παράδειγμα στο εγχειρίδιο buildroot

Ας δημιουργήσουμε έναν κατάλογο my_tree, που βρίσκεται δίπλα στον κατάλογο buildroot και μεταφέρουμε τις ρυθμίσεις μας εκεί. Η έξοδος θα πρέπει να είναι η ακόλουθη δομή αρχείου:

[alexey@alexey-pc my_tree]$ tree
.
├── board
│   └── my_x86_board
│       ├── bef_cr_fs_img.sh
│       ├── linux.config
│       ├── rootfs_overlay
│       └── users.txt
├── Config.in
├── configs
│   └── my_x86_board_defconfig
├── external.desc
├── external.mk
├── package
└── patches

6 directories, 7 files

Όπως μπορείτε να δείτε, γενικά η δομή επαναλαμβάνει τη δομή του buildroot.

Κατάλογος επιτροπή περιέχει αρχεία ειδικά για κάθε πίνακα στην περίπτωσή μας:

  • Το bef_cr_fs_img.sh είναι ένα σενάριο που θα εκτελεστεί μετά τη δημιουργία του συστήματος αρχείων προορισμού, αλλά πριν από τη συσκευασία του σε εικόνες. Θα το χρησιμοποιήσουμε στο μέλλον
  • linux.config - διαμόρφωση πυρήνα
  • rootfs_overlay - κατάλογος για επικάλυψη πάνω από το σύστημα αρχείων προορισμού
  • users.txt - ένα αρχείο που περιγράφει τους χρήστες που θα δημιουργηθούν

Κατάλογος configs περιέχει defconfig των πλακών μας. Έχουμε μόνο ένα.

Πακέτο - κατάλογος με τα πακέτα μας. Αρχικά, το buildroot περιέχει περιγραφές και κανόνες για τη δημιουργία περιορισμένου αριθμού πακέτων. Αργότερα θα προσθέσουμε εδώ τον διαχειριστή παραθύρων icewm και τον διαχειριστή γραφικών σύνδεσης Slim.
Patches — σας επιτρέπει να αποθηκεύετε άνετα τα patches σας για διαφορετικά πακέτα. Περισσότερες λεπτομέρειες σε ξεχωριστή ενότητα παρακάτω.
Τώρα πρέπει να προσθέσουμε τα αρχεία περιγραφής για το εξωτερικό μας δέντρο. Υπάρχουν 3 αρχεία υπεύθυνα για αυτό: external.desc, Config.in, external.mk.

εξωτερικός.περιγρ περιέχει την πραγματική περιγραφή:

[alexey@alexey-pc my_tree]$ cat external.desc 
name: my_tree
desc: My simple external-tree for article

Η πρώτη γραμμή είναι ο τίτλος. Στο μελλοντικό buildroot δημιουργήστε μια μεταβλητή $(BR2_EXTERNAL_MY_TREE_PATH), το οποίο πρέπει να χρησιμοποιείται κατά τη διαμόρφωση της διάταξης. Για παράδειγμα, η διαδρομή προς το αρχείο χρήστη μπορεί να οριστεί ως εξής:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

Η δεύτερη γραμμή είναι μια σύντομη, ευανάγνωστη από τον άνθρωπο περιγραφή.

Config.in, external.mk — αρχεία για την περιγραφή των προστιθέμενων πακέτων. Εάν δεν προσθέσετε τα δικά σας πακέτα, τότε αυτά τα αρχεία μπορούν να μείνουν κενά. Προς το παρόν, αυτό θα κάνουμε.
Τώρα έχουμε έτοιμο το εξωτερικό μας δέντρο, που περιέχει το defconfig της πλακέτας μας και τα αρχεία που χρειάζεται. Ας πάμε στον κατάλογο buildroot και ας καθορίσουμε τη χρήση του εξωτερικού δέντρου:

[alexey@alexey-pc buildroot]$ make BR2_EXTERNAL=../my_tree/ my_x86_board_defconfig
#
# configuration written to /home/alexey/dev/article/ramdisk/buildroot/.config
#
[alexey@alexey-pc buildroot]$ make menuconfig

Στην πρώτη εντολή χρησιμοποιούμε το όρισμα BR2_EXTERNAL=../my_tree/, υποδεικνύοντας τη χρήση ενός εξωτερικού δέντρου. Μπορείτε να καθορίσετε πολλά εξωτερικά δέντρα για χρήση ταυτόχρονα. Σε αυτήν την περίπτωση, χρειάζεται να το κάνετε μόνο μία φορά, μετά την οποία δημιουργείται ένα αρχείο output/.br-external.mk που αποθηκεύει πληροφορίες σχετικά με το εξωτερικό δέντρο που χρησιμοποιείται:

[alexey@alexey-pc buildroot]$ cat output/.br-external.mk 
#
# Automatically generated file; DO NOT EDIT.
#

BR2_EXTERNAL ?= /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
BR2_EXTERNAL_NAMES = 
BR2_EXTERNAL_DIRS = 
BR2_EXTERNAL_MKS = 

BR2_EXTERNAL_NAMES += my_tree
BR2_EXTERNAL_DIRS += /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
BR2_EXTERNAL_MKS += /home/alexey/dev/article/ramdisk/my_small_linux/my_tree/external.mk
export BR2_EXTERNAL_my_tree_PATH = /home/alexey/dev/article/ramdisk/my_small_linux/my_tree
export BR2_EXTERNAL_my_tree_DESC = My simple external-tree for article

Σπουδαίος! Οι διαδρομές σε αυτό το αρχείο θα είναι απόλυτες!

Στο μενού έχει εμφανιστεί ένα στοιχείο εξωτερικών επιλογών:

Buildroot - μέρος 2. Δημιουργία της διαμόρφωσης της πλακέτας σας. χρησιμοποιώντας εξωτερικό δέντρο, rootfs-overlay, σενάρια μετά την κατασκευή

Αυτό το υπομενού θα περιέχει τα πακέτα μας από το εξωτερικό μας δέντρο. Αυτή η ενότητα είναι κενή.

Τώρα είναι πιο σημαντικό για εμάς να ξαναγράψουμε τις απαραίτητες διαδρομές για να χρησιμοποιήσουμε το εξωτερικό δέντρο.

Λάβετε υπόψη ότι στην ενότητα Επιλογές Build → Location to save buildroot config, θα υπάρχει μια απόλυτη διαδρομή προς το αποθηκευμένο defconfig. Σχηματίζεται τη στιγμή του καθορισμού της χρήσης του extgernal_tree.

Θα διορθώσουμε επίσης τις διαδρομές στην ενότητα Διαμόρφωση συστήματος. Για έναν πίνακα με δημιουργημένους χρήστες:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/users.txt

Στην ενότητα Kernel, αλλάξτε τη διαδρομή προς τη διαμόρφωση του πυρήνα:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/linux.config

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

Προσθήκη επικάλυψης root fs:

Αυτός ο μηχανισμός σάς επιτρέπει να προσθέτετε/αντικαθιστάτε εύκολα αρχεία στο σύστημα αρχείων προορισμού.
Εάν το αρχείο βρίσκεται σε επικάλυψη root fs, αλλά όχι στο στόχο, τότε θα προστεθεί
Εάν το αρχείο βρίσκεται σε επικάλυψη root fs και σε στόχο, τότε θα αντικατασταθεί.
Αρχικά, ας ορίσουμε τη διαδρομή στο root fs overlay dir. Αυτό γίνεται στην ενότητα Διαμόρφωση συστήματος → Καταλόγους επικάλυψης συστήματος αρχείων ρίζας:

$(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/rootfs_overlay/

Τώρα ας δημιουργήσουμε δύο αρχεία.

[alexey@alexey-pc my_small_linux]$ cat my_tree/board/my_x86_board/rootfs_overlay/etc/hosts 
127.0.0.1   localhost
127.0.1.1   my_small_linux
8.8.8.8     google-public-dns-a.google.com.
[alexey@alexey-pc my_small_linux]$ cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt 
This is new file from overlay

Το πρώτο αρχείο (my_tree/board/my_x86_board/rootfs_overlay/etc/hosts) θα αντικαταστήσει το αρχείο /etc/hosts στο ολοκληρωμένο σύστημα. Το δεύτερο αρχείο (cat my_tree/board/my_x86_board/rootfs_overlay/new_file.txt) θα προστεθεί.

Συλλέγουμε και ελέγχουμε:

Buildroot - μέρος 2. Δημιουργία της διαμόρφωσης της πλακέτας σας. χρησιμοποιώντας εξωτερικό δέντρο, rootfs-overlay, σενάρια μετά την κατασκευή

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

Συχνά χρειάζεται να εκτελέσετε κάποια εργασία μέσα στο σύστημα αρχείων προορισμού προτού συσκευαστεί σε εικόνες.

Αυτό μπορεί να γίνει στην ενότητα Διαμόρφωση συστήματος:

Buildroot - μέρος 2. Δημιουργία της διαμόρφωσης της πλακέτας σας. χρησιμοποιώντας εξωτερικό δέντρο, rootfs-overlay, σενάρια μετά την κατασκευή

Τα δύο πρώτα σενάρια εκτελούνται μετά την κατασκευή του συστήματος αρχείων προορισμού, αλλά προτού συσκευαστεί σε εικόνες. Η διαφορά είναι ότι το σενάριο fakeroot εκτελείται στο πλαίσιο του fakeroot, το οποίο προσομοιώνει την εργασία ως χρήστης root.

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

Για παράδειγμα, θα δημιουργήσω ένα σενάριο που θα γράφει την έκδοση και την ημερομηνία κατασκευής στο /etc/.
Πρώτα θα υποδείξω τη διαδρομή προς αυτό το αρχείο στο εξωτερικό μου δέντρο:

Buildroot - μέρος 2. Δημιουργία της διαμόρφωσης της πλακέτας σας. χρησιμοποιώντας εξωτερικό δέντρο, rootfs-overlay, σενάρια μετά την κατασκευή

Και τώρα το ίδιο το σενάριο:

[alexey@alexey-pc buildroot]$ cat ../my_tree/board/my_x86_board/bef_cr_fs_img.sh 
#!/bin/sh
echo "my small linux 1.0 pre alpha" > output/target/etc/mysmalllinux-release
date >> output/target/etc/mysmalllinux-release

Μετά τη συναρμολόγηση, μπορείτε να δείτε αυτό το αρχείο στο σύστημα.

Στην πράξη, το σενάριο μπορεί να γίνει μεγάλο. Επομένως, στο πραγματικό έργο πήρα μια πιο προηγμένη διαδρομή:

  1. Δημιούργησα έναν κατάλογο (my_tree/board_my_x86_board/inside_fakeroot_scripts) στον οποίο υπάρχουν σενάρια προς εκτέλεση, με σειριακούς αριθμούς. Για παράδειγμα, 0001-add-my_small_linux-version.sh, 0002-clear-apache-root-dir.sh
  2. Έγραψα ένα σενάριο (my_tree/board_my_x86_board/run_inside_fakeroot.sh) που περνά από αυτόν τον κατάλογο και εκτελεί διαδοχικά τα σενάρια που περιέχονται σε αυτόν
  3. Καθορίστηκε αυτό το σενάριο στις ρυθμίσεις πλακέτας στην ενότητα Διαμόρφωση συστήματος -> Προσαρμοσμένα σενάρια για εκτέλεση εντός του περιβάλλοντος fakeroot ($(BR2_EXTERNAL_my_tree_PATH)/board/my_x86_board/run_inside_fakeroot.sh)

Πηγή: www.habr.com

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