DB410ду Ethernet Dongle катары колдонуу менен Remote Root Files системасына кирүү: 6 кадам
DB410ду Ethernet Dongle катары колдонуу менен Remote Root Files системасына кирүү: 6 кадам
Anonim
DB410ду Ethernet Dongle катары колдонуп, алыскы тамыр файл тутумуна кирүү
DB410ду Ethernet Dongle катары колдонуп, алыскы тамыр файл тутумуна кирүү

Максаттар:

  • USB Ethernet CDC гаджетинин колдоосун киргизүү үчүн инструменттер чынжырын орнотуп, ядроду кайра түзүңүз;
  • USB Ethernet CDC жүктөө үчүн Linaroдан boot.img кайра жаратыңыз;
  • Тамыр файл тутумун жайгаштыруу үчүн NFS серверин түзүү;
  • DEVICE жана HOST ичиндеги IP конфигурациясы.

1 -кадам: Талаптар

Сизге төмөнкү белгилер керек болот:

  1. A DragonBoard ™ 410c (бул жерде DEVICE деп аталат);
  2. Ubuntu 16.04.3 колдонулган PC интернет байланышы жана SDCard уячасы менен жаңыртылган (бул жерде HOST деп аталат);
  3. Linaro -иштеп чыгуучу 431 версиясынын таза орнотулушу - Шилтеме: Snapshot Linaro Debian v431
  4. HDMI монитор;
  5. USB клавиатурасы;
  6. 8 Гб SDCard;
  7. A USB кабели, uUSB USB HOST боюнча DEVICE туташтыруу үчүн.

2 -кадам: Hostту ядро куруу үчүн хостту конфигурациялоо жана HOSTто ядро куруу

Биринчиден, биз улантуу үчүн мурун бардык каталогдорду түзөбүз. Ошентип:

$ cd ~

$ mkdir db410remoteroot $ cd db410remoteroot $ mkdir инструменти $ mkdir db410c-модулдары

Тилекке каршы, Linaro (431 -версия) колдонгон Linux ядросу USB Ethernet гаджетин колдобойт, ошого байланыштуу Linux ядросу ушул конкреттүү версия үчүн кайра түзүлүшү керек. X86 хост машинасынан Dragonboard410cке Linux ядросун куруу жана жайылтуу үчүн Linaro инструментин жүктөп алыңыз.

$ wget

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

Эми ядро куруу үчүн керектүү пакеттерди орнотуңуз:

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

Linux Kernel булагын алыңыз Clone Qualcomm десанттык командасы Linux репозиторийи:

$ git клону

$ cd ядро $ git checkout check/release/qcomlt-4.14 -b my-custom-4.14

Эми, компиляция чөйрөсүнүн өзгөрмөлөрүн коюңуз:

$ экспорт ARCH = arm64

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

Бул жерде биз модулдарды ядродогу USB Ethernet CDCге кошушубуз керек. Мен муну мурун эле кылганмын жана сиз бул кадамдын аягында ала аласыз. Мен кээ бир нерселерди алып салдым, бирок ал иштейт.

Компиляциядан мурун, драйвердеги ядро катасын оңдоңуз/mmc/host/sdhci-msm.c, 1150-саптагы структураны өзгөртүп:

статикалык структура 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};

Configfile.zip файлын ачпаңыз,.config файлын ядро каталогуна көчүрүңүз, ядро, модулдарды куруңуз жана каталогго модулдарды орнотуңуз:

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

$ make -j $ (nproc) модулдары $ make modules_install INSTALL_MOD_PATH =../db410c -модулдары

Шилтеме: 96Boards Documentation

3 -кадам: HOSTто Boot.img кайра

Бул кадамда биз initrd сүрөтүн ачышыбыз керек, сүрөттүн ичине курулган модулдарды коюшубуз керек, системаны ошол модулдарды баштоо үчүн конфигурациялоо керек жана rootrd файл тутумун алыстан жүктөө үчүн initrd.img файлын жаңы ядро буйругу менен калыбына келтиришибиз керек.

Ошентип, биринчиден, linaro веб -сайтынан initrd.img жүктөп алышыбыз керек:

$ cd..

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

Эми, жүктөп алгандан кийин, ачыңыз жана initrdди чыгарыңыз:

$ zcat ramdisk.img | cpio -idmv

Бул каталогдо бизде ядро тарабынан инициализацияда колдонулган тамыр файл тутуму бар, ошондуктан биз USB Ethernet CDC модулдарын жана NFS серверинин IP жана ethernet (usb) сыяктуу алыскы параметрлерин конфигурациялайбыз.

Эми кээ бир файлдарды конфигурациялайбыз:

conf/initramfs.conf:

МОДУЛДАР = эң

BUSYBOX = авто КЫШУУ = gzip DEVICE = usb0 NFSROOT = авто RUNSIZE = 10%

Каталог скрипттеринде init-premount каталогун түзүңүз/

$ mkdir скрипттери/init-premount

жана бул жаңы түзүлгөн каталогго файлдарды кошуңуз:

ЗАКАЗ

/скрипттер/init-premount/usb "$@"

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

usb

#!/bin/sh

PREREQ = "" prereqs () {echo "$ PREREQ"} case $ 1 in # in pre-Requestites prereqs) преректтер чыгуу 0;; esac modprobe usb_f_ecm modprobe libcomposite modprobe usb_f_rndis modprobe g_ether

Аны аткаруу үчүн chmod файлын usb файлында колдонууну унутпаңыз:

$ chmod +x скрипттери/init-premount/usb

Эми, бардык каталогду db410c-модулдарынан (2-КАДАМ) модулдары менен либр/модулдарга initrd көчүрүңүз:

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

Lib/modules/4.14.96-xxxx-kir файлдар модулунан башка бардык файлдарды алып салыңыз.* Жана ал файл тизмеси:

ядро/драйверлер/usb/гаджет/мурас/g_ether.ko

ядро/драйверлер/usb/gadget/legacy/g_mass_storage.ko ядро/драйверлер/usb/гаджет/мурас/g_cdc.ko ядро/драйверлер/usb/gadget/legacy/g_serial.ko ядро/драйверлер/usb/гаджет/функция/usb_f_mass_storage.ko ядро/драйверлер/usb/гаджет/функция/usb_f_acm.ko ядро/драйверлер/usb/гаджет/функция/u_ether.ko ядро/драйверлер/usb/гаджет/функция/usb_f_obex.ko ядро/драйверлер/usb/гаджет/функция /usb_f_serial.ko ядро/драйверлер/usb/гаджет/функция/usb_f_ecm.ko ядро/драйверлер/usb/гаджет/функция/usb_f_rndis.ko ядро/драйверлер/usb/гаджет/функция/u_serial.ko ядро/драйверлер/usb/гаджет /function/usb_f_fs.ko ядро/драйверлер/usb/гаджет/функция/usb_f_ecm_subset.ko ядро/драйверлер/usb/гаджет/libcomposite.ko

Бул файлдар USB Ethernet CDC баштоо үчүн зарыл болгон бардык модулдар.

Акыры, баштапкы сүрөттү кайра таңып, кысыңыз:

$ табуу. | cpio -o -H newc | gzip -9>../kernel/initrd_nfs.img

Жок дегенде, ядро сүрөтү жана DTB файлы Android жүктөөчү сүрөтүнө топтолушу керек. Мындай сүрөттү abootimg куралы менен түзсө болот.

Келгиле, ядро каталогуна кирип, сүрөттү түзүү жана кысылган ядро сүрөтүнө DTB кошуу үчүн төмөнкү буйрукту колдонолу:

$ cd../kernel

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

Акырында, жүктөө сүрөтүн жаратыңыз (бул жерде биздин rootfs 10.42.0.1деги алыскы бөлүмдө жайгашкан)

abootimg -түзүү 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: өчүрүү rw rootwait консолу = tty0 консолу = ttyMSM0, 115200n8"

Шилтемелер:

  • https://access.redhat.com/solutions/24029
  • 96Boards Documentation

4 -кадам: HOSTто Root Files системасын түзүү

Эми бизде ажыдаар тактаны 410c жаңыртуу үчүн жаңы жүктөөчү сүрөт пайда болду. Бирок модулдарды, кызматтарды жана тиркемелерди жүктөө үчүн бизге алыскы сервердеги тамыр файл системасы керек. Бул кадамда, биз бул маалыматтардын бардыгын сактоо үчүн хостко бөлүшүлгөн каталог курабыз. Ошентип, initrdде колдонулган версиясы бар линаро сайтынан rootfs файл тутумун жүктөп алалы. Ошентип, бир каталогго кайтып, 431 версиясы менен linaro-developer rootfs сүрөтүн жүктөп алыңыз.

$ cd..

$ wget

Бул файлды ачыңыз

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

Бул файлды колдонуп, бардык бөлүктөргө кирүү жана rootfs файлдарын көчүрүү үчүн sdcardга бардык сүрөттү жазалы. Ошентип, uSDCardдагы маалыматтын камдык көчүрмөсүн камсыз кылыңыз, анткени SDCardдагы бардык нерселер жоголот.

SDCard түзмөгүңүздүн атын табуу үчүн, SDCardды алып салыңыз жана төмөнкү буйрукту аткарыңыз:

$ lsblk

Бардык таанылган диск аттарын эсиңизде сактаңыз. Эми SDCard салыңыз, бир аз күтө туруңуз жана буйрукту кайра аткарыңыз:

$ lsblk

Жаңы таанылган дискке көңүл буруңуз. Бул сиздин SDCard болот. Атыңызды унутпаңыз жана SDCard түзмөгүңүздүн атынын "of =" параметрин өзгөртүңүз жана түзмөктүн атын бөлүмсүз колдонуңуз, p.e.: /dev /mmcblk0

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

Эскертүүлөр:

  • Бул буйрукту аткаруу үчүн бир аз убакыт талап кылынат. Чыдамдуу болуңуз жана процесс аяктаганга чейин терминалды бузуудан алыс болуңуз.
  • SD карта жаркырап бүткөндөн кийин, башкы компьютерден алып салыңыз.

Шилтеме: 96 доска документтери

5 -кадам: HOSTто Server NFSти түзүү жана файлдарды көчүрүү

Бул жерде бизде жүктөөчү сүрөт бар, ажыдаарга 410c жана SDCard, биздин модулдар, кызматтар жана тиркемелер үчүн rootfs файл тутуму. Кийинки кадам - USB Ethernet DEVICE которгучун HOST rootfs файл тутуму менен туташтыруу үчүн алыскы каталогду түзүү. Бул Ubuntuдан nfs-kernel-server деген пакеттин жардамы менен жасалышы мүмкүн.

Бул пакет NFS кызматын Ubuntuго орнотуп, тармактын кээ бир түзмөктөрү үчүн кээ бир каталогдорду бөлүшүүгө мүмкүндүк берет, биз сиздин IPди колдонуу менен ар бир түзмөк үчүн кайсы каталог колдонуларын конфигурациялай алабыз.

Ошентип, келгиле, пакетти орнотуп, конфигурациялайбыз.

$ sudo apt-get nfs-kernel-server орнотуу

NFS кызматы автоматтык түрдө башталат. NFS кызматтарын колдонуу үчүн:

$ sudo кызматы nfs-kernel-server restart // кайра баштоо үчүн, же керек болсо 'stop' же 'start' колдонуңуз.

NFS кызматынын статусун буйрук сабынан текшерүү үчүн:

$ sudo кызматы nfs-ядро-сервер статусу

nfsd иштеп жатат // Кызмат өйдө турат nfsd иштебейт // Кызмат иштебейт

Эми, келгиле, жогорку каталогду /srv /nfs түзүп, анын астына ар бир NFSке орнотулган тамыр файл тутуму үчүн поддеректория түзөлү. Бул жерде биз өзүбүздүн түп файл тутумубузду сактап калуу үчүн бөлүшүлгөн тамыр файл тутумун камтыйбыз:

$ sudo mkdir -p /srv /nfs

$ sudo mkdir -p/srv/nfs/rootfs

Эми, NFS сервери /etc /export туура конфигурацияланышын, ар бир NFS файл тутумунун каталогуна белгилүү бир хостторго кирүүнү көзөмөлдөө үчүн талап кылат. Бул учурда, хосттор IP дареги боюнча аныкталат. Ошентип, түзүлгөн ар бир тамыр файл тутуму үчүн экспорттук контролдоо линиясын /etc /exportга кошуңуз, эгер зарыл болсо жергиликтүү IP дарегиңизди жана каталогдун аталыш схемасын тууралаңыз. Бул үйрөткүчтө биз дайыма муну колдонобуз:

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

SDCardыңызды кайра салыңыз, аны орнотуңуз жана бардык rootfs файл тутумун/srv/nfs/rootfsке көчүрүңүз, жаңы көчүрүлгөн файлдарды колдонуу менен каталогду жаңыртуу үчүн NFS кызматын өчүрүп күйгүзүңүз.

Мындан тышкары, биз жаңы модулдардын файлдарын rootfs файл тутумуна көчүрүшүбүз керек, анткени биз 2-кадамда ядро түздүк. Ошентип, бардык каталогдорду ~/db410c-modules/to/srv/nfs/rootfsке көчүрүңүз.

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

Бул каталогдор NFS кызматы тарабынан көрүнүп турушу керек. Же:

$ sudo exportfs -a

Шилтеме: TFTP/NFS Root Filesystem

6 -кадам: Dragonboard 410c жүктөө сүрөтүн жаңыртуу жана тармак интерфейстерин конфигурациялоо

Биз алыскы rootfs файл тутумун ишке ашыруу үчүн бардык кадамдарды жасадык, эми биз dragonboard 410c ичиндеги жүктөөчү сүрөттү жаңыртуубуз керек, ал үчүн USB кабелиңизди компьютерге жана ажыдаардын uUSB туташтыргычына туташтырыңыз. Ошентип, fastboot башкы компьютерде орнотулганын текшериңиз, эгерде аны орнотпосоңуз:

$ sudo apt fastboot орнотуу

Эми сүрөттү жаңыртуу үчүн, dragonboardду fastboot режимине баштаңыз, бул кадамдарды аткарыңыз:

  • DragonBoard 410c боюнча Vol (-) баскычын басып туруңуз, бул S4 баскычы. DragonBoard ™ 410c дагы эле күйгүзүлбөшү керек
  • Vol (-) баскычын кармап турганда, DragonBoard 410c'ду туташтырып күйгүзүңүз
  • DragonBoard 410c электр кубатына туташтырылганда, Vol (-) баскычын басып коюңуз.
  • Болжол менен 20 секунд күтө туруңуз.
  • Board fastboot режимине жүктөлүшү керек.

Туташкан хост машина терминалынын терезесинен төмөнкү буйруктарды аткарыңыз:

$ sudo fastboot түзмөктөрү

Адатта, ал төмөндөгүдөй көрсөтүлөт

de82318 fastboot

Бул жерде сиз DragonBoard 410cке USB менен microUSB кабели аркылуу туташышыңыз керек. Сиздин DragonBoard 410c тез жүктөө режимине жүктөлүп, тийиштүү сүрөттөр менен жаркыроого даяр болушу керек. Жүктөө сүрөтүн өзүбүздүн жүктөө сүрөтүбүз менен жаңыртып көрөлү:

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

Жана, такта кайра

$ sudo fastboot кайра жүктөө

Эми, сиздин ХОСТ usb0 аттуу жаңы интерфейсти аныктайт, бирок азырынча IPи жок. Ошентип, бул интерфейске статикалык IP кошуңуз:

$ sudo ifconfig usb0 10.42.0.1 netmask 255.255.255.0 чейин

Же HOSTтун "Тарам" бөлүмүнө "Ethernet" пунктуна кирип, USB Ethernetти ошол интерфейске статикалык IP катары коюңуз.

Эми, ажыдаар тактаны кайра өчүрүп күйгүзүңүз жана ssh аркылуу туташууга аракет кылып, тутумдун башталышын текшериңиз:

$ ssh [email protected]

Шилтемелер:

  • 96 доска документтери
  • HowtoForge - пункт 6

Сунушталууда: