Πίνακας περιεχομένων:
- Βήμα 1: Απαιτήσεις
- Βήμα 2: Διαμόρφωση κεντρικού υπολογιστή για δημιουργία πυρήνα και δημιουργία πυρήνα στο HOST
- Βήμα 3: Ανακατασκευάστε το Boot.img στο HOST
- Βήμα 4: Δημιουργία συστήματος αρχείων ρίζας στο HOST
- Βήμα 5: Δημιουργία διακομιστή NFS στο HOST και αντιγραφή αρχείων
- Βήμα 6: Ενημέρωση εικόνας εκκίνησης Dragonboard 410c και διαμόρφωση διεπαφών δικτύου
2025 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2025-01-13 06:57
Στόχοι:
- Εγκαταστήστε την εργαλειοθήκη και επανασυγκολλήστε τον πυρήνα για να εισαγάγετε υποστήριξη USB Ethernet CDC Gadget.
- Αναδημιουργήστε το boot.img από τη Linaro για να εκκινήσετε το CDC USB Ethernet.
- Δημιουργία διακομιστή NFS για τη φιλοξενία συστήματος αρχείων ρίζας.
- Διαμόρφωση IP σε DEVICE και HOST.
Βήμα 1: Απαιτήσεις
Θα χρειαστείτε τα ακόλουθα είδη:
- Ένα DragonBoard ™ 410c (ονομάζεται εδώ ΣΥΣΚΕΥΗ).
- Ένας υπολογιστής που χρησιμοποιεί το Ubuntu 16.04.3 ενημερώθηκε (ονομάζεται εδώ HOST) με σύνδεση στο διαδίκτυο και υποδοχή SDCard.
- Μια καθαρή εγκατάσταση της Linaro -developer έκδοση 431 - Σύνδεσμος: Στιγμιότυπο Linaro Debian v431
- Οθόνη HDMI.
- Πληκτρολόγιο USB?
- Κάρτα SD 8GB
- Καλώδιο USB, uUSB USB για σύνδεση της συσκευής στο HOST.
Βήμα 2: Διαμόρφωση κεντρικού υπολογιστή για δημιουργία πυρήνα και δημιουργία πυρήνα στο HOST
Αρχικά, θα δημιουργήσουμε όλους τους καταλόγους πριν συνεχίσουμε. Ετσι:
$ cd
$ mkdir db410remototoot $ cd db410remoteroot $ mkdir εργαλειοθήκη $ mkdir db410c-modules
Δυστυχώς, ο πυρήνας linux που χρησιμοποιείται από το Linaro (Έκδοση 431) δεν διαθέτει υποστήριξη για το gadget USB Ethernet, εξαιτίας αυτού, ο πυρήνας Linux πρέπει να αναδημιουργηθεί για τη συγκεκριμένη έκδοση. Κατεβάστε την εργαλειοθήκη Linaro για να δημιουργήσετε και να αναπτύξετε τον πυρήνα linux στο Dragonboard410c από τον κεντρικό υπολογιστή x86.
$ wget
$ tar -xf gcc-*-x86_64_aarch64-linux-gnu.tar.xz -C./toolchain --strip-components = 1
Τώρα εγκαταστήστε πακέτα που απαιτούνται για τη δημιουργία του πυρήνα:
$ sudo apt update && sudo apt-get install git build-essential abootimg kernel-package fakeroot libncurses5-dev libssl-dev ccache
Λήψη Linux Kernel source Clone Qualcomm landing team αποθετήριο Linux:
$ git clone
$ cd kernel $ git checkout προέλευση/έκδοση/qcomlt-4.14 -b my-custom-4.14
Τώρα, ορίστε μεταβλητές περιβάλλοντος μεταγλώττισης:
$ export ARCH = arm64
$ export CROSS_COMPILE = $ (pwd) /../ toolchain/bin/aarch64-linux-gnu-
Σε αυτό το σημείο, πρέπει να προσθέσουμε τις μονάδες στο USB Ethernet CDC στον πυρήνα. Το έκανα πριν και μπορείτε να το πάρετε στο τέλος αυτού του βήματος. Αφαίρεσα μερικά κομμάτια αλλά λειτουργεί.
Πριν από τη μεταγλώττιση, διορθώστε ένα σφάλμα πυρήνα σε προγράμματα οδήγησης/mmc/host/sdhci-msm.c αλλάζοντας το struct στη γραμμή 1150 σε:
static const struct sdhci_ops sdhci_msm_ops = {
.reset = sdhci_reset,.set_clock = sdhci_msm_set_clock,.get_min_clock = sdhci_msm_get_min_clock,.get_max_clock = sdhci_msm_get_max_clock,.set_bus_width = sdhci_set_bus_width,.set_uhs_signaling = sdhci_msm_set_uhs_signaling,.voltage_switch = sdhci_msm_voltage_switch, #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS.write_w = sdhci_msm_write_w, #endif}?
Αποσυμπίεση configfile.zip, αντιγραφή αρχείου.config στον κατάλογο πυρήνα, δημιουργία πυρήνα, μονάδες και εγκατάσταση μονάδων σε έναν κατάλογο:
$ make -j $ (nproc) Image.gz dtbs
module $ make -j $ (nproc) $ make modules_install INSTALL_MOD_PATH =../db410c -modules
Παραπομπή: 96Boards Documentation
Βήμα 3: Ανακατασκευάστε το Boot.img στο HOST
Σε αυτό το βήμα, πρέπει να ανοίξουμε την εικόνα initrd, να βάλουμε τις ενότητες που είναι ενσωματωμένες στην εικόνα, να διαμορφώσουμε το σύστημα για να ξεκινήσει αυτές τις ενότητες και να ξαναφτιάξουμε ένα initrd.img με μια νέα γραμμή εντολών πυρήνα για εκκίνηση του απομακρυσμένου συστήματος αρχείων.
Έτσι, πρώτα, πρέπει να κατεβάσουμε το initrd.img από τον ιστότοπο linaro:
cd $..
$ mkdir inird_nfs $ cd initrd_nfs $ wget -O ramdisk.img
Τώρα, μετά τη λήψη, αποσυμπιέστε και εξαγάγετε το initrd:
$ zcat ramdisk.img | cpio -idmv
Σε αυτόν τον κατάλογο, έχουμε το σύστημα αρχείων ρίζας που χρησιμοποιείται από τον πυρήνα κατά την προετοιμασία, οπότε θα διαμορφώσουμε μονάδες USB Ethernet CDC και απομακρυσμένες παραμέτρους NFS, όπως IP διακομιστή NFS και ethernet (usb) που απαιτούνται εδώ.
Τώρα, ας διαμορφώσουμε μερικά αρχεία:
conf/initramfs.conf:
ΕΝΟΤΗΤΕΣ = οι περισσότερες
BUSYBOX = auto COMPRESS = gzip DEVICE = usb0 NFSROOT = auto RUNSIZE = 10%
Δημιουργήστε τον κατάλογο init-premount στα σενάρια καταλόγου/
$ mkdir δέσμες ενεργειών/init-premount
και προσθέστε τα αρχεία σε αυτόν τον μόλις δημιουργημένο κατάλογο:
ΣΕΙΡΑ
/scripts/init-premount/usb "$@"
[-e /conf/param.conf] &&. /conf/param.conf
usb
#!/bin/sh
PREREQ = "" prereqs () {echo "$ PREREQ"} case $ 1 in # get # pre-requisites prereqs) prereqs exit 0;; esac modprobe usb_f_ecm modprobe libcomposite modprobe usb_f_rndis modprobe g_ether
Μην ξεχάσετε να χρησιμοποιήσετε το chmod στο αρχείο usb για να το κάνετε εκτελέσιμο:
$ chmod +x scripts/init-premount/usb
Τώρα, αντιγράψτε όλο τον κατάλογο με τις ενότητες από db410c-modules (ΒΗΜΑ 2) σε lib/modules στο initrd:
$ cp -R../db410-modules/lib usr/
Καταργήστε όλα τα αρχεία στο lib/modules/4.14.96-xxxx-dirty εκτός από όλα τα modules αρχείων.* Και αυτή τη λίστα αρχείων:
kernel/drivers/usb/gadget/legacy/g_ether.ko
kernel/drivers/usb/gadget/legacy/g_mass_storage.ko kernel/drivers/usb/gadget/legacy/g_cdc.ko kernel/drivers/usb/gadget/legacy/g_serial.ko kernel/drivers/usb/gadget/function/usb_f_mass_storage.ko kernel/drivers/usb/gadget/function/usb_f_acm.ko kernel/drivers/usb/gadget/function/u_ether.ko kernel/drivers/usb/gadget/function/usb_f_obex.ko kernel/drivers/usb/gadget/function /usb_f_serial.ko kernel/drivers/usb/gadget/function/usb_f_ecm.ko kernel/drivers/usb/gadget/function/usb_f_rndis.ko kernel/drivers/usb/gadget/function/u_serial.ko kernel/drivers/usb/gadget /function/usb_f_fs.ko kernel/drivers/usb/gadget/function/usb_f_ecm_subset.ko kernel/drivers/usb/gadget/libcomposite.ko
Αυτά τα αρχεία είναι όλες οι ενότητες που απαιτούνται για την εκκίνηση USB Ethernet CDC.
Τέλος, επανασυσκευάστε και συμπιέστε την αρχική εικόνα:
$ εύρεση. | cpio -o -H newc | gzip -9>../kernel/initrd_nfs.img
Τουλάχιστον, η εικόνα του πυρήνα και το αρχείο DTB πρέπει να συσκευαστούν σε μια εικόνα εκκίνησης Android. Μια τέτοια εικόνα μπορεί να δημιουργηθεί με το εργαλείο abootimg.
Ας στον κατάλογο πυρήνα και χρησιμοποιήστε την παρακάτω εντολή για να δημιουργήσετε εικόνα και να προσθέσετε DTB στη συμπιεσμένη εικόνα πυρήνα:
$ cd../kernel
$ cat arch/$ ARCH/boot/Image.gz arch/$ ARCH/boot/dts/qcom/apq8016-sbc.dtb> Image.gz+dtb
Και τέλος, δημιουργήστε την εικόνα εκκίνησης (εδώ τα rootfs μας βρίσκονται ένα απομακρυσμένο διαμέρισμα στο 10.42.0.1)
abootimg -create boot -db410c.img -k Image.gz+dtb -r initrd_nfs.img -c pagesize = 2048
-c kerneladdr = 0x80008000 -c ramdiskaddr = 0x81000000 -c cmdline = "root =/dev/nfs nfsroot = 10.42.0.1:/srv/nfs/rootfs ip = 10.42.0.2: 10.42.0.1: 10.42.0.1: 255.255.255.0: db410c: usb0: off rw rootwait κονσόλα = tty0 κονσόλα = ttyMSM0, 115200n8"
Βιβλιογραφικές αναφορές:
- https://access.redhat.com/solutions/24029
- 96 Τεκμηρίωση πινάκων
Βήμα 4: Δημιουργία συστήματος αρχείων ρίζας στο HOST
Τώρα, έχουμε μια νέα εικόνα εκκίνησης για την ενημέρωση του dragonboard 410c. Αλλά χρειαζόμαστε ένα ριζικό σύστημα αρχείων στον απομακρυσμένο διακομιστή για την εκκίνηση μονάδων, υπηρεσιών και εφαρμογών. Σε αυτό το βήμα, θα δημιουργήσουμε έναν κοινόχρηστο κατάλογο στον κεντρικό υπολογιστή για να αποθηκεύσουμε όλα αυτά τα δεδομένα. Με αυτόν τον τρόπο, ας κατεβάσουμε ένα σύστημα αρχείων rootfs από τον ιστότοπο linaro με την ίδια έκδοση που χρησιμοποιείται στο initrd. Επιστρέψτε λοιπόν έναν κατάλογο και κατεβάστε linaro-developer rootfs image με την έκδοση 431.
cd $..
$ wget
Αποσυμπίεση αυτού του αρχείου
$ unzip dragonboard-410c-sdcard-developer-buster-431.zip
Χρησιμοποιώντας αυτό το αρχείο, ας γράψουμε όλη την εικόνα σε μια κάρτα sdc για να έχουμε πρόσβαση σε όλα τα διαμερίσματα και να αντιγράψουμε αρχεία rootfs. Επομένως, βεβαιωθείτε ότι έχουν δημιουργηθεί αντίγραφα ασφαλείας των δεδομένων από την uSDCard, επειδή όλα τα στοιχεία της SDCard θα χαθούν.
Για να βρείτε το όνομα της συσκευής SDCard, αφαιρέστε την SDCard και εκτελέστε την ακόλουθη εντολή:
$ lsblk
Αποθηκεύστε στο μυαλό σας όλα τα αναγνωρισμένα ονόματα δίσκων. Τώρα εισάγετε την κάρτα SDC, περιμένετε λίγο και εκτελέστε ξανά την εντολή:
$ lsblk
Σημειώστε τον πρόσφατα αναγνωρισμένο δίσκο. Αυτή θα είναι η κάρτα SDCard σας. Θυμηθείτε το όνομά σας και αλλάξτε την παράμετρο "of =" για το όνομα της συσκευής SDCard και βεβαιωθείτε ότι χρησιμοποιείτε το όνομα της συσκευής χωρίς το διαμέρισμα, π.χ.: /dev /mmcblk0
$ sudo dd if = dragonboard-410c-sdcard-developer-buster-431.img of =/dev/XXX bs = 4M oflag = κατάσταση συγχρονισμού = πρόοδος
Σημειώσεις:
- Αυτή η εντολή θα χρειαστεί λίγο χρόνο για να εκτελεστεί. Κάντε υπομονή και αποφύγετε την παραποίηση του τερματικού μέχρι να ολοκληρωθεί η διαδικασία.
- Μόλις αναβοσβήνει η κάρτα SD, αφαιρέστε την από τον κεντρικό υπολογιστή.
Αναφορά: Τεκμηρίωση 96 πινάκων
Βήμα 5: Δημιουργία διακομιστή NFS στο HOST και αντιγραφή αρχείων
Σε αυτό το σημείο, έχουμε μια εικόνα εκκίνησης που πρέπει να μεταφερθεί στο dragonboard 410c και μια κάρτα SDCard με σύστημα αρχείων rootfs για τις μονάδες, τις υπηρεσίες και τις εφαρμογές μας. Το επόμενο βήμα είναι να δημιουργήσετε έναν απομακρυσμένο κατάλογο για να συνδέσετε το USB Ethernet DEVICE μεταξύ τους με το σύστημα αρχείων HOST rootfs. Αυτό μπορεί να γίνει χρησιμοποιώντας ένα πακέτο από το Ubuntu με όνομα nfs-kernel-server.
Αυτό το πακέτο εγκαθιστά μια υπηρεσία NFS στο Ubuntu που επιτρέπει την κοινή χρήση ορισμένων καταλόγων για ορισμένες συσκευές στο δίκτυο, μπορούμε να διαμορφώσουμε τον κατάλογο που θα χρησιμοποιηθεί για κάθε συσκευή χρησιμοποιώντας τη δική σας IP.
Έτσι, ας εγκαταστήσουμε το πακέτο και το διαμορφώσουμε.
$ sudo apt-get install nfs-kernel-server
Η υπηρεσία NFS ξεκινά αυτόματα. Για τον έλεγχο των υπηρεσιών NFS χρησιμοποιήστε:
$ sudo service nfs-kernel-server επανεκκίνηση // για επανεκκίνηση ή χρήση "διακοπή" ή "εκκίνηση" όπως απαιτείται.
Για να ελέγξετε την κατάσταση της υπηρεσίας NFS από τη γραμμή εντολών, χρησιμοποιήστε:
$ sudo service nfs-kernel-server status
nfsd τρέχει // Η υπηρεσία είναι επάνω nfsd δεν εκτελείται // Η υπηρεσία είναι κάτω
Τώρα, ας δημιουργήσουμε έναν κορυφαίο κατάλογο /srv /nfs και δημιουργήστε έναν υποκατάλογο κάτω από αυτόν για κάθε απαιτούμενο σύστημα αρχείων ρίζας εγκατεστημένο στο NFS. Εδώ συμπεριλαμβάνουμε ένα κοινό σύστημα αρχείων ρίζας για να διατηρήσουμε το δικό μας ριζικό σύστημα αρχείων:
$ sudo mkdir -p /srv /nfs
$ sudo mkdir -p/srv/nfs/rootfs
Τώρα, ο διακομιστής NFS απαιτεί το /etc /export να διαμορφωθεί σωστά, για να ελέγξει την πρόσβαση σε κάθε κατάλογο συστήματος αρχείων NFS σε συγκεκριμένους κεντρικούς υπολογιστές. Σε αυτήν την περίπτωση, οι κεντρικοί υπολογιστές προσδιορίζονται από τη διεύθυνση IP τους. Έτσι, για κάθε σύστημα αρχείων ρίζας που δημιουργείται, προσθέστε τη γραμμή ελέγχου εξαγωγής στο /etc /export, προσαρμόζοντας την τοπική σας διεύθυνση IP και το σύστημα ονοματοδοσίας καταλόγου, εάν είναι απαραίτητο. Σε αυτό το σεμινάριο, χρησιμοποιούμε πάντα αυτό:
/srv/nfs/rootfs 10.42.0.2 (rw, sync, no_root_squash, no_subtree_check)
Τοποθετήστε ξανά την κάρτα SDC, τοποθετήστε την και αντιγράψτε όλα τα συστήματα αρχείων rootfs στο/srv/nfs/rootfs, επανεκκινήστε την υπηρεσία NFS για να ενημερώσετε τον κατάλογο χρησιμοποιώντας νέα αντιγραμμένα αρχεία.
Επιπλέον, πρέπει να αντιγράψουμε τα νέα αρχεία μονάδων στο σύστημα αρχείων rootfs επειδή έχουμε συντάξει τον πυρήνα στο βήμα 2. Έτσι, αντιγράψτε όλους τους καταλόγους σε ules/db410c-modules/στο/srv/nfs/rootfs.
$ sudo cp -R ~/db410c -modules/*/srv/nfs/rootfs/
Βεβαιωθείτε ότι αυτοί οι κατάλογοι είναι ορατοί από την υπηρεσία NFS. Είτε:
$ sudo exportfs -a
Αναφορά: Σύστημα αρχείων ρίζας TFTP/NFS
Βήμα 6: Ενημέρωση εικόνας εκκίνησης Dragonboard 410c και διαμόρφωση διεπαφών δικτύου
Κάναμε από νωρίς όλα τα βήματα για την υλοποίηση ενός απομακρυσμένου συστήματος αρχείων rootfs, τώρα χρειαζόμαστε ενημέρωση της εικόνας εκκίνησης μέσα στο dragonboard 410c, για αυτό, συνδέστε το δικό σας καλώδιο USB στον υπολογιστή και στον σύνδεσμο dragonboard uUSB. Βεβαιωθείτε λοιπόν ότι το fastboot έχει ρυθμιστεί στον κεντρικό υπολογιστή, αν δεν το εγκαταστήσετε χρησιμοποιώντας:
$ sudo apt εγκατάσταση fastboot
Τώρα για να ενημερώσετε την εικόνα, ξεκινήστε το dragonboard σε λειτουργία γρήγορης εκκίνησης ακολουθώντας αυτά τα βήματα:
- Πατήστε και κρατήστε πατημένο το κουμπί Vol (-) στο DragonBoard 410c, αυτό είναι το κουμπί S4. Το DragonBoard ™ 410c δεν πρέπει ακόμα να είναι ενεργοποιημένο
- Κρατώντας πατημένο το κουμπί Vol (-), ενεργοποιήστε το DragonBoard 410c συνδέοντάς το
- Μόλις το DragonBoard 410c είναι συνδεδεμένο στην τροφοδοσία, αφήστε το πάτημα του κουμπιού Vol (-).
- Περιμένετε για περίπου 20 δευτερόλεπτα.
- Ο πίνακας πρέπει να εκκινήσει σε λειτουργία γρήγορης εκκίνησης.
Από το συνδεδεμένο παράθυρο τερματικού μηχανήματος κεντρικού υπολογιστή, εκτελέστε τις ακόλουθες εντολές:
$ sudo συσκευές fastboot
Συνήθως θα εμφανιστεί όπως παρακάτω
de82318 fastboot
Σε αυτό το σημείο θα πρέπει να συνδεθείτε στο DragonBoard 410c με καλώδιο USB σε microUSB. Το DragonBoard 410c θα πρέπει να εκκινήσει σε λειτουργία γρήγορης εκκίνησης και να είναι έτοιμο να αναβοσβήνει με τις κατάλληλες εικόνες. Ας ενημερώσουμε την εικόνα εκκίνησης με τη δική μας εικόνα εκκίνησης:
$ sudo fastboot flash boot ~/db410remoteroot/kernel/initrd_nfs.img
Και, επανεκκινήστε τον πίνακα
$ sudo fastboot επανεκκίνηση
Τώρα, το HOST σας θα εντοπίσει μια νέα διεπαφή που ονομάζεται usb0, αλλά δεν έχει ακόμη IP. Έτσι, προσθέστε μια στατική IP σε αυτήν τη διεπαφή χρησιμοποιώντας:
$ sudo ifconfig usb0 10.42.0.1 μάσκα δικτύου 255.255.255.0 επάνω
Or πληκτρολογήστε "Διαμόρφωση" στο HOST, στο στοιχείο "δίκτυο", ορίζοντας το USB Ethernet μια στατική IP στη συγκεκριμένη διεπαφή.
Τώρα, κάντε επανεκκίνηση του dragonboard και επαληθεύστε την εκκίνηση του συστήματος, προσπαθώντας να συνδεθείτε χρησιμοποιώντας το ssh:
$ ssh [email protected]
Βιβλιογραφικές αναφορές:
- Τεκμηρίωση 96 πινάκων
- HowtoForge - Θέμα 6