Qasja në sistemin e skedarëve të rrënjës në distancë duke përdorur DB410 si një Dongle Ethernet: 6 hapa
Qasja në sistemin e skedarëve të rrënjës në distancë duke përdorur DB410 si një Dongle Ethernet: 6 hapa
Anonim
Qasja në sistemin e skedarëve të rrënjës në distancë duke përdorur DB410 si një Dongle Ethernet
Qasja në sistemin e skedarëve të rrënjës në distancë duke përdorur DB410 si një Dongle Ethernet

Objektivat:

  • Instaloni zinxhirin e veglave dhe përpiloni kernelin për të futur mbështetjen e USB Ethernet CDC Gadget;
  • Rikrijoni boot.img nga Linaro për të nisur USB Ethernet CDC;
  • Krijoni server NFS për të pritur sistemin e skedarëve rrënjë;
  • Konfigurimi i IP në Pajisje dhe HOST.

Hapi 1: Kërkesat

Ju do të keni nevojë për elementët e mëposhtëm:

  1. Një DragonBoard ™ 410c (e quajtur këtu Pajisje);
  2. Një kompjuter që përdor Ubuntu 16.04.3 i përditësuar (i quajtur këtu HOST) me lidhje interneti dhe slot SDCard;
  3. Një instalim i pastër i Linaro -developer version 431 - Link: Snapshot Linaro Debian v431
  4. Një monitor HDMI;
  5. Një tastierë USB;
  6. Një kartë SD 8 GB;
  7. Një kabllo USB, USB USB për të lidhur Pajisjen në HOST.

Hapi 2: Konfigurimi i hostit për të ndërtuar kernel dhe ndërtuar kernel në HOST

Së pari, ne do të krijojmë të gjitha drejtoritë para se të vazhdojmë. Kështu që:

$ cd

$ mkdir db410remototoot $ cd db410remoteroot $ mkdir zinxhir mjetesh $ mkdir db410c-module

Fatkeqësisht, kerneli linux i përdorur nga Linaro (Versioni 431) nuk ka mbështetje për vegël USB Ethernet, për shkak të kësaj, kerneli Linux duhet të rindërtohet për këtë version specifik. Shkarkoni zinxhirin e veglave Linaro për të ndërtuar dhe vendosur kernel linux në Dragonboard410c nga makina pritëse x86.

$ wget

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

Tani instaloni paketat që kërkohen për të ndërtuar kernelin:

$ sudo apt update && sudo apt-get install git build-thelbësor abootimg kernel-paketë fakeroot libncurses5-dev libssl-dev ccache

Merrni burimin e Linux Kernel Clone Qualcomm uljen e ekipit Depoja Linux:

klon $ git

$ cd kernel $ git arka origjina/lëshimi/qcomlt-4.14 -b my-custom-4.14

Tani, vendosni ndryshoret e mjedisit të përpilimit:

$ eksport ARCH = arm64

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

Në këtë pikë, ne duhet të shtojmë modulet në USB Ethernet CDC në kernel. Unë e bëra atë më parë dhe ju mund ta merrni këtë në fund të këtij hapi. I hoqa disa copa por funksionon.

Para përpilimit, ju lutemi korrigjoni një defekt të kernelit në drivers/mmc/host/sdhci-msm.c duke ndryshuar strukturën në rreshtin 1150 në:

konstrukt statik 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};

Hiqni konfigurimin configfile.zip, kopjoni.config skedarin në drejtorinë e kernelit, krijoni kernel, module dhe instaloni module në një drejtori:

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

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

Referenca: 96Boards Documentation

Hapi 3: Rindërtoni Boot.img në HOST

Në këtë hap, ne duhet të hapim imazhin initrd, të vendosim modulet e ndërtuar brenda imazhit, të konfigurojmë sistemin për të filluar ato module dhe të rindërtojmë një initrd.img me një linjë komande të re kernel për të nisur sistemin e skedarëve rrënjë nga distanca.

Pra, së pari, ne duhet të shkarkojmë initrd.img nga faqja e internetit linaro:

cd $..

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

Tani, pas shkarkimit, zhbllokoni dhe nxirrni initrd:

$ zcat ramdisk.img | cpio -idmv

Në këtë drejtori, ne kemi sistemin e skedarëve rrënjë të përdorur nga kerneli në fillimin, kështu që ne do të konfigurojmë modulet USB Ethernet CDC dhe parametrat e largët të NFS si IP -ja e serverit NFS dhe ethernet (usb) të nevojshme këtu.

Tani, le të konfigurojmë disa skedarë:

conf/initramfs.conf:

MODULA = shumica

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

Krijoni drejtorinë init-premount në skriptet e drejtorisë/

$ mkdir skripte/init-premount

dhe shtoni skedarët në këto drejtori të sapo krijuara:

POROSIA

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

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

usb

#!/bin/sh

PREREQ = "" prereqs () {echo "$ PREREQ"} rasti $ 1 në # merr parakushtet paraprake) dalja paraprake 0;; esac modprobe usb_f_ecm modprobe libcomposite modprobe usb_f_rndis modprobe g_ether

Mos harroni të përdorni chmod në skedarin usb për ta bërë atë të ekzekutueshëm:

$ chmod +x skripte/init-premount/usb

Tani, kopjoni të gjithë drejtorinë me modulet nga modulet db410c (HAPI 2) në lib/module në initrd:

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

Hiqni të gjithë skedarët në lib/modules/4.14.96-xxxx-dirt përveç të gjithë modulit të skedarëve.* Dhe lista e skedarëve:

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/vegël /function/usb_f_fs.ko kernel/drivers/usb/gadget/function/usb_f_ecm_subset.ko kernel/drivers/usb/gadget/libcomposite.ko

Ato skedarë janë të gjitha modulet e nevojshme për të filluar USB Ethernet CDC.

Më në fund ripaketoni dhe ngjeshni imazhin fillestar:

$ gjeni. | cpio -o -H newc | gzip -9>../kernel/initrd_nfs.img

Të paktën, imazhi i kernelit dhe skedari DTB duhet të paketohen në një imazh të nisjes Android. Një imazh i tillë mund të krijohet me mjetin abootimg.

Le të futemi në drejtorinë e kernelit dhe të përdorim komandën më poshtë për të ndërtuar imazhin dhe për të shtuar DTB në imazhin e kernelit të ngjeshur:

$ cd../kernel

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

Dhe së fundi, gjeneroni imazhin e nisjes (këtu rrënjët tanë janë të vendosur në një ndarje të largët në 10.42.0.1)

abootimg --krijoni 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: jashtë tastierës rw rootwait = tastierë tty0 = ttyMSM0, 115200n8"

Referencat:

  • https://access.redhat.com/solutions/24029
  • 96 Dokumentacioni i bordeve

Hapi 4: Krijimi i sistemit të skedarëve rrënjë në HOST

Tani, ne kemi një imazh të ri të nisjes për të azhurnuar dragonboard 410c. Por ne kemi nevojë për një sistem skedarësh rrënjë në serverin e largët për të nisur modulet, shërbimet dhe aplikacionet. Në këtë hap, ne do të ndërtojmë një drejtori të përbashkët në host për të ruajtur të gjitha këto të dhëna. Në atë mënyrë, le të shkarkojmë një sistem skedarësh rootfs nga faqja linaro me të njëjtin version të përdorur në initrd. Pra, kthehuni një drejtori dhe shkarkoni imazhin linaro-developer rootfs me versionin 431.

cd $..

$ wget

Zhbllokoni këtë skedar

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

Duke përdorur këtë skedar, le të shkruajmë të gjithë imazhin në një kartë sd për të hyrë në të gjitha ndarjet dhe kopjoni skedarët rootfs. Pra, sigurohuni që të dhënat nga uSDCard të rezervohen sepse gjithçka në SDCard do të humbet.

Për të gjetur emrin e pajisjes tuaj SDCard, hiqni SDCard dhe ekzekutoni komandën e mëposhtme:

$ lsblk

Ruani në mendjen tuaj të gjithë emrat e njohur të diskut. Tani fut SDCard, prisni një moment dhe ekzekutoni përsëri komandën:

$ lsblk

Vini re diskun e sapo njohur. Kjo do të jetë karta juaj SDCard. Mos harroni emrin tuaj dhe ndryshoni parametrin "of =" për emrin e pajisjes tuaj SDCard dhe sigurohuni që të përdorni emrin e pajisjes pa ndarje, p.sh.: /dev /mmcblk0

$ sudo dd if = dragonboard-410c-sdcard-developer-buster-431.img e =/dev/XXX bs = 4M oflag = statusi i sinkronizimit = përparimi

Shënime:

  • Ky komandë do të marrë pak kohë për t'u ekzekutuar. Jini të durueshëm dhe shmangni ndërhyrjen në terminal derisa procesi të ketë përfunduar.
  • Pasi karta SD të ketë përfunduar së ndezuri, hiqeni nga kompjuteri pritës.

Referenca: 96 borde dokumentacioni

Hapi 5: Krijimi i serverit NFS në HOST dhe kopjimi i skedarëve

Në këtë pikë, ne kemi një imazh të nisjes që do të hidhet në dragonboard 410c dhe një SDCard me një sistem skedarësh rootfs për modulet, shërbimet dhe aplikimet tona. Hapi tjetër është krijimi i një drejtorie të largët për të lidhur pajisjen USB Ethernet DEVICE me sistemin e skedarëve HOST rootfs. Kjo mund të bëhet duke përdorur një paketë nga Ubuntu të quajtur nfs-kernel-server.

Kjo paketë instalon një shërbim NFS në Ubuntu duke lejuar ndarjen e disa drejtorive për disa pajisje në rrjet, ne mund të konfigurojmë se cila drejtori do të përdoret për secilën pajisje duke përdorur IP -në tuaj.

Pra, le të instalojmë paketën dhe ta konfigurojmë atë.

$ sudo apt-get install nfs-kernel-server

Shërbimi NFS fillon automatikisht. Për të kontrolluar shërbimet NFS përdorni:

$ sudo service nfs-kernel-server restart // për të rinisur, ose përdorni 'stop', ose 'start' sipas nevojës.

Për të kontrolluar statusin e shërbimit NFS nga rreshti i komandës përdorni:

$ sudo service nfs-kernel-server status

nfsd po funksionon // Shërbimi është lart nfsd nuk po funksionon // Shërbimi është poshtë

Tani, le të krijojmë një drejtori të lartë /srv /nfs dhe të krijojmë një nën -direktori nën atë për secilin sistem skedar rrënjë të montuar në NFS të kërkuar. Këtu përfshijmë një sistem të përbashkët skedarësh rrënjë për të mbajtur sistemin tonë të skedarëve rrënjë:

$ sudo mkdir -p /srv /nfs

$ sudo mkdir -p/srv/nfs/rootfs

Tani, serveri NFS kërkon që /etc /export të konfigurohet saktë, për të kontrolluar hyrjen në secilin drejtori të sistemit të skedarëve NFS në hostet specifikë. Në këtë rast hostet identifikohen nga adresa e tyre IP. Pra, për secilin sistem të skedarëve rrënjë që krijohet, shtoni vijën e kontrollit të eksportit në /etc /export, duke rregulluar adresën tuaj IP lokale dhe skemën e emërtimit të drejtorisë nëse është e nevojshme. Në këtë tutorial, ne gjithmonë e përdorim atë:

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

Futni përsëri kartën tuaj SDC, montojeni dhe kopjoni të gjithë sistemin e skedarëve rootfs në/srv/nfs/rootfs, rinisni shërbimin NFS për të azhurnuar drejtorinë duke përdorur skedarë të rinj të kopjuar.

Përveç kësaj, ne kemi nevojë të kopjojmë skedarët e moduleve të reja në sistemin e skedarëve rootfs sepse kemi përpiluar kernelin në hapin 2. Pra, kopjoni të gjitha drejtoritë në modulet ~/db410c/në/srv/nfs/rootfs.

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

Sigurohuni që këto drejtori të bëhen të dukshme nga shërbimi NFS. Ose:

$ sudo exportfs -a

Referenca: Sistemi i skedarëve rrënjë TFTP/NFS

Hapi 6: Përditësimi i imazhit të nisjes së Dragonboard 410c dhe konfigurimi i ndërfaqeve të rrjetit

Ne i kemi bërë të gjitha hapat për të zbatuar një sistem të skedarëve të largët rootfs, tani na duhet të përditësojmë imazhin e nisjes brenda dragonboard 410c, për këtë, lidhni kabllon tuaj USB në PC dhe në lidhësin dragonboard uUSB. Pra, sigurohuni që fastboot të jetë vendosur në kompjuterin pritës, nëse nuk instalohet duke përdorur:

$ sudo apt instaloni fastboot

Tani për të azhurnuar imazhin, filloni kartën e dragoit në modalitetin e shpejtë të nisjes duke ndjekur këto hapa:

  • Shtypni dhe mbani butonin Vol (-) në DragonBoard 410c, ky është butoni S4. DragonBoard ™ 410c ende NUK duhet të jetë i ndezur
  • Ndërsa mbani butonin Vol (-), ndizni DragonBoard 410c duke e lidhur atë
  • Pasi DragonBoard 410c është kyçur në energji, lëshoni pritjen në butonin Vol (-).
  • Prisni për rreth 20 sekonda.
  • Bordi duhet të fillojë në modalitetin fastboot.

Nga dritarja e terminalit të makinës pritëse të lidhur, ekzekutoni komandat e mëposhtme:

$ sudo pajisje të shpejta të nisjes

Zakonisht do të shfaqet si më poshtë

de82318 fastboot

Në këtë pikë ju duhet të lidheni me DragonBoard 410c tuaj me një kabllo USB në microUSB. DragonBoard 410c juaj duhet të aktivizohet në modalitetin fastboot dhe të jetë gati për t'u ndezur me imazhet e duhura. Le të azhurnojmë imazhin e nisjes me imazhin tonë të nisjes:

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

Dhe, rinisni bordin

$ sudo fastboot rindezje

Tani, HOST juaj do të zbulojë një ndërfaqe të re të quajtur usb0, por nuk ka ende IP. Pra, shtoni një IP statike në këtë ndërfaqe duke përdorur:

$ sudo ifconfig usb0 10.42.0.1 maskë neto 255.255.255.0 lart

Ose futni në "Konfigurimi" në HOST, në artikullin "rrjet", duke vendosur USB Ethernet një IP statike në atë ndërfaqe.

Tani, rinisni përsëri dragonboard dhe verifikoni fillimin e sistemit, duke u përpjekur të lidheni duke përdorur ssh:

$ ssh [email protected]

Referencat:

  • Dokumentacioni i 96 tabelave
  • HowtoForge - Pika 6