Indholdsfortegnelse:

Adgang til eksternt rodfilsystem ved hjælp af DB410 som ethernetdongle: 6 trin
Adgang til eksternt rodfilsystem ved hjælp af DB410 som ethernetdongle: 6 trin

Video: Adgang til eksternt rodfilsystem ved hjælp af DB410 som ethernetdongle: 6 trin

Video: Adgang til eksternt rodfilsystem ved hjælp af DB410 som ethernetdongle: 6 trin
Video: GPS-sporing til camping giver adgang til efterforskning og søgeoperationer 2024, November
Anonim
Adgang til eksternt rodfilsystem ved hjælp af DB410 som en Ethernet -Dongle
Adgang til eksternt rodfilsystem ved hjælp af DB410 som en Ethernet -Dongle

Mål:

  • Installer værktøjskæde og kompilér kernen igen for at indsætte USB Ethernet CDC Gadget -understøttelse;
  • Genskab boot.img fra Linaro for at starte USB Ethernet CDC;
  • Opret NFS -server til at være vært for rodfilsystem;
  • IP -konfiguration i ENHED og HOST.

Trin 1: Krav

Du skal bruge følgende itens:

  1. En DragonBoard ™ 410c (navngivet her ENHED);
  2. En pc, der bruger Ubuntu 16.04.3 opdateret (navngivet her HOST) med internetforbindelse og SDCard -slot;
  3. En ren installation af Linaro -udvikler version 431 - Link: Snapshot Linaro Debian v431
  4. En HDMI -skærm;
  5. Et USB -tastatur;
  6. Et 8 Gb SDCard;
  7. Et USB -kabel, uUSB USB til tilslutning af ENHEDEN på HOST.

Trin 2: Konfiguration af vært til at bygge kerne og bygge kerne i HOST

Først opretter vi alle mapper, før vi kan fortsætte. Så:

$ cd ~

$ mkdir db410remoteroot $ cd db410remoteroot $ mkdir værktøjskæde $ mkdir db410c-moduler

Desværre understøtter Linux -kerne, der bruges af Linaro (Version 431) ikke understøttelse af USB Ethernet -gadget, derfor skal Linux -kernen genopbygges til denne specifikke version. Download Linaro værktøjskæde til at bygge og implementere linux -kerne på Dragonboard410c fra x86 -værtsmaskine.

$ wget

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

Installer nu pakker, der er nødvendige for at bygge kernen:

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

Få Linux Kernel source Clone Qualcomm landing team Linux repository:

$ git klon

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

Indstil nu kompilationsmiljøvariabler:

$ eksport ARCH = arm64

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

På dette tidspunkt skal vi tilføje modulerne til USB Ethernet CDC i kernen. Jeg gjorde det før, og du kan få dette i slutningen af dette trin. Jeg fjernede nogle itens, men det virker.

Inden du kompilerer, skal du rette en kernefejl i drivers/mmc/host/sdhci-msm.c og ændre strukturen i linjen 1150 til:

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

Komprimér configfile.zip, kopier.config -fil til kernemappe, opbyg kerne, moduler og installer moduler i et bibliotek:

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

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

Reference: 96Boarddokumentation

Trin 3: Genopbyg Boot.img i HOST

I dette trin skal vi åbne initrd -billedet, placere modulerne, der er bygget inde i billedet, konfigurere systemet til at starte modulerne og genopbygge et initrd.img med en ny kernelkommandolinje for at starte root -filsystem eksternt.

Så først skal vi downloade initrd.img fra linaro -webstedet:

$ cd..

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

Nu, efter download, skal du komprimere og udpakke initrd:

$ zcat ramdisk.img | cpio -idmv

I dette bibliotek har vi rodfilsystemet, der bruges af kernen ved initialisering, så vi konfigurerer USB Ethernet CDC -moduler og NFS -fjernparametre som NFS -server -IP og ethernet (usb), der er nødvendige her.

Lad os nu konfigurere nogle filer:

conf/initramfs.conf:

MODULER = de fleste

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

Opret mappen init-premount i bibliotekets scripts/

$ mkdir scripts/init-premount

og tilføj filerne i disse netop oprettede bibliotek:

BESTILLE

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

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

usb

#!/bin/sh

PREREQ = "" prereqs () {echo "$ PREREQ"} case $ 1 i # få forudsætninger prereqs) prereqs exit 0;; esac modprobe usb_f_ecm modprobe libcomposite modprobe usb_f_rndis modprobe g_ether

Glem ikke at bruge chmod i usb -fil for at gøre den eksekverbar:

$ chmod +x scripts/init-premount/usb

Kopier nu alle biblioteker med modulerne fra db410c-moduler (TRIN 2) til lib/modules i initrd:

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

Fjern alle filer i lib/modules/4.14.96-xxxx-dirty undtagen alle filmoduler.* Og den filliste:

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

Disse filer er alle moduler, der er nødvendige for at starte USB Ethernet CDC.

Pak endelig om og komprimér initrd -billedet:

$ find. | cpio -o -H nyc | gzip -9>../kernel/initrd_nfs.img

I det mindste skal kernebilledet og DTB -filen pakkes ind i et Android -boot -billede. Et sådant billede kan genereres med abootimg -værktøj.

Lad os gå ind i kernemappen og bruge kommandoen herunder til at opbygge billede og tilføje DTB i det komprimerede kernebillede:

$ cd../kernel

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

Og endelig, generer boot -billedet (her er vores rootfs placeret en fjernpartition i 10.42.0.1)

abootimg --create boot -db410c.img -k Image.gz+dtb -r initrd_nfs.img -c siderstørrelse = 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"

Referencer:

  • https://access.redhat.com/solutions/24029
  • 96Tavle Dokumentation

Trin 4: Oprettelse af rodfilsystem i HOST

Nu har vi fået et nyt boot -billede til at opdatere Dragonboard 410c. Men vi har brug for et rodfilsystem i fjernserveren for at starte moduler, tjenester og applikationer. I dette trin opbygger vi et delt bibliotek i værten for at gemme alle disse data. På den måde, lad os downloade et rootfs -filsystem fra linaro -websted med den samme version, der bruges i initrd. Så gå tilbage en mappe og download linaro-developer rootfs image med version 431.

$ cd..

$ wget

Komprimer denne fil

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

Ved hjælp af denne fil, lad os skrive alt billede i et sdcard for at få adgang til alle partitioner og kopiere rootfs -filer. Så sørg for, at data fra uSDCard sikkerhedskopieres, fordi alt på SDCard går tabt.

For at finde dit SDCard -enhedsnavn skal du fjerne SDCard og køre følgende kommando:

$ lsblk

Gem alle dine genkendte disknavne i dit sind. Indsæt nu SDCard, vent et øjeblik og udfør kommandoen igen:

$ lsblk

Bemærk den nyligt genkendte disk. Dette bliver dit SDCard. Husk dit navn og ændr parameteren "of =" for dit SDCard -enhedsnavn, og sørg for at bruge enhedsnavnet uden partitionen, p.e.: /dev /mmcblk0

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

Bemærkninger:

  • Denne kommando tager noget tid at udføre. Vær tålmodig og undgå at manipulere med terminalen, indtil processen er afsluttet.
  • Når SD -kortet er færdigt med at blinke, fjernes det fra værtscomputeren.

Reference: 96boards dokumentation

Trin 5: Oprettelse af Server NFS i HOST og kopiering af filer

På dette tidspunkt har vi et boot -billede, der skal flashes ind i dragonboard 410c og et SDCard med et rootfs -filsystem til vores moduler, tjenester og applikationer. Det næste trin er at oprette et fjernt bibliotek for at forbinde USB Ethernet DEVICE sammen med HOST rootfs filsystem. Det kan gøres ved hjælp af en pakke fra Ubuntu med navnet nfs-kernel-server.

Denne pakke installerer en NFS -service i Ubuntu, der tillader at dele nogle biblioteker for nogle enheder på netværket, vi kan konfigurere, hvilket bibliotek der skal bruges til hver enhed ved hjælp af din IP.

Så lad os installere pakken og konfigurere den.

$ sudo apt-get install nfs-kernel-server

NFS -tjenesten starter automatisk. For at kontrollere NFS -tjenester skal du bruge:

$ sudo service nfs-kernel-server restart // for at genstarte, eller brug 'stop' eller 'start' efter behov.

For at kontrollere status for NFS -tjenesten fra kommandolinjen skal du bruge:

$ sudo service nfs-kernel-server status

nfsd kører // Service er oppe nfsd kører ikke // Service er nede

Lad os nu oprette en topmappe /srv /nfs og oprette et underkatalog for hvert påkrævet NFS -monteret rodfilsystem. Her inkluderer vi et delt rodfilsystem for at beholde vores rodfilsystem:

$ sudo mkdir -p /srv /nfs

$ sudo mkdir -p/srv/nfs/rootfs

Nu kræver NFS -serveren /etc /exports at blive konfigureret korrekt for at kontrollere adgangen til hvert NFS -filsystemkatalog til bestemte værter. I dette tilfælde identificeres værterne ved deres IP -adresse. Så for hvert rodfilsystem, der oprettes, tilføj eksportkontrollinjen til /etc /exports, juster om nødvendigt din lokale IP -adresse og bibliotekets navngivningsskema. I denne vejledning bruger vi altid det:

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

Indsæt dit SDCard igen, monter det og kopier alle rootfs filsystem til/srv/nfs/rootfs, genstart NFS service for at opdatere biblioteket ved hjælp af nye kopierede filer.

Ydermere skal vi kopiere de nye modulfiler til rootfs-filsystem, fordi vi kompilerede kernen på trin 2. Så kopier alle mapper i ~/db410c-modules/til/srv/nfs/rootfs.

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

Sørg for, at disse biblioteker bliver synlige af NFS -tjenesten. Enten:

$ sudo exportfs -a

Reference: TFTP/NFS rodfilsystem

Trin 6: Opdatering af Dragonboard 410c Boot Image og konfiguration af netværksgrænseflader

Vi foretog tidligt alle trin for at implementere et eksternt rootfs -filsystem, nu skal vi opdatere boot -billedet inde i dragonboard 410c, til det skal du tilslutte dit USB -kabel på pc'en og på dragonboard -uUSB -stikket. Så sørg for at fastboot er konfigureret på værtscomputeren, hvis den ikke installeres ved hjælp af:

$ sudo apt installer fastboot

Nu for at opdatere billedet, start dragonboardet i fastboot -tilstand ved at følge disse trin:

  • Tryk og hold Vol (-) -knappen nede på DragonBoard 410c, dette er S4-knappen. DragonBoard ™ 410c bør stadig IKKE være tændt
  • Mens du holder Vol (-)-knappen, tænd DragonBoard 410c ved at tilslutte den
  • Når DragonBoard 410c er tilsluttet strøm, skal du slippe holdet på Vol (-) -knappen.
  • Vent i cirka 20 sekunder.
  • Boardet skal starte i fastboot -tilstand.

Kør følgende kommandoer fra det tilsluttede værtsmaskinterminalvindue:

$ sudo fastboot -enheder

Typisk vil det blive vist som nedenfor

de82318 fastboot

På dette tidspunkt skal du være tilsluttet din DragonBoard 410c med et USB til microUSB -kabel. Din DragonBoard 410c skal startes i fastboot -tilstand og klar til at blive blinket med de relevante billeder. Lad os opdatere boot -image med vores boot -image:

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

Og genstart tavlen

$ sudo fastboot genstart

Nu vil din HOST registrere en ny grænseflade ved navn usb0, men den har endnu ikke en IP. Så tilføj en statisk IP til denne grænseflade ved hjælp af:

$ sudo ifconfig usb0 10.42.0.1 netmask 255.255.255.0 op

Eller indtast i "Konfiguration" på HOST, i punktet "netværk", og indstil USB Ethernet en statisk IP til denne grænseflade.

Genstart nu dragonen igen, og kontroller systemstart, og prøv at oprette forbindelse ved hjælp af ssh:

$ ssh [email protected]

Referencer:

  • 96boards dokumentation
  • HowtoForge - punkt 6

Anbefalede: