Toegang krijgen tot een extern rootbestandssysteem met behulp van DB410 als een Ethernet-dongle: 6 stappen
Toegang krijgen tot een extern rootbestandssysteem met behulp van DB410 als een Ethernet-dongle: 6 stappen
Anonim
Toegang krijgen tot een extern rootbestandssysteem met DB410 als een Ethernet-dongle
Toegang krijgen tot een extern rootbestandssysteem met DB410 als een Ethernet-dongle

Doelen:

  • Installeer toolchain en compileer de kernel opnieuw om ondersteuning voor USB Ethernet CDC Gadget in te voegen;
  • Maak boot.img opnieuw van Linaro om USB Ethernet CDC op te starten;
  • Maak een NFS-server om het rootbestandssysteem te hosten;
  • IP-configuratie in DEVICE en HOST.

Stap 1: Vereisten

Je hebt de volgende onderdelen nodig:

  1. Een DragonBoard™ 410c (hier DEVICE genoemd);
  2. Een pc met Ubuntu 16.04.3 bijgewerkt (hier HOST genoemd) met internetverbinding en SDCard-slot;
  3. Een schone installatie van Linaro-developer versie 431 - Link: Snapshot Linaro Debian v431
  4. Een HDMI-monitor;
  5. Een USB-toetsenbord;
  6. Een 8Gb SD-kaart;
  7. Een USB-kabel, uUSB USB om het APPARAAT op HOST aan te sluiten.

Stap 2: Host configureren om kernel te bouwen en kernel te bouwen in de HOST

Eerst maken we eerst alle mappen om door te gaan. Dus:

$ cd ~

$ mkdir db410remoteroot $ cd db410remoteroot $ mkdir toolchain $ mkdir db410c-modules

Helaas heeft de linux-kernel die wordt gebruikt door Linaro (versie 431) geen ondersteuning voor een USB Ethernet-gadget, daarom moet de Linux-kernel opnieuw worden opgebouwd voor deze specifieke versie. Download Linaro-toolchain om de Linux-kernel op Dragonboard410c te bouwen en te implementeren vanaf de x86-hostmachine.

$ wget

$ tar -xf gcc-*-x86_64_aarch64-linux-gnu.tar.xz -C./toolchain --strip-components=1

Installeer nu pakketten die nodig zijn om de kernel te bouwen:

$ sudo apt update && sudo apt-get install git build-essential abootimg kernel-package fakeroot libncurses5-dev libssl-dev ccache

Download Linux Kernel source Clone Qualcomm landing team Linux repository:

$ git-kloon

$ cd kernel $ git checkout origin/release/qcomlt-4.14 -b my-custom-4.14

Stel nu compilatieomgevingsvariabelen in:

$ export ARCH=arm64

$ export CROSS_COMPILE=$(pwd)/../toolchain/bin/aarch64-linux-gnu-

Op dit punt moeten we de modules toevoegen aan USB Ethernet CDC in de kernel. Ik heb dat eerder gedaan en je kunt dit aan het einde van deze stap krijgen. Ik heb wat itens verwijderd, maar het werkt.

Corrigeer, voordat u gaat compileren, een kernelbug in drivers/mmc/host/sdhci-msm.c en verander de struct in de regel 1150 in:

statische 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};

Decomprimeer configfile.zip, kopieer het.config-bestand naar de kerneldirectory, bouw de kernel, modules en installeer modules in een directory:

$ make -j$(nproc) Image.gz dtbs

$ make -j$(nproc) modules $ make modules_install INSTALL_MOD_PATH=../db410c-modules

Referentie: 96Boards-documentatie

Stap 3: Herbouw Boot.img in de HOST

In deze stap moeten we de initrd-afbeelding openen, de ingebouwde modules in de afbeelding plaatsen, het systeem configureren om die modules te starten en een initrd.img opnieuw opbouwen met een nieuwe kernel-opdrachtregel om het rootbestandssysteem op afstand op te starten.

Dus eerst moeten we initrd.img downloaden van de linaro-website:

$ cd..

$ mkdir inird_nfs $ cd initrd_nfs $ wget -O ramdisk.img

Nu, na het downloaden, decomprimeer en pak de initrd uit:

$ zcat ramdisk.img | cpio -idmv

In deze map hebben we het rootbestandssysteem dat door de kernel wordt gebruikt bij de initialisatie, dus we zullen USB Ethernet CDC-modules en NFS-remote parameters zoals NFS-server IP en ethernet (usb) die hier nodig zijn, configureren.

Laten we nu enkele bestanden configureren:

conf/initramfs.conf:

MODULES=meest

BUSYBOX=auto COMPRESS=gzip DEVICE=usb0 NFSROOT=auto RUNSIZE=10%

Maak de directory init-premount in de directory scripts/

$ mkdir-scripts/init-premount

en voeg de bestanden toe in deze zojuist gemaakte map:

VOLGORDE

/scripts/init-premount/usb "$@"

[-e /conf/param.conf] &&. /conf/param.conf

USB

#!/bin/sh

PREREQ="" prereqs() {echo "$PREREQ" } case $1 in # haal vereisten prereqs) prereqs exit 0;; esac modprobe usb_f_ecm modprobe libcomposiet modprobe usb_f_rndis modprobe g_ether

Vergeet niet om chmod in het usb-bestand te gebruiken om het uitvoerbaar te maken:

$ chmod +x scripts/init-premount/usb

Kopieer nu alle directory's met de modules van db410c-modules (STAP 2) naar lib/modules in initrd:

$ cp -R../db410-modules/lib usr/

Verwijder alle bestanden in lib/modules/4.14.96-xxxx-dirty behalve alle bestanden module.* en die lijst met bestanden:

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

Die bestanden zijn allemaal modules die nodig zijn om USB Ethernet CDC te starten.

Pak ten slotte de initrd-afbeelding opnieuw in en comprimeer deze:

$ vinden. | cpio -o -H nieuwc | gzip -9 >../kernel/initrd_nfs.img

De kernel-image en het DTB-bestand moeten in ieder geval in een Android-opstartimage worden verpakt. Een dergelijke afbeelding kan worden gegenereerd met de tool abootimg.

Laten we naar de kernelmap gaan en de onderstaande opdracht gebruiken om een afbeelding te bouwen en DTB toe te voegen aan de gecomprimeerde kernelafbeelding:

$ cd../kernel

$ cat arch/$ARCH/boot/Image.gz arch/$ARCH/boot/dts/qcom/apq8016-sbc.dtb > Image.gz+dtb

En tot slot, genereer de opstart-image (hier bevindt onze rootfs zich op een externe partitie 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"

Referenties:

  • https://access.redhat.com/solutions/24029
  • 96Boards-documentatie

Stap 4: Root-bestandssysteem maken in de HOST

Nu hebben we een nieuwe opstartimage om de dragonboard 410c bij te werken. Maar we hebben een rootbestandssysteem nodig in de externe server om modules, services en applicaties op te starten. In deze stap bouwen we een gedeelde map in de host om al deze gegevens op te slaan. Laten we op die manier een rootfs-bestandssysteem downloaden van de linaro-site met dezelfde versie die wordt gebruikt in initrd. Ga dus één map terug en download de linaro-developer rootfs-afbeelding met versie 431.

$ cd..

$ wget

Decomprimeer dit bestand

$ unzip dragonboard-410c-sdcard-developer-buster-431.zip

Laten we met dit bestand alle afbeeldingen op een sdcard schrijven om toegang te krijgen tot alle partities en rootfs-bestanden te kopiëren. Zorg er dus voor dat er een back-up wordt gemaakt van gegevens van de uSDCard, want alles op de SDCard gaat verloren.

Om uw SDCard-apparaatnaam te vinden, verwijdert u de SDCard en voert u de volgende opdracht uit:

$ lsblk

Bewaar alle herkende schijfnamen in uw gedachten. Plaats nu SDCard, wacht even en voer de opdracht opnieuw uit:

$ lsblk

Let op de nieuw herkende schijf. Dit wordt je SD-kaart. Onthoud uw naam en wijzig de parameter "of=" voor uw SDCard-apparaatnaam en zorg ervoor dat u de apparaatnaam gebruikt zonder de partitie, bijv.: /dev/mmcblk0

$ sudo dd if=dragonboard-410c-sdcard-developer-buster-431.img of=/dev/XXX bs=4M oflag=synchronisatiestatus=voortgang

Opmerkingen:

  • Deze opdracht zal enige tijd duren om uit te voeren. Wees geduldig en vermijd knoeien met de terminal totdat het proces is beëindigd.
  • Zodra de SD-kaart klaar is met knipperen, verwijdert u deze van de hostcomputer.

Referentie: 96boards-documentatie

Stap 5: Server-NFS maken in de HOST en bestanden kopiëren

Op dit punt hebben we een opstartimage die moet worden geflitst in dragonboard 410c en een SD-kaart met een rootfs-bestandssysteem voor onze modules, services en applicaties. De volgende stap is het creëren van een externe map om het USB Ethernet DEVICE te verbinden met het HOST rootfs-bestandssysteem. Dat kan met een pakket van Ubuntu genaamd nfs-kernel-server.

Dit pakket installeert een NFS-service in Ubuntu die het mogelijk maakt om enkele mappen voor sommige apparaten op het netwerk te delen. We kunnen configureren welke map voor elk apparaat zal worden gebruikt door uw IP te gebruiken.

Laten we het pakket dus installeren en configureren.

$ sudo apt-get install nfs-kernel-server

De NFS-service start automatisch. Gebruik voor het besturen van NFS-services:

$ sudo-service nfs-kernel-server restart // om opnieuw op te starten, of gebruik 'stop' of 'start' indien nodig.

Om de status van de NFS-service vanaf de opdrachtregel te controleren, gebruikt u:

$ sudo service nfs-kernel-server status

nfsd actief // Service is actief nfsd is niet actief // Service is uitgeschakeld

Laten we nu een topdirectory /srv/nfs maken en daaronder een subdirectory maken voor elk vereist NFS-gemount rootbestandssysteem. Hier voegen we een gedeeld rootbestandssysteem toe om ons rootbestandssysteem te behouden:

$ sudo mkdir -p /srv/nfs

$ sudo mkdir -p /srv/nfs/rootfs

Nu vereist de NFS-server dat /etc/exports correct is geconfigureerd om de toegang tot elke NFS-bestandssysteemdirectory tot specifieke hosts te regelen. In dit geval worden de hosts geïdentificeerd aan de hand van hun IP-adres. Dus, voor elk rootbestandssysteem dat wordt aangemaakt, voeg je de exportcontroleregel toe aan /etc/exports, en pas je indien nodig aan voor je lokale IP-adres en directorynaamschema. In deze tutorial gebruiken we altijd dat:

/srv/nfs/rootfs 10.42.0.2(rw, sync, no_root_squash, no_subtree_check)

Plaats uw SD-kaart opnieuw, koppel deze en kopieer alle rootfs-bestandssysteem naar /srv/nfs/rootfs, start de NFS-service opnieuw om de map bij te werken met nieuwe gekopieerde bestanden.

Bovendien moeten we de nieuwe modulebestanden naar het rootfs-bestandssysteem kopiëren omdat we de kernel in stap 2 hebben gecompileerd. Kopieer dus alle mappen in ~/db410c-modules/ naar /srv/nfs/rootfs.

$ sudo cp -R ~/db410c-modules/* /srv/nfs/rootfs/

Zorg ervoor dat deze mappen zichtbaar worden gemaakt door de NFS-service. Of:

$ sudo exportfs -a

Referentie: TFTP/NFS Root-bestandssysteem

Stap 6: Dragonboard 410c opstartimage bijwerken en netwerkinterfaces configureren

We hebben in een vroeg stadium alle stappen ondernomen om een extern rootfs-bestandssysteem te implementeren, nu moeten we de opstartinstallatiekopie in dragonboard 410c bijwerken, daarvoor sluit u de uwe USB-kabel aan op de pc en op de dragonboard uUSB-connector. Zorg er dus voor dat fastboot is ingesteld op de hostcomputer, zo niet installeer met:

$ sudo apt install fastboot

Om nu de afbeelding bij te werken, start u de dragonboard in fastboot-modus door deze stappen te volgen:

  • Houd de knop Vol (-) op de DragonBoard 410c ingedrukt, dit is de S4-knop. DragonBoard™ 410c mag nog steeds NIET worden ingeschakeld
  • Terwijl u de knop Vol (-) ingedrukt houdt, schakelt u de DragonBoard 410c in door deze aan te sluiten
  • Zodra DragonBoard 410c op de stroom is aangesloten, laat u de knop Vol (-) los.
  • Wacht ongeveer 20 seconden.
  • Board moet opstarten in fastboot-modus.

Voer vanuit het terminalvenster van de aangesloten hostmachine de volgende opdrachten uit:

$ sudo fastboot-apparaten

Meestal wordt het weergegeven zoals hieronder:

de82318 fastboot

Op dit punt zou u verbonden moeten zijn met uw DragonBoard 410c met een USB-naar-microUSB-kabel. Uw DragonBoard 410c moet worden opgestart in de fastboot-modus en klaar zijn om te worden geflitst met de juiste afbeeldingen. Laten we de opstartafbeelding bijwerken met de onze opstartafbeelding:

$ sudo fastboot flash boot ~/db410remoteroot/kernel/initrd_nfs.img

En herstart het bord

$ sudo fastboot reboot

Nu zal uw HOST een nieuwe interface met de naam usb0 detecteren, maar deze heeft nog geen IP. Voeg dus een statisch IP-adres toe aan deze interface met behulp van:

$ sudo ifconfig usb0 10.42.0.1 netmask 255.255.255.0 omhoog

Of voer in "Configuratie" op HOST, in het item "netwerk", USB Ethernet een statisch IP-adres in voor die interface.

Start nu het drakenbord opnieuw en verifieer het opstarten van het systeem, probeer verbinding te maken met ssh:

$ ssh [email protected]

Referenties:

  • 96boards documentatie
  • HowtoForge - Artikel 6