Obsah:
- Krok 1: Požadavky
- Krok 2: Konfigurace hostitele pro vytváření jádra a vytváření jádra na hostiteli
- Krok 3: Znovu vytvořte soubor Boot.img na HOST
- Krok 4: Vytvoření kořenového souborového systému v HOST
- Krok 5: Vytvoření serveru NFS v hostiteli a kopírování souborů
- Krok 6: Aktualizace spouštěcího obrazu Dragonboard 410c a konfigurace síťových rozhraní
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Cíle:
- Nainstalujte si toolchain a překompilovejte jádro, abyste vložili podporu USB Ethernet CDC Gadget;
- Znovu vytvořte soubor boot.img z Linaro a spusťte USB Ethernet CDC;
- Vytvořte server NFS pro hostování kořenového souborového systému;
- Konfigurace IP v ZAŘÍZENÍ a HOST.
Krok 1: Požadavky
Budete potřebovat následující položky:
- DragonBoard ™ 410c (zde pojmenovaný ZAŘÍZENÍ);
- Počítač s aktualizací Ubuntu 16.04.3 (zde pojmenovaný HOST) s připojením k internetu a slotem pro SDCard;
- Čistá instalace vývojáře Linaro verze 431 - Link: Snapshot Linaro Debian v431
- Monitor HDMI;
- USB klávesnice;
- 8Gb SDCard;
- USB kabel, uUSB USB pro připojení ZAŘÍZENÍ na HOST.
Krok 2: Konfigurace hostitele pro vytváření jádra a vytváření jádra na hostiteli
Před pokračováním nejprve vytvoříme všechny adresáře. Tak:
$ cd ~
$ mkdir db410remoteroot $ cd db410remoteroot $ mkdir toolchain $ mkdir db410c-modules
Bohužel linuxové jádro používané Linaro (verze 431) nemá podporu pro gadget USB Ethernet, kvůli tomu musí být linuxové jádro znovu vytvořeno pro tuto konkrétní verzi. Stáhněte si řetězec nástrojů Linaro a vytvořte a nasaďte linuxové jádro na Dragonboard410c z hostitelského počítače x86.
$ wget
$ tar -xf gcc-*-x86_64_aarch64-linux-gnu.tar.xz -C./toolchain --strip-components = 1
Nyní nainstalujte balíčky, které jsou nutné k vytvoření jádra:
$ sudo apt update && sudo apt-get install git build-essential abootimg kernel-package fakeroot libncurses5-dev libssl-dev ccache
Získat zdroj jádra Linuxu Clone Qualcomm landing team Linux repository:
$ git clone
$ cd jádro $ git checkout origin/release/qcomlt-4.14 -b my-custom-4.14
Nyní nastavte proměnné prostředí kompilace:
$ export ARCH = arm64
$ export CROSS_COMPILE = $ (pwd) /../ toolchain/bin/aarch64-linux-gnu-
V tomto okamžiku musíme přidat moduly do USB Ethernet CDC v jádře. Udělal jsem to dříve a na konci tohoto kroku to můžete získat. Odstranil jsem nějaké položky, ale funguje to.
Před kompilací opravte chybu jádra v ovladači/mmc/host/sdhci-msm.c změnou struktury v řádku 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};
Rozbalte soubor configfile.zip, zkopírujte soubor.config do adresáře jádra, vytvořte jádro, moduly a nainstalujte moduly do adresáře:
$ make -j $ (nproc) Image.gz dtbs
moduly $ make -j $ (nproc) $ make modules_install INSTALL_MOD_PATH =../db410c -modules
Odkaz: Dokumentace 96Boards
Krok 3: Znovu vytvořte soubor Boot.img na HOST
V tomto kroku musíme otevřít bitovou kopii initrd, umístit moduly zabudované do bitové kopie, nakonfigurovat systém tak, aby tyto moduly spustil, a znovu sestavit soubor initrd.img pomocí nového příkazového řádku jádra pro vzdálené spuštění kořenového souborového systému.
Nejprve tedy musíme stáhnout initrd.img z webových stránek linaro:
$ cd..
$ mkdir inird_nfs $ cd initrd_nfs $ wget -O ramdisk.img
Nyní po stažení rozbalte a rozbalte soubor initrd:
$ zcat ramdisk.img | cpio -idmv
V tomto adresáři máme kořenový souborový systém používaný jádrem při inicializaci, takže nakonfigurujeme USB ethernetové CDC moduly a vzdálené parametry NFS, jako je zde potřeba IP serveru NFS a ethernet (usb).
Nyní nakonfigurujeme některé soubory:
conf/initramfs.conf:
MODULY = většina
BUSYBOX = auto COMPRESS = gzip DEVICE = usb0 NFSROOT = auto RUNSIZE = 10%
Vytvořte adresář init-premount ve skriptech adresářů/
$ mkdir skripty/init-premount
a přidejte soubory do právě vytvořeného adresáře:
OBJEDNAT
/scripts/init-premount/usb "$@"
[-e /conf/param.conf] &&. /conf/param.conf
usb
#!/bin/sh
PREREQ = "" prereqs () {echo "$ PREREQ"} případ $ 1 v # get prerequisites prereqs) prereqs exit 0;; esac modprobe usb_f_ecm modprobe libcomposite modprobe usb_f_rndis modprobe g_ether
Nezapomeňte použít chmod v souboru USB, aby byl spustitelný:
$ chmod +x skriptů/init-premount/usb
Nyní zkopírujte všechny adresáře s moduly z db410c-modules (KROK 2) do lib/modules v initrd:
$ cp -R../db410-modules/lib usr/
Odstraňte všechny soubory v lib/modules/4.14.96-xxxx-dirty kromě modulu všech souborů.* A tohoto seznamu souborů:
jádro/ovladače/usb/gadget/starší verze/g_ether.ko
jádro/ovladače/usb/gadget/legacy/g_mass_storage.ko jádro/ovladače/usb/gadget/legacy/g_cdc.ko jádro/ovladače/usb/gadget/legacy/g_serial.ko jádro/ovladače/usb/gadget/funkce/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 /jádro/usb_f_serial.ko/ovladače/usb/gadget/funkce/usb_f_ecm.ko jádro/ovladače/usb/gadget/funkce/usb_f_rndis.ko jádro/ovladače/usb/gadget/funkce/u_serial.ko jádro/ovladače/usb/gadget /function/usb_f_fs.ko jádro/ovladače/usb/gadget/funkce/usb_f_ecm_subset.ko jádro/ovladače/usb/gadget/libcomposite.ko
Tyto soubory jsou všechny moduly potřebné ke spuštění USB Ethernet CDC.
Nakonec přebalte a zkomprimujte obrázek initrd:
$ najít. | cpio -o -H newc | gzip -9>../kernel/initrd_nfs.img
Přinejmenším obraz jádra a soubor DTB musí být zabaleny do spouštěcí bitové kopie systému Android. Takový obrázek lze vygenerovat pomocí nástroje abootimg.
Pojďme do adresáře jádra a pomocí níže uvedeného příkazu vytvořte obraz a připojte DTB do obrazu komprimovaného jádra:
$ cd../kernel
$ cat arch/$ ARCH/boot/Image.gz arch/$ ARCH/boot/dts/qcom/apq8016-sbc.dtb> Image.gz+dtb
A nakonec vygenerujte spouštěcí obraz (zde náš rootfs nachází vzdálený oddíl v 10.42.0.1)
abootimg -vytvořte boot -db410c.img -k Image.gz+dtb -r initrd_nfs.img -c velikost stránky = 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"
Reference:
- https://access.redhat.com/solutions/24029
- Dokumentace 96Boards
Krok 4: Vytvoření kořenového souborového systému v HOST
Nyní jsme dostali novou spouštěcí bitovou kopii, která aktualizuje dragonboard 410c. Ke spouštění modulů, služeb a aplikací ale potřebujeme kořenový souborový systém na vzdáleném serveru. V tomto kroku v hostiteli vytvoříme sdílený adresář pro uložení všech těchto dat. Tak si stáhneme souborový systém rootfs z webu linaro se stejnou verzí, která byla použita v initrd. Vraťte se tedy o jeden adresář a stáhněte si obrázek linaro-developer rootfs s verzí 431.
$ cd..
$ wget
Rozbalte tento soubor
$ unzip dragonboard-410c-sdcard-developer-buster-431.zip
Pomocí tohoto souboru zapíšeme veškerý obrázek na sdcard, abychom získali přístup ke všem oddílům a zkopírovali soubory rootfs. Zajistěte tedy zálohování dat z karty uSDCard, protože dojde ke ztrátě všeho na kartě SDCard.
Chcete -li zjistit název zařízení SDCard, odeberte SDCard a spusťte následující příkaz:
$ lsblk
Uložte si do paměti všechny rozpoznané názvy disků. Nyní vložte SDCard, chvíli počkejte a spusťte příkaz znovu:
$ lsblk
Všimněte si nově rozpoznaného disku. Toto bude vaše karta SDCard. Zapamatujte si své jméno a změňte parametr "of =" pro název zařízení SDCard a ujistěte se, že používáte název zařízení bez oddílu, např.: /dev /mmcblk0
$ sudo dd if = dragonboard-410c-sdcard-developer-buster-431.img of =/dev/XXX bs = 4M oflag = stav synchronizace = průběh
Poznámky:
- Spuštění tohoto příkazu bude nějakou dobu trvat. Buďte trpěliví a vyvarujte se manipulace s terminálem, dokud proces neskončí.
- Jakmile bliká SD karta, vyjměte ji z hostitelského počítače.
Reference: 96boards dokumentace
Krok 5: Vytvoření serveru NFS v hostiteli a kopírování souborů
V tomto bodě máme spouštěcí bitovou kopii, která bude přenesena do dragonboardu 410c a SDCard se souborovým systémem rootfs pro naše moduly, služby a aplikace. Dalším krokem je vytvoření vzdáleného adresáře pro připojení zařízení USB Ethernet DEVICE k souborovému systému HOST rootfs. To lze provést pomocí balíčku z Ubuntu s názvem nfs-kernel-server.
Tento balíček nainstaluje službu NFS do Ubuntu, která umožňuje sdílet některé adresáře pro některá zařízení v síti, můžeme pomocí vaší IP nakonfigurovat, který adresář bude použit pro každé zařízení.
Pojďme tedy nainstalovat balíček a nakonfigurovat jej.
$ sudo apt-get install nfs-kernel-server
Služba NFS se spustí automaticky. Chcete -li ovládat služby NFS, použijte:
$ sudo service nfs-kernel-server restart // pro restart, nebo použijte 'stop' nebo 'start' podle potřeby.
Chcete -li zkontrolovat stav služby NFS z příkazového řádku, použijte:
$ sudo service nfs-kernel-server status
nfsd běží // Služba je spuštěna nfsd není spuštěna // Služba je vypnutá
Nyní vytvoříme nejvyšší adresář /srv /nfs a pod ním vytvoříme podadresář pro každý požadovaný kořenový souborový systém připojený k systému NFS. Zde uvádíme sdílený kořenový souborový systém, který zachová náš kořenový souborový systém:
$ sudo mkdir -p /srv /nfs
$ sudo mkdir -p/srv/nfs/rootfs
Server NFS nyní vyžaduje, aby byl /etc /exports správně nakonfigurován, aby řídil přístup ke každému adresáři systému souborů NFS konkrétním hostitelům. V tomto případě jsou hostitelé identifikováni podle své IP adresy. Pro každý vytvořený kořenový souborový systém přidejte řídicí řádek exportu do souboru /etc /exports a v případě potřeby upravte svou místní IP adresu a schéma pojmenování adresářů. V tomto kurzu vždy používáme:
/srv/nfs/rootfs 10.42.0.2 (rw, synchronizace, no_root_squash, no_subtree_check)
Znovu vložte kartu SDCard, připojte ji a zkopírujte celý souborový systém rootfs do/srv/nfs/rootfs, restartujte službu NFS a aktualizujte adresář pomocí nových zkopírovaných souborů.
Navíc musíme zkopírovat nové soubory modulů do souborového systému rootfs, protože jsme zkompilovali jádro v kroku 2. Zkopírujte tedy všechny adresáře v ~/db410c-modules/do/srv/nfs/rootfs.
$ sudo cp -R ~/db410c -modules/*/srv/nfs/rootfs/
Zajistěte, aby služba NFS tyto adresáře zviditelnila. Buď:
$ sudo exportfs -a
Odkaz: kořenový souborový systém TFTP/NFS
Krok 6: Aktualizace spouštěcího obrazu Dragonboard 410c a konfigurace síťových rozhraní
Provedli jsme brzy všechny kroky k implementaci vzdáleného souborového systému rootfs, nyní potřebujeme aktualizovat spouštěcí obraz uvnitř dragonboardu 410c, za tímto účelem připojte svůj USB kabel k počítači a konektoru uUSB na dragonboardu. Ujistěte se tedy, že je na hostitelském počítači nastaveno rychlé spuštění, pokud ne nainstalujete pomocí:
$ sudo apt nainstalovat fastboot
Chcete -li nyní aktualizovat obrázek, spusťte de dragonboard do režimu rychlého spuštění podle těchto kroků:
- Stiskněte a podržte tlačítko Vol (-) na DragonBoard 410c, toto je tlačítko S4. DragonBoard ™ 410c by přesto NEMĚL být zapnutý
- Podržte tlačítko Vol (-) a zapněte DragonBoard 410c zapojením
- Jakmile je DragonBoard 410c připojen k napájení, uvolněte tlačítko Vol (-).
- Počkejte asi 20 sekund.
- Deska by se měla spustit v režimu rychlého spuštění.
V okně terminálu připojeného hostitelského počítače spusťte následující příkazy:
$ sudo fastboot zařízení
Obvykle se zobrazí jako níže
de82318 rychlé spuštění
V tomto okamžiku byste měli být připojeni k DragonBoard 410c kabelem USB na microUSB. Váš DragonBoard 410c by měl být spuštěn v režimu rychlého spuštění a připraven k použití s příslušnými obrázky. Pojďme aktualizovat spouštěcí bitovou kopii pomocí naší zaváděcí bitové kopie:
$ sudo fastboot flash boot ~/db410remoteroot/kernel/initrd_nfs.img
A restartujte desku
$ sudo fastboot restart
Nyní váš HOST detekuje nové rozhraní s názvem usb0, ale zatím nemá IP. Přidejte tedy do tohoto rozhraní statickou IP adresu pomocí:
$ sudo ifconfig usb0 10.42.0.1 maska 255.255.255.0 nahoru
Nebo zadejte "Konfigurace" na HOST, v položce "síť" a nastavte USB Ethernet na statické IP pro toto rozhraní.
Nyní restartujte znovu dragonboard a ověřte spuštění systému a zkuste se připojit pomocí ssh:
$ ssh [email protected]
Reference:
- 96boardová dokumentace
- HowtoForge - položka 6