Talaan ng mga Nilalaman:
- Hakbang 1: Mga Kahilingan
- Hakbang 2: Pag-configure ng Host upang Buuin ang Kernel at Pagbuo ng Kernel sa HOST
- Hakbang 3: Muling Itayo ang Boot.img sa HOST
- Hakbang 4: Lumilikha ng Root Filesystem sa HOST
- Hakbang 5: Lumilikha ng Server NFS sa HOST at Pagkopya ng Mga File
- Hakbang 6: Ina-update ang Dragonboard 410c Boot Image at Pag-configure ng Mga Interface ng Network
2025 May -akda: John Day | [email protected]. Huling binago: 2025-01-13 06:58
Mga Layunin:
- I-install ang toolchain at muling magkumpuni ng kernel upang ipasok ang suporta ng USB Ethernet CDC Gadget;
- Muling likhain ang boot.img mula sa Linaro upang mag-boot ng USB Ethernet CDC;
- Lumikha ng NFS server upang mag-host ng root filesystem;
- Ang pagsasaayos ng IP sa DEVICE at HOST.
Hakbang 1: Mga Kahilingan
Kakailanganin mo ang mga sumusunod na iten:
- Isang DragonBoard ™ 410c (pinangalanan dito DEVICE);
- Ang isang PC na gumagamit ng Ubuntu 16.04.3 na-update (pinangalanan dito HOST) na may koneksyon sa internet at puwang ng SDCard;
- Isang malinis na pag-install ng bersyon ng Linaro-developer 431 - Link: Snapshot Linaro Debian v431
- Isang monitor ng HDMI;
- Isang USB keyboard;
- Isang 8Gb SDCard;
- Isang USB cable, uUSB USB upang ikonekta ang DEVICE sa HOST.
Hakbang 2: Pag-configure ng Host upang Buuin ang Kernel at Pagbuo ng Kernel sa HOST
Una, lilikha kami ng lahat ng mga direktoryo bago magpatuloy. Kaya:
$ cd ~
$ mkdir db410remoteroot $ cd db410remoteroot $ mkdir toolchain $ mkdir db410c-modules
Sa kasamaang palad, ang linux kernel na ginamit ni Linaro (Bersyon 431) ay walang suporta para sa USB Ethernet gadget, dahil doon, dapat na muling itayo ang Linux kernel para sa tukoy na bersyon na ito. I-download ang Linaro toolchain upang buuin at i-deploy ang linux kernel sa Dragonboard410c mula sa x86 host machine.
$ wget
$ tar -xf gcc - * - x86_64_aarch64-linux-gnu.tar.xz -C./toolchain --strip-sangkap = 1
I-install ngayon ang mga pakete na kinakailangan upang maitayo ang kernel:
$ sudo apt update && sudo apt-get install git build-essential abootimg kernel-package fakeroot libncurses5-dev libssl-dev ccache
Kunin ang Linux Kernel source Clone Qualcomm landing team na Repository ng Linux:
$ git clone
$ cd kernel $ git checkout pinagmulan / paglabas / qcomlt-4.14 -b my-custom-4.14
Ngayon, itakda ang mga variable ng kapaligiran sa compilation:
$ export ARCH = arm64
$ export CROSS_COMPILE = $ (pwd) /../ toolchain / bin / aarch64-linux-gnu-
Sa puntong ito, kailangan naming idagdag ang mga module sa USB Ethernet CDC sa kernel. Ginawa ko iyon dati at makukuha mo ito sa pagtatapos ng hakbang na ito. Inalis ko ang ilang mga itens ngunit gumagana ito.
Bago mag-ipon, mangyaring itama ang isang kernel bug sa mga driver / mmc / host / sdhci-msm.c na binabago ang istruktura sa linya na 1150 sa:
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};
I-compress ang configfile.zip, kopyahin ang.config file sa direktoryo ng kernel, bumuo ng kernel, mga module at mag-install ng mga module sa isang direktoryo:
$ make -j $ (nproc) Image.gz dtbs
Mga module na $ make -j $ (nproc) $ make modules_install INSTALL_MOD_PATH =.. / db410c-modules
Sanggunian: Dokumentasyon ng 96Boards
Hakbang 3: Muling Itayo ang Boot.img sa HOST
Sa hakbang na ito, kailangan naming buksan ang initrd na imahe, ilagay ang mga module na itinayo sa loob ng imahe, i-configure ang system upang simulan ang mga module na iyon at muling itayo ang isang initrd.img na may isang bagong linya ng utos ng kernel upang mag-boot ng root filesystem mula sa malayo.
Kaya, una, kailangan naming mag-download ng initrd.img mula sa linaro website:
$ cd..
$ mkdir inird_nfs $ cd initrd_nfs $ wget -O ramdisk.img
Ngayon, pagkatapos ng pag-download, huwag i-compress at i-extract ang initrd:
$ zcat ramdisk.img | cpio -idmv
Sa direktoryo na ito, mayroon kaming root filesystem na ginamit ng kernel sa pagsisimula, kaya mai-configure namin ang mga module ng USB Ethernet CDC at mga malayuang parameter ng NFS tulad ng NFS server IP at ethernet (usb) na kinakailangan dito.
Ngayon, i-configure natin ang ilang mga file:
conf / initramfs.conf:
MODULES = karamihan
BUSYBOX = auto COMPRESS = gzip DEVICE = usb0 NFSROOT = auto RUNSIZE = 10%
Lumikha ng direktoryo init-premount sa mga script ng direktoryo /
$ mkdir script / init-premount
at idagdag ang mga file sa nilikha nitong direktoryo lamang:
ORDER
/ script / init-premount / usb "$ @"
[-e /conf/param.conf] &&. /conf/param.conf
usb
#! / bin / sh
PREREQ = "" prereqs () {echo "$ PREREQ"} kaso $ 1 sa # makakuha ng paunang mga kinakailangan na paunang kinakailangan) mga prereq exit 0;; esac modprobe usb_f_ecm modprobe libcomposite modprobe usb_f_rndis modprobe g_ether
Huwag kalimutang gamitin ang chmod sa usb file upang maisagawa ito:
$ chmod + x script / init-premount / usb
Ngayon, kopyahin ang lahat ng direktoryo gamit ang mga module mula sa db410c-modules (HAKBANG 2) hanggang sa lib / modules sa initrd:
$ cp -R../db410-modules/lib usr /
Alisin ang lahat ng mga file sa lib / modules / 4.14.96-xxxx-marumi maliban sa lahat ng module ng mga file. * At ang listahan ng file na iyon:
kernel / driver / usb / gadget / legacy / g_ether.ko
kernel / driver / usb / gadget / legacy / g_mass_storage.ko kernel / driver / usb / gadget / legacy / g_cdc.ko kernel / driver / usb / gadget / legacy / g_serial.ko kernel / driver / usb / gadget / function / usb_f_mass_storage.ko kernel / driver / usb / gadget / function / usb_f_acm.ko kernel / driver / usb / gadget / function / u_ether.ko kernel / driver / usb / gadget / function / usb_f_obex.ko kernel / driver / usb / gadget / function /usb_f_serial.ko kernel / driver / usb / gadget / function / usb_f_ecm.ko kernel / driver / usb / gadget / function / usb_f_rndis.ko kernel / driver / usb / gadget / function / u_serial.ko kernel / driver / usb / gadget /fungsi/usb_f_fs.ko kernel / driver / usb / gadget / function / usb_f_ecm_subset.ko kernel / driver / usb / gadget / libcomposite.ko
Ang mga file na iyon ay lahat ng mga module na kinakailangan upang simulan ang USB Ethernet CDC.
Sa wakas ay muling i-repack at i-compress ang initrd na imahe:
$ hanapin. | cpio -o -H newc | gzip -9>../kernel/initrd_nfs.img
Hindi bababa sa, ang imahe ng kernel at DTB file ay kailangang mai-pack sa isang imahe ng Android boot. Ang ganitong imahe ay maaaring mabuo gamit ang tool na abootimg.
Nasa direktoryo ng kernel at gamitin ang utos sa ibaba upang bumuo ng imahe at idagdag ang DTB sa naka-compress na imahe ng kernel:
$ cd../kernel
$ cat arch / $ ARCH / boot / Image.gz arch / $ ARCH / boot / dts / qcom / apq8016-sbc.dtb> Image.gz + dtb
At sa wakas, bumuo ng imahe ng boot (narito ang aming mga rootf ay matatagpuan sa isang malayong pagkahati sa 10.42.0.1)
abootimg - Lumikha ng 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"
Mga Sanggunian:
- https://access.redhat.com/solutions/24029
- Dokumentasyon ng 96Boards
Hakbang 4: Lumilikha ng Root Filesystem sa HOST
Ngayon, mayroon kaming bagong imahe ng boot upang mai-update ang dragonboard 410c. Ngunit kailangan namin ng isang root filesystem sa remote server upang mag-boot ng mga module, serbisyo at application. Sa hakbang na ito, magtatayo kami ng isang nakabahaging direktoryo sa host upang mai-save ang lahat ng data na ito. Sa ganoong paraan, mag-download tayo ng isang rootfs filesystem mula sa linaro site na may parehong bersyon na ginamit sa initrd. Kaya, bumalik sa isang direktoryo at i-download ang linaro-developer rootfs na imahe na may bersyon 431.
$ cd..
$ wget
I-compress ang file na ito
$ unzip dragonboard-410c-sdcard-developer-buster-431.zip
Gamit ang file na ito, isulat natin ang lahat ng imahe sa isang sdcard upang ma-access ang lahat ng mga pagkahati at kopyahin ang mga file ng rootfs. Kaya, tiyakin na ang data mula sa uSDCard ay nai-back up dahil ang lahat sa SDCard ay mawawala.
Upang hanapin ang iyong pangalan ng aparato ng SDCard, alisin ang SDCard at patakbuhin ang sumusunod na utos:
$ lsblk
I-save sa iyong isip ang lahat ng kinikilalang mga pangalan ng disk. Ipasok ngayon ang SDCard, maghintay ng sandali at ipatupad muli ang utos:
$ lsblk
Tandaan ang bagong kinikilalang disk. Ito ang iyong SDCard. Tandaan ang iyong pangalan at baguhin ang parameter na "ng =" para sa iyong pangalan ng aparato ng SDCard at tiyaking gagamitin ang pangalan ng aparato nang walang paghati, p.e.: / dev / mmcblk0
$ sudo dd if = dragonboard-410c-sdcard-developer-buster-431.img ng = / dev / XXX bs = 4M oflag = sync status = pagsulong
Mga Tala:
- Ang utos na ito ay magtatagal upang maisagawa. Maging mapagpasensya at iwasang pakialaman ang terminal hanggang matapos ang proseso.
- Kapag natapos ang pag-flashing ng SD card, alisin mula sa host computer.
Sanggunian: dokumentasyon ng 96boards
Hakbang 5: Lumilikha ng Server NFS sa HOST at Pagkopya ng Mga File
Sa puntong ito, mayroon kaming isang imahe ng boot na mai-flash sa dragonboard 410c at isang SDCard na may isang rootfs filesystem para sa amin mga module, serbisyo at application. Ang susunod na hakbang ay lumikha ng isang remote na direktoryo upang ikonekta ang toguther ng USB Ethernet DEVICE na may HOST rootfs filesystem. Magagawa iyon sa pamamagitan ng isang pakete mula sa Ubuntu na pinangalanang nfs-kernel-server.
Ang pakete na ito ay nag-install ng isang serbisyo ng NFS sa Ubuntu na nagpapahintulot na ibahagi ang ilang mga direktoryo para sa ilang mga aparato sa network, maaari naming mai-configure kung aling direktoryo ang gagamitin para sa bawat aparato sa pamamagitan ng paggamit ng iyong IP.
Kaya, i-install natin ang package at i-configure ito.
$ sudo apt-get install nfs-kernel-server
Awtomatikong nagsisimula ang serbisyo ng NFS. Upang makontrol ang paggamit ng mga serbisyo ng NFS:
$ sudo service nfs-kernel-server restart // upang muling simulan, o gamitin ang 'stop', o 'start' kung kinakailangan.
Upang suriin ang katayuan ng serbisyo ng NFS mula sa paggamit ng linya ng utos:
$ sudo service nfs-kernel-server status
nfsd tumatakbo // Serbisyo ay Up nfsd hindi tumatakbo // Serbisyo ay Down
Ngayon, lumikha tayo ng isang nangungunang direktoryo / srv / nfs, at lumikha ng isang subdirectory sa ilalim nito para sa bawat kinakailangang naka-mount na root file ng NFS. Nagsasama kami rito ng isang nakabahaging root filesystem upang mapanatili ang aming root filesystem:
$ sudo mkdir -p / srv / nfs
$ sudo mkdir -p / srv / nfs / rootfs
Ngayon, ang NFS server ay nangangailangan ng / etc / export na mai-configure nang tama, upang makontrol ang pag-access sa bawat direktoryo ng NFS filesystem sa mga tukoy na host. Sa kasong ito ang mga host ay nakilala ng kanilang IP address. Kaya, para sa bawat root filesystem na nilikha, idagdag ang linya ng kontrol sa pag-export sa / etc / export, pagsasaayos para sa iyong lokal na IP address at scheme ng pagbibigay ng direktoryo kung kinakailangan. Sa tutorial na ito, palagi naming ginagamit iyon:
/ srv / nfs / rootfs 10.42.0.2 (rw, sync, no_root_squash, no_subtree_check)
Ipasok muli ang iyong SDCard, i-mount ito at kopyahin ang lahat ng mga rootfs filesystem sa / srv / nfs / rootfs, i-restart ang serbisyo ng NFS upang i-update ang direktoryo gamit ang mga bagong nakopyang file.
Bilang karagdagan, kailangan naming kopyahin ang mga bagong file ng mga module sa rootfs filesystem dahil naipon namin ang kernel sa hakbang 2. Kaya, kopyahin ang lahat ng mga direktoryo sa ~ / db410c-modules / to / srv / nfs / rootfs.
$ sudo cp -R ~ / db410c-modules / * / srv / nfs / rootfs /
Tiyaking ang mga direktoryo na ito ay nakikita ng serbisyo ng NFS. Alinman:
$ sudo exportfs -a
Sanggunian: TFTP / NFS Root Filesystem
Hakbang 6: Ina-update ang Dragonboard 410c Boot Image at Pag-configure ng Mga Interface ng Network
Maaga naming ginawa ang lahat ng mga hakbang upang magpatupad ng isang remote rootfs filesystem, kailangan namin ngayong i-update ang imahe ng boot sa loob ng dragonboard 410c, para doon, ikonekta ang iyong USB cable sa PC at sa konektor ng dragonboard uUSB. Kaya tiyaking naka-set up ang fastboot sa host computer, kung hindi mai-install gamit ang:
$ sudo apt i-install ang fastboot
Ngayon upang mai-update ang imahe, simulan ang de dragonboard sa fastboot mode na sumusunod sa mga hakbang na ito:
- Pindutin nang matagal ang Vol (-) na pindutan sa DragonBoard 410c, ito ang S4 na pindutan. Ang DragonBoard ™ 410c ay HINDI pa rin dapat pinalakas
- Habang hinahawakan ang pindutang Vol (-), lakas sa DragonBoard 410c sa pamamagitan ng pag-plug in dito
- Kapag ang DragonBoard 410c ay naka-plug sa lakas, bitawan ang iyong paghawak sa pindutang Vol (-).
- Maghintay para sa mga 20 segundo.
- Ang board ay dapat na mag-boot sa mode ng fastboot.
Mula sa nakakonekta na window ng terminal ng machine ng host, patakbuhin ang mga sumusunod na utos:
$ sudo mga fastboot na aparato
Karaniwan ay ipapakita ito sa ibaba
de82318 fastboot
Sa puntong ito dapat kang konektado sa iyong DragonBoard 410c gamit ang isang USB sa microUSB cable. Ang iyong DragonBoard 410c ay dapat na na-boot sa fastboot mode at handa nang mai-flash gamit ang naaangkop na mga imahe. I-update natin ang imahe ng boot sa aming imahe ng boot:
$ sudo fastboot flash boot ~ / db410remoteroot / kernel / initrd_nfs.img
At, i-restart ang board
$ sudo fastboot reboot
Ngayon, ang iyong HOST ay makakakita ng isang bagong interface na pinangalanang usb0, ngunit wala pa itong isang IP. Kaya, magdagdag ng isang static IP sa interface na ito gamit ang:
$ sudo ifconfig usb0 10.42.0.1 netmask 255.255.255.0 pataas
O ipasok ang "Configuration" sa HOST, sa item na "network", na nagtatakda ng USB Ethernet ng isang static IP sa interface na iyon.
Ngayon, muling simulan muli ang dragonboard at i-verify ang pagsisimula ng system, sinusubukan na kumonekta gamit ang ssh:
$ ssh [email protected]
Mga Sanggunian:
- Dokumentasyon ng 96boards
- HowtoForge - Item 6