Sadržaj:
- Korak 1: Zahtjevi
- Korak 2: Konfiguriranje hosta za izgradnju jezgre i izgradnju jezgre u HOST -u
- Korak 3: Obnovite Boot.img u HOST -u
- Korak 4: Stvaranje korijenskog datotečnog sustava u HOST -u
- Korak 5: Stvaranje poslužiteljskog NFS -a u HOST -u i kopiranje datoteka
- Korak 6: Ažuriranje pokretačke slike Dragonboard 410c i konfiguriranje mrežnih sučelja
2025 Autor: John Day | [email protected]. Zadnja promjena: 2025-01-13 06:57
Ciljevi:
- Instalirajte niz alata i ponovno kompajlirajte jezgru da biste umetnuli podršku za USB Ethernet CDC Gadget;
- Ponovno stvorite boot.img s Linara za pokretanje USB Ethernet CDC -a;
- Izradite NFS poslužitelj za hostovanje korijenskog datotečnog sustava;
- IP konfiguracija u DEVICE i HOST.
Korak 1: Zahtjevi
Trebat će vam sljedeće stavke:
- DragonBoard ™ 410c (ovdje nazvan DEVICE);
- Računalo koje koristi Ubuntu 16.04.3 ažurirano (ovdje nazvano HOST) s internetskom vezom i utorom za SD karticu;
- Čista instalacija Linaro -developer verzije 431 - veza: Snimak Linaro Debian v431
- HDMI monitor;
- USB tipkovnica;
- SD kartica od 8 Gb;
- USB kabel, uUSB USB za spajanje UREĐAJA na HOST.
Korak 2: Konfiguriranje hosta za izgradnju jezgre i izgradnju jezgre u HOST -u
Prvo ćemo stvoriti sve direktorije prije nego nastavimo. Tako:
$ cd ~
$ mkdir db410remoteroot $ cd db410remoteroot $ mkdir lanac alata $ mkdir db410c-moduli
Nažalost, linux jezgra koju koristi Linaro (verzija 431) nema podršku za USB Ethernet gadget, zbog toga se jezgra Linuxa mora obnoviti za ovu određenu verziju. Preuzmite Linaro toolchain za izgradnju i implementaciju Linux jezgre na Dragonboard410c s x86 stroja za hostovanje.
$ wget
$ tar -xf gcc-*-x86_64_aarch64-linux-gnu.tar.xz -C./toolchain --strip-components = 1
Sada instalirajte pakete koji su potrebni za izgradnju jezgre:
$ sudo apt update && sudo apt-get install git build-essential abootimg kernel-paket lažni root libncurses5-dev libssl-dev ccache
Nabavite Linux Kernel izvor Klonirajte Qualcomm odredišni tim Linux spremište:
klon $ git
$ cd kernel $ git checkout origin/release/qcomlt-4.14 -b my-custom-4.14
Sada postavite varijable okruženja kompilacije:
$ export ARCH = arm64
$ export CROSS_COMPILE = $ (pwd) /../ alatni lanac/bin/aarch64-linux-gnu-
U ovom trenutku moramo dodati module na USB Ethernet CDC u jezgri. To sam već radio i to možete dobiti na kraju ovog koraka. Uklonio sam neke itene ali radi.
Prije kompajliranja, ispravite grešku jezgre u driverima/mmc/host/sdhci-msm.c promijenivši strukturu u retku 1150 na:
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};
Raspakirajte configfile.zip, kopirajte.config datoteku u direktorij jezgre, sastavite jezgru, module i instalirajte module u direktorij:
$ make -j $ (nproc) Image.gz dtbs
$ make -j $ (nproc) moduli $ make modules_install INSTALL_MOD_PATH =../db410c -modules
Referenca: 96Boards Documentation
Korak 3: Obnovite Boot.img u HOST -u
U ovom koraku moramo otvoriti initrd sliku, staviti module ugrađene u sliku, konfigurirati sustav za pokretanje tih modula i obnoviti initrd.img s novom naredbenom linijom jezgre za daljinsko pokretanje korijenskog datotečnog sustava.
Dakle, prvo moramo preuzeti initrd.img s linaro web stranice:
$ cd..
$ mkdir inird_nfs $ cd initrd_nfs $ wget -O ramdisk.img
Sada, nakon preuzimanja, raspakirajte i raspakirajte initrd:
$ zcat ramdisk.img | cpio -idmv
U ovom direktoriju imamo korijenski datotečni sustav koji kernel koristi pri inicijalizaciji, pa ćemo konfigurirati USB Ethernet CDC module i NFS udaljene parametre poput IP -a poslužitelja NFS -a i etherneta (usb) koji su ovdje potrebni.
Sada, konfigurirajmo neke datoteke:
conf/initramfs.conf:
MODULI = većina
BUSYBOX = auto COMPRESS = gzip DEVICE = usb0 NFSROOT = auto RUNSIZE = 10%
Izradite init-premount imenika u skriptama direktorija/
$ mkdir skripte/init-premount
i dodajte datoteke u ove upravo stvorene direktorije:
NARUDŽBA
/scripts/init-premount/usb "$@"
[-e /conf/param.conf] &&. /conf/param.conf
usb
#!/bin/sh
PREREQ = "" prereqs () {echo "$ PREREQ"} slučaj $ 1 u # dobivanje preduvjeta prereqs) prereqs izlaz 0;; esac modprobe usb_f_ecm modprobe libcomposite modprobe usb_f_rndis modprobe g_ether
Ne zaboravite upotrijebiti chmod u USB datoteci kako bi bila izvršna:
$ chmod +x skripte/init-premount/usb
Sada kopirajte sve direktorije s modulima iz db410c-modules (STEP 2) u lib/modules u initrd:
$ cp -R../db410-modules/lib usr/
Uklonite sve datoteke u lib/modules/4.14.96-xxxx-dirty osim svih datoteka modula.* I tog popisa datoteka:
kernel/upravljački programi/usb/gadget/legacy/g_ether.ko
kernel/upravljački programi/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
Sve te datoteke su svi moduli potrebni za pokretanje USB Ethernet CDC -a.
Na kraju prepakirajte i komprimirajte initrd sliku:
$ pronaći. | cpio -o -H newc | gzip -9>../kernel/initrd_nfs.img
Barem se slika jezgre i DTB datoteka moraju pakirati u sliku za pokretanje Androida. Takva se slika može generirati alatom abootimg.
Idemo u direktorij jezgre i upotrijebimo naredbu ispod za izradu slike i dodavanje DTB -a u komprimiranu sliku jezgre:
$ cd../kernel
$ cat arch/$ ARCH/boot/Image.gz arch/$ ARCH/boot/dts/qcom/apq8016-sbc.dtb> Image.gz+dtb
I na kraju, generirajte sliku za pokretanje (ovdje se naši rootfovi nalaze na udaljenoj particiji u 10.42.0.1)
abootimg --napravi boot -db410c.img -k Image.gz+dtb -r initrd_nfs.img -c pageize = 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: isključeno rw rootwait konzola = tty0 konzola = ttyMSM0, 115200n8"
Reference:
- https://access.redhat.com/solutions/24029
- 96Dokumentacija odbora
Korak 4: Stvaranje korijenskog datotečnog sustava u HOST -u
Sada imamo novu sliku za pokretanje za ažuriranje dragonboard 410c. Ali za pokretanje modula, usluga i aplikacija potreban nam je korijenski datotečni sustav na udaljenom poslužitelju. U ovom koraku izgradit ćemo zajednički direktorij na hostu za spremanje svih ovih podataka. Na taj način preuzmimo datotečni sustav rootfs s linaro web stranice s istom verzijom koja se koristi u initrd -u. Dakle, vratite se u jedan direktorij i preuzmite rootfa sliku linaro-developera s verzijom 431.
$ cd..
$ wget
Raspakirajte ovu datoteku
$ unzip dragonboard-410c-sdcard-developer-buster-431.zip
Koristeći ovu datoteku, zapisujmo sve slike na sdcard za pristup svim particijama i kopirajte rootfs datoteke. Stoga osigurajte sigurnosnu kopiju podataka s uSDCard kartice jer će sve na SDCard kartici biti izgubljeno.
Da biste pronašli naziv svog SDCard uređaja, uklonite SDCard i pokrenite sljedeću naredbu:
$ lsblk
Spremite u svoj um sve prepoznate nazive diskova. Sada umetnite SDCard karticu, pričekajte trenutak i ponovno izvedite naredbu:
$ lsblk
Zabilježite novo prepoznati disk. Ovo će biti vaša SDCard kartica. Zapamtite svoje ime i promijenite parametar "of =" za naziv vašeg SDCard uređaja i svakako koristite naziv uređaja bez particije, npr.: /dev /mmcblk0
$ sudo dd if = dragonboard-410c-sdcard-developer-buster-431.img od =/dev/XXX bs = 4M oflag = status sinkronizacije = napredak
Bilješke:
- Izvođenje ove naredbe će potrajati neko vrijeme. Budite strpljivi i izbjegavajte ometanje terminala sve dok proces ne završi.
- Nakon što SD kartica završi s bljeskanjem, uklonite je s glavnog računala.
Referenca: dokumentacija 96 ploča
Korak 5: Stvaranje poslužiteljskog NFS -a u HOST -u i kopiranje datoteka
U ovom trenutku imamo sliku za pokretanje koju treba umetnuti u dragonboard 410c i SDCard karticu s datotečnim sustavom rootfs za naše module, usluge i aplikacije. Sljedeći korak je stvaranje udaljenog direktorija za povezivanje USB Ethernet DEVICE uređaja s HOST rootfs datotečnim sustavom. To se može učiniti pomoću paketa iz Ubuntua pod nazivom nfs-kernel-server.
Ovaj paket instalira NFS uslugu u Ubuntu što omogućuje dijeljenje nekih direktorija za neke uređaje na mreži. Možemo konfigurirati koji će se direktorij koristiti za svaki uređaj pomoću vašeg IP -a.
Dakle, instalirajmo paket i konfigurirajmo ga.
$ sudo apt-get install nfs-kernel-server
Usluga NFS automatski se pokreće. Za kontrolu NFS usluga koristite:
$ sudo usluga nfs-kernel-poslužitelj ponovno pokretanje // za ponovno pokretanje ili po potrebi upotrijebite 'stop' ili 'start'.
Za provjeru statusa NFS usluge iz naredbenog retka koristite:
$ sudo usluga nfs-kernel-poslužitelj status
nfsd pokrenut // Usluga je gore nfsd ne radi // Usluga je dolje
Sada, stvorimo top direktorij /srv /nfs i stvorimo poddirektorij za svaki potreban korijenski datotečni sustav montiran na NFS -u. Ovdje uključujemo zajednički korijenski datotečni sustav kako bismo zadržali naš korijenski datotečni sustav:
$ sudo mkdir -p /srv /nfs
$ sudo mkdir -p/srv/nfs/rootfs
Sada, NFS poslužitelj zahtijeva da se /etc /export pravilno konfigurira kako bi se kontrolirao pristup svakom direktoriju datotečnog sustava NFS određenim hostovima. U tom slučaju hostovi se identificiraju prema njihovoj IP adresi. Dakle, za svaki stvoreni korijenski datotečni sustav dodajte liniju za kontrolu izvoza u /etc /export, po potrebi prilagođavajući svoju lokalnu IP adresu i shemu imenovanja direktorija. U ovom vodiču uvijek koristimo sljedeće:
/srv/nfs/rootfs 10.42.0.2 (rw, sync, no_root_squash, no_subtree_check)
Ponovo umetnite SDCard karticu, montirajte je i kopirajte sav datotečni sustav rootfs u/srv/nfs/rootfs, ponovno pokrenite NFS uslugu kako biste ažurirali direktorij pomoću novih kopiranih datoteka.
Dodatno, moramo kopirati datoteke novih modula u datotečni sustav rootfs jer smo kernel sastavili u koraku 2. Dakle, kopirajte sve direktorije u ~/db410c-modules/u/srv/nfs/rootfs.
$ sudo cp -R ~/db410c -modules/*/srv/nfs/rootfs/
Pobrinite se da NFS usluga učini vidljivim ove direktorije. Ili:
$ sudo exportfs -a
Referenca: TFTP/NFS korijenski datotečni sustav
Korak 6: Ažuriranje pokretačke slike Dragonboard 410c i konfiguriranje mrežnih sučelja
Rano smo poduzeli sve korake za implementaciju udaljenog datotečnog sustava rootfs, sada nam je potrebno ažurirati sliku za pokretanje unutar dragonboard 410c, za to spojite svoj USB kabel na računalo i uUSB konektor za dragonboard. Stoga provjerite je li fastboot postavljen na računalu domaćinu, ako nije instaliran pomoću:
$ sudo apt install fastboot
Sada za ažuriranje slike pokrenite de dragonboard u način brzog pokretanja slijedeći ove korake:
- Pritisnite i držite tipku Vol (-) na DragonBoard 410c, ovo je tipka S4. DragonBoard ™ 410c se i dalje NE smije uključiti
- Dok držite tipku Vol (-), uključite DragonBoard 410c tako da ga uključite
- Nakon što je DragonBoard 410c priključen na napajanje, otpustite gumb Vol (-).
- Pričekajte oko 20 sekundi.
- Ploča bi se trebala pokrenuti u načinu brzog pokretanja.
Iz prozora priključenog računala glavnog računala pokrenite sljedeće naredbe:
$ sudo uređaji za brzo pokretanje
Obično će se prikazati kao dolje
de82318 fastboot
U ovom trenutku trebali biste biti povezani s DragonBoard 410c pomoću USB na microUSB kabela. Vaš DragonBoard 410c trebao bi se pokrenuti u način brzog pokretanja i biti spreman za bljeskanje odgovarajućim slikama. Ažurirajmo sliku za pokretanje našom slikom za pokretanje:
$ sudo fastboot flash boot ~/db410remoteroot/kernel/initrd_nfs.img
I ponovno pokrenite ploču
$ sudo fastboot ponovno podizanje sustava
Sada će vaš HOST otkriti novo sučelje pod nazivom usb0, ali još nema IP. Dakle, dodajte statički IP u ovo sučelje koristeći:
$ sudo ifconfig usb0 10.42.0.1 maska mreže 255.255.255.0 gore
Ili unesite "Konfiguracija" na HOST -u, u stavku "mreža", postavivši USB Ethernet na statički IP tog sučelja.
Sada ponovno pokrenite dragonboard i provjerite pokretanje sustava, pokušavajući se povezati pomoću ssh:
$ ssh [email protected]
Reference:
- Dokumentacija 96 ploča
- HowtoForge - Stavka 6