Inhaltsverzeichnis:
- Schritt 1: Anforderungen
- Schritt 2: Konfigurieren des Hosts zum Erstellen von Kernel und Erstellen des Kernels im HOST
- Schritt 3: Boot.img im HOST neu erstellen
- Schritt 4: Root-Dateisystem im HOST erstellen
- Schritt 5: Server-NFS im HOST erstellen und Dateien kopieren
- Schritt 6: Dragonboard 410c Boot-Image aktualisieren und Netzwerkschnittstellen konfigurieren
Video: Zugriff auf das Remote-Root-Dateisystem mit DB410 als Ethernet-Dongle - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:19
Ziele:
- Installieren Sie die Toolchain und kompilieren Sie den Kernel neu, um die Unterstützung für USB-Ethernet-CDC-Gadgets einzufügen;
- Erstellen Sie boot.img von Linaro neu, um USB-Ethernet-CDC zu booten;
- Erstellen Sie einen NFS-Server, um das Root-Dateisystem zu hosten;
- IP-Konfiguration in DEVICE und HOST.
Schritt 1: Anforderungen
Sie benötigen die folgenden Elemente:
- Ein DragonBoard™ 410c (hier als DEVICE bezeichnet);
- Ein PC mit Ubuntu 16.04.3 aktualisiert (hier HOST genannt) mit Internetverbindung und SDCard-Steckplatz;
- Eine saubere Installation der Linaro-Entwicklerversion 431 - Link: Snapshot Linaro Debian v431
- Ein HDMI-Monitor;
- Eine USB-Tastatur;
- Eine 8-GB-SD-Karte;
- Ein USB-Kabel, uUSB USB, um das GERÄT mit dem HOST zu verbinden.
Schritt 2: Konfigurieren des Hosts zum Erstellen von Kernel und Erstellen des Kernels im HOST
Zuerst erstellen wir alle Verzeichnisse, bevor wir fortfahren. So:
$ cd ~
$ mkdir db410remoteroot $ cd db410remoteroot $ mkdir Toolchain $ mkdir db410c-modules
Leider unterstützt der von Linaro verwendete Linux-Kernel (Version 431) kein USB-Ethernet-Gadget, daher muss der Linux-Kernel für diese spezielle Version neu erstellt werden. Laden Sie die Linaro-Toolchain herunter, um den Linux-Kernel auf Dragonboard410c von einem x86-Hostcomputer zu erstellen und bereitzustellen.
$ wget
$ tar -xf gcc-*-x86_64_aarch64-linux-gnu.tar.xz -C./toolchain --strip-components=1
Installieren Sie nun Pakete, die zum Erstellen des Kernels benötigt werden:
$ sudo apt update && sudo apt-get install git build-essential abootimg kernel-package fakeroot libncurses5-dev libssl-dev ccache
Holen Sie sich die Linux-Kernel-Quelle Klonen Sie das Linux-Repository des Qualcomm-Landing-Teams:
$ git-Klon
$ cd kernel $ git checkout origin/release/qcomlt-4.14 -b my-custom-4.14
Legen Sie nun die Umgebungsvariablen für die Kompilierung fest:
$ export ARCH=arm64
$ export CROSS_COMPILE=$(pwd)/../toolchain/bin/aarch64-linux-gnu-
An dieser Stelle müssen wir die Module zu USB Ethernet CDC im Kernel hinzufügen. Ich habe das zuvor getan und Sie können dies am Ende dieses Schritts erhalten. Ich habe einige Elemente entfernt, aber es funktioniert.
Korrigieren Sie vor dem Kompilieren einen Kernel-Fehler in driver/mmc/host/sdhci-msm.c und ändern Sie die Struktur in der Zeile 1150 in:
statisches Konstrukt 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};
Entpacken Sie configfile.zip, kopieren Sie die.config-Datei in das Kernel-Verzeichnis, bauen Sie den Kernel, die Module und installieren Sie die Module in einem Verzeichnis:
$ make -j$(nproc) Image.gz dtbs
$ make -j$(nproc) modules $ make modules_install INSTALL_MOD_PATH=../db410c-modules
Referenz: 96Boards-Dokumentation
Schritt 3: Boot.img im HOST neu erstellen
In diesem Schritt müssen wir das initrd-Image öffnen, die eingebauten Module in das Image einfügen, das System so konfigurieren, dass es diese Module startet, und eine initrd.img mit einer neuen Kernel-Befehlszeile neu erstellen, um das Root-Dateisystem remote zu booten.
Zuerst müssen wir initrd.img von der Linaro-Website herunterladen:
$ cd..
$ mkdir inird_nfs $ cd initrd_nfs $ wget -O ramdisk.img
Entpacken und extrahieren Sie nun nach dem Download die initrd:
$ zcat ramdisk.img | cpio -idmv
In diesem Verzeichnis haben wir das Root-Dateisystem, das vom Kernel bei der Initialisierung verwendet wird, daher konfigurieren wir USB-Ethernet-CDC-Module und NFS-Remote-Parameter wie NFS-Server-IP und Ethernet (usb), die hier benötigt werden.
Lassen Sie uns nun einige Dateien konfigurieren:
conf/initramfs.conf:
MODULE=die meisten
BUSYBOX=auto COMPRESS=gzip DEVICE=usb0 NFSROOT=auto RUNSIZE=10%
Erstellen Sie das Verzeichnis init-premount im Verzeichnis scripts/
$ mkdir scripts/init-premount
und fügen Sie die Dateien in diesem gerade erstellten Verzeichnis hinzu:
AUFTRAG
/scripts/init-premount/usb "$@"
[-e /conf/param.conf] &&. /conf/param.conf
USB
#!/bin/sh
PREREQ="" prereqs() { echo "$PREREQ" } case $1 in # Voraussetzungen abrufen prereqs) prereqs exit 0;; esac modprobe usb_f_ecm modprobe libcomposite modprobe usb_f_rndis modprobe g_ether
Vergessen Sie nicht, chmod in der USB-Datei zu verwenden, um sie ausführbar zu machen:
$ chmod +x scripts/init-premount/usb
Kopieren Sie nun alle Verzeichnisse mit den Modulen von db410c-modules (STEP 2) nach lib/modules in initrd:
$ cp -R../db410-modules/lib usr/
Entfernen Sie alle Dateien in lib/modules/4.14.96-xxxx-dirty außer allen Dateien module.* und dieser Dateiliste:
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
Diese Dateien sind alle Module, die zum Starten von USB Ethernet CDC benötigt werden.
Zum Schluss das initrd-Image neu packen und komprimieren:
$ finden. | cpio -o -H newc | gzip -9 >../kernel/initrd_nfs.img
Zumindest müssen das Kernel-Image und die DTB-Datei in ein Android-Boot-Image gepackt werden. Ein solches Image kann mit einem Bootimg-Tool erstellt werden.
Lassen Sie uns in das Kernel-Verzeichnis gehen und den folgenden Befehl verwenden, um das Image zu erstellen und DTB in das komprimierte Kernel-Image anzuhängen:
$ cd../kernel
$ cat arch/$ARCH/boot/Image.gz arch/$ARCH/boot/dts/qcom/apq8016-sbc.dtb > Image.gz+dtb
Und schließlich das Boot-Image generieren (hier befindet sich unser rootfs auf einer Remote-Partition in 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 console=tty0 console=ttyMSM0, 115200n8"
Verweise:
- https://access.redhat.com/solutions/24029
- 96Boards-Dokumentation
Schritt 4: Root-Dateisystem im HOST erstellen
Jetzt haben wir ein neues Boot-Image, um das Dragonboard 410c zu aktualisieren. Aber wir brauchen ein Root-Dateisystem im Remote-Server, um Module, Dienste und Anwendungen zu booten. In diesem Schritt erstellen wir ein freigegebenes Verzeichnis im Host, um all diese Daten zu speichern. Auf diese Weise laden wir ein rootfs-Dateisystem von der Linaro-Site mit derselben Version herunter, die in initrd verwendet wird. Gehen Sie also ein Verzeichnis zurück und laden Sie das Rootfs-Image des Linaro-Entwicklers mit Version 431 herunter.
$ cd..
$ wget
Entpacken Sie diese Datei
$ Dragonboard-410c-sdcard-developer-buster-431.zip entpacken
Mit dieser Datei schreiben wir alle Bilder auf eine SD-Karte, um auf alle Partitionen zuzugreifen und Rootfs-Dateien zu kopieren. Stellen Sie also sicher, dass die Daten von der uSDCard gesichert werden, da alles auf der SDCard verloren geht.
Um Ihren SDCard-Gerätenamen zu finden, entfernen Sie die SDCard und führen Sie den folgenden Befehl aus:
$ lsblk
Speichern Sie alle erkannten Festplattennamen im Kopf. Legen Sie nun die SDCard ein, warten Sie einen Moment und führen Sie den Befehl erneut aus:
$ lsblk
Beachten Sie die neu erkannte Festplatte. Dies wird Ihre SD-Karte sein. Merken Sie sich Ihren Namen und ändern Sie den Parameter "of=" für Ihren SDCard-Gerätenamen und verwenden Sie den Gerätenamen ohne die Partition, z. B.: /dev/mmcblk0
$ sudo dd if=dragonboard-410c-sdcard-developer-buster-431.img of=/dev/XXX bs=4M oflag=sync status=progress
Anmerkungen:
- Die Ausführung dieses Befehls dauert einige Zeit. Seien Sie geduldig und vermeiden Sie Manipulationen am Terminal, bis der Vorgang abgeschlossen ist.
- Sobald die SD-Karte mit dem Flashen fertig ist, entfernen Sie sie vom Host-Computer.
Referenz: 96boards Dokumentation
Schritt 5: Server-NFS im HOST erstellen und Dateien kopieren
An dieser Stelle haben wir ein Boot-Image, das in Dragonboard 410c geflasht wird, und eine SD-Karte mit einem Rootfs-Dateisystem für unsere Module, Dienste und Anwendungen. Der nächste Schritt besteht darin, ein Remote-Verzeichnis zu erstellen, um das USB-Ethernet-GERÄT mit dem HOST-rootfs-Dateisystem mitguther zu verbinden. Dies kann mit einem Paket von Ubuntu namens nfs-kernel-server erfolgen.
Dieses Paket installiert einen NFS-Dienst in Ubuntu, der es ermöglicht, einige Verzeichnisse für einige Geräte im Netzwerk freizugeben. Wir können konfigurieren, welches Verzeichnis für jedes Gerät verwendet wird, indem Sie Ihre IP verwenden.
Also installieren wir das Paket und konfigurieren es.
$ sudo apt-get install nfs-kernel-server
Der NFS-Dienst startet automatisch. So steuern Sie die Verwendung von NFS-Diensten:
$ sudo service nfs-kernel-server restart // um neu zu starten, oder verwenden Sie 'stop' oder 'start' nach Bedarf.
Um den Status des NFS-Dienstes über die Befehlszeile zu überprüfen, verwenden Sie:
$ sudo service nfs-kernel-server status
nfsd läuft // Dienst ist aktiv nfsd läuft nicht // Dienst ist inaktiv
Lassen Sie uns nun ein oberstes Verzeichnis /srv/nfs erstellen und ein Unterverzeichnis darunter für jedes benötigte NFS-gemountete Root-Dateisystem erstellen. Hier fügen wir ein gemeinsam genutztes Root-Dateisystem ein, um unser Root-Dateisystem beizubehalten:
$ sudo mkdir -p /srv/nfs
$ sudo mkdir -p /srv/nfs/rootfs
Jetzt erfordert der NFS-Server, dass /etc/exports richtig konfiguriert ist, um den Zugriff auf jedes NFS-Dateisystemverzeichnis für bestimmte Hosts zu steuern. In diesem Fall werden die Hosts anhand ihrer IP-Adresse identifiziert. Fügen Sie also für jedes erstellte Root-Dateisystem die Exportkontrollzeile zu /etc/exports hinzu und passen Sie gegebenenfalls Ihre lokale IP-Adresse und das Verzeichnisnamensschema an. In diesem Tutorial verwenden wir immer Folgendes:
/srv/nfs/rootfs 10.42.0.2(rw, sync, no_root_squash, no_subtree_check)
Legen Sie Ihre SD-Karte erneut ein, mounten Sie sie und kopieren Sie das gesamte Rootfs-Dateisystem nach /srv/nfs/rootfs, starten Sie den NFS-Dienst neu, um das Verzeichnis mit den neu kopierten Dateien zu aktualisieren.
Außerdem müssen wir die neuen Moduldateien in das Rootfs-Dateisystem kopieren, da wir den Kernel in Schritt 2 kompiliert haben. Kopieren Sie also alle Verzeichnisse in ~/db410c-modules/ nach /srv/nfs/rootfs.
$ sudo cp -R ~/db410c-modules/* /srv/nfs/rootfs/
Stellen Sie sicher, dass diese Verzeichnisse vom NFS-Dienst sichtbar gemacht werden. Entweder:
$ sudo exportfs -a
Referenz: TFTP/NFS Root-Dateisystem
Schritt 6: Dragonboard 410c Boot-Image aktualisieren und Netzwerkschnittstellen konfigurieren
Wir haben früh alle Schritte unternommen, um ein Remote-Rootfs-Dateisystem zu implementieren, jetzt müssen wir das Boot-Image in Dragonboard 410c aktualisieren, dafür schließen Sie Ihr USB-Kabel an den PC und den Dragonboard-uUSB-Anschluss an. Stellen Sie also sicher, dass Fastboot auf dem Host-Computer eingerichtet ist, wenn nicht mit:
$ sudo apt installiere fastboot
Um nun das Image zu aktualisieren, starten Sie das Dragonboard in den Fastboot-Modus, indem Sie die folgenden Schritte ausführen:
- Halten Sie die Vol (-)-Taste am DragonBoard 410c gedrückt, dies ist die S4-Taste. DragonBoard™ 410c sollte immer noch NICHT eingeschaltet sein
- Halten Sie die Lautstärketaste (-) gedrückt und schalten Sie das DragonBoard 410c ein, indem Sie es einstecken
- Sobald das DragonBoard 410c an das Stromnetz angeschlossen ist, lassen Sie die Lautstärketaste (-) los.
- Warten Sie etwa 20 Sekunden.
- Board sollte im Fastboot-Modus booten.
Führen Sie im Terminalfenster des verbundenen Hostcomputers die folgenden Befehle aus:
$ sudo Fastboot-Geräte
Normalerweise wird es wie folgt angezeigt
de82318 Fastboot
Zu diesem Zeitpunkt sollten Sie mit einem USB-zu-Micro-USB-Kabel mit Ihrem DragonBoard 410c verbunden sein. Ihr DragonBoard 410c sollte im Fastboot-Modus gebootet und bereit sein, mit den entsprechenden Images geflasht zu werden. Lassen Sie uns das Boot-Image mit unserem Boot-Image aktualisieren:
$ sudo fastboot flash boot ~/db410remoteroot/kernel/initrd_nfs.img
Und starte das Board neu
$ sudo Fastboot-Neustart
Jetzt erkennt Ihr HOST eine neue Schnittstelle namens usb0, die jedoch noch keine IP hat. Fügen Sie dieser Schnittstelle also eine statische IP hinzu, indem Sie Folgendes verwenden:
$ sudo ifconfig usb0 10.42.0.1 Netzmaske 255.255.255.0 up
Oder geben Sie in "Konfiguration" auf dem HOST im Punkt "Netzwerk" ein und setzen Sie USB-Ethernet eine statische IP für diese Schnittstelle.
Starten Sie nun das Dragonboard erneut und überprüfen Sie den Systemstart, indem Sie versuchen, eine Verbindung mit ssh herzustellen:
$ ssh [email protected]
Verweise:
- 96boards-Dokumentation
- HowtoForge - Artikel 6
Empfohlen:
So schalten Sie das GPS auf ein anderes Gerät um – wikiHow
So schalten Sie das GPS auf verschiedene Geräte um: Der Vorgang besteht darin, das GPS von der Kabine des Mähdreschers zu nehmen, es auf die Traktorkabine zu setzen, das Display vom Mähdrescher auszuhängen und in den Traktor einzubauen. Es werden keine Werkzeuge benötigt, um diesen Vorgang abzuschließen, und seien Sie vorsichtig beim Herumklettern auf Geräten
Aktualisieren Sie das Zen Micro 5 GB auf 8 GB günstig – wikiHow
Rüsten Sie das Zen Micro 5 GB auf 8 GB auf dem Billig: Guten Tag! Ich bin heute hier, um Ihnen zu zeigen, wie ich mein Zen Micro auseinandergenommen, die 5 GB-Festplatte darin durch eine 8 GB-CF-Karte ersetzt, das Gerät wieder zusammengebaut und gelebt habe erzählen Sie davon. Warum sollten Sie das tun? Zwei Gründe: 1. Solid-State-Speicher bedeutet
Wir stellen vor: 'Deodorino' - das Infrarot-gesteuerte Arduino in einem leeren Deodorant-Stick. Klicken Sie auf das 1. Foto: 7 Schritte
Wir stellen vor: 'Deodorino' - das Infrarot-gesteuerte Arduino in einem leeren Deodorant-Stick. Klicken Sie auf das 1. Foto: Jetzt zum Detail
NODEMcu USB-Port funktioniert nicht? Laden Sie den Code mit USB auf das TTL(FTDI)-Modul in nur 2 Schritten hoch: 3 Schritte
NODEMcu USB-Port funktioniert nicht? Laden Sie den Code mit USB zum TTL (FTDI)-Modul in nur 2 Schritten hoch: Sie haben es satt, viele Drähte vom USB zum TTL-Modul an das NODEMcu anzuschließen. Befolgen Sie diese Anleitung, um den Code in nur 2 Schritten hochzuladen. Wenn der USB-Anschluss des NODEMcu funktioniert nicht, also keine Panik. Es ist nur der USB-Treiberchip oder der USB-Anschluss
Remote-SSH-Zugriff auf Raspberry Pi 2: 5 Schritte
Remote-SSH-Zugriff auf Raspberry Pi 2: Wollten Sie schon immer einen Raspberry Pi "im Feld" und trotzdem darauf zugreifen können? Hier ist eine einfache Möglichkeit, den Remote-SSH-Zugriff auf Ihren Raspberry Pi 2 (und auch andere Modelle) zu aktivieren. Es gibt zwar Lösungen, die ein VPN beinhalten oder einen Por