Оглавление:
- Шаг 1. Требования
- Шаг 2: Настройка хоста для сборки ядра и сборки ядра в HOST
- Шаг 3: Восстановите Boot.img на ХОСТЕ
- Шаг 4: Создание корневой файловой системы на HOST
- Шаг 5: Создание серверной NFS на HOST и копирование файлов
- Шаг 6: Обновление загрузочного образа Dragonboard 410c и настройка сетевых интерфейсов
Видео: Доступ к удаленной корневой файловой системе с использованием DB410 в качестве ключа Ethernet: 6 шагов
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:52
Цели:
- Установите набор инструментов и перекомпилируйте ядро, чтобы добавить поддержку USB Ethernet CDC Gadget;
- Воссоздайте boot.img из Linaro для загрузки USB Ethernet CDC;
- Создайте сервер NFS для размещения корневой файловой системы;
- Конфигурация IP в DEVICE и HOST.
Шаг 1. Требования
Вам понадобятся следующие предметы:
- DragonBoard ™ 410c (названный здесь УСТРОЙСТВО);
- ПК с обновленным Ubuntu 16.04.3 (названный здесь HOST) с подключением к Интернету и слотом для SDCard;
- Чистая установка Linaro-developer версии 431 - Ссылка: Снимок Linaro Debian v431
- Монитор HDMI;
- USB-клавиатура;
- SDCard 8 ГБ;
- Кабель USB, uUSB USB для подключения УСТРОЙСТВА на ХОСТЕ.
Шаг 2: Настройка хоста для сборки ядра и сборки ядра в HOST
Сначала мы создадим все каталоги, прежде чем продолжить. Так:
$ cd ~
$ mkdir db410remoteroot $ cd db410remoteroot $ mkdir toolchain $ mkdir db410c-modules
К сожалению, ядро Linux, используемое Linaro (версия 431), не поддерживает гаджет USB Ethernet, из-за этого ядро Linux необходимо перекомпилировать для этой конкретной версии. Загрузите набор инструментов Linaro для сборки и развертывания ядра Linux на Dragonboard410c с хост-машины x86.
$ wget
$ tar -xf gcc - * - x86_64_aarch64-linux-gnu.tar.xz -C./toolchain --strip-components = 1
Теперь установите пакеты, необходимые для сборки ядра:
$ sudo apt update && sudo apt-get install git build-essential abootimg kernel-package fakeroot libncurses5-dev libssl-dev ccache
Получить исходный код ядра Linux Репозиторий Linux целевой группы Clone Qualcomm:
$ git clone
$ cd ядро $ git checkout origin / release / qcomlt-4.14 -b my-custom-4.14
Теперь установите переменные среды компиляции:
$ экспорт ARCH = arm64
$ экспорт CROSS_COMPILE = $ (pwd) /../ toolchain / bin / aarch64-linux-gnu-
На этом этапе нам нужно добавить модули к USB Ethernet CDC в ядре. Я делал это раньше, и вы можете получить это в конце этого шага. Я удалил некоторые itens, но это работает.
Перед компиляцией исправьте ошибку ядра в drivers / mmc / host / sdhci-msm.c, изменив структуру в строке 1150 на:
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};
Распакуйте configfile.zip, скопируйте файл.config в каталог ядра, соберите ядро, модули и установите модули в каталог:
$ make -j $ (nproc) Image.gz dtbs
$ make -j $ (nproc) modules $ make modules_install INSTALL_MOD_PATH =.. / db410c-modules
Ссылка: Документация 96Boards
Шаг 3: Восстановите Boot.img на ХОСТЕ
На этом этапе нам нужно открыть образ initrd, поместить встроенные в образ модули, настроить систему для запуска этих модулей и перестроить initrd.img с новой командной строкой ядра для удаленной загрузки корневой файловой системы.
Итак, сначала нам нужно скачать initrd.img с сайта linaro:
$ cd..
$ mkdir inird_nfs $ cd initrd_nfs $ wget -O ramdisk.img
Теперь, после загрузки, распакуйте и извлеките initrd:
$ zcat ramdisk.img | cpio -idmv
В этом каталоге у нас есть корневая файловая система, используемая ядром при инициализации, поэтому мы настроим модули USB Ethernet CDC и удаленные параметры NFS, такие как IP-адрес сервера NFS и Ethernet (usb), необходимые здесь.
Теперь давайте настроим несколько файлов:
conf / initramfs.conf:
МОДУЛИ = большинство
BUSYBOX = auto COMPRESS = gzip DEVICE = usb0 NFSROOT = auto RUNSIZE = 10%
Создайте каталог init-premount в каталоге scripts /
Скрипты $ mkdir / init-premount
и добавьте файлы в только что созданный каталог:
ПОРЯДОК
/ scripts / init-premount / usb "$ @"
[-e /conf/param.conf] &&. /conf/param.conf
USB
#! / bin / sh
PREREQ = "" prereqs () {echo "$ PREREQ"} case $ 1 in # получить предварительные условия prereqs) prereqs exit 0;; esac modprobe usb_f_ecm modprobe libcomposite modprobe usb_f_rndis modprobe g_ether
Не забудьте использовать chmod в файле usb, чтобы сделать его исполняемым:
$ chmod + x скрипты / init-premount / usb
Теперь скопируйте весь каталог с модулями из db410c-modules (ШАГ 2) в lib / modules в initrd:
$ cp -R../db410-modules/lib usr /
Удалите все файлы в lib / modules / 4.14.96-xxxx-dirty, кроме всех файлов module. * И этого списка файлов:
ядро / драйверы / usb / гаджет / наследие / 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 / gadget /function/usb_f_fs.ko ядро / драйверы / usb / гаджет / функция / usb_f_ecm_subset.ko ядро / драйверы / usb / гаджет / libcomposite.ko
Эти файлы - все модули, необходимые для запуска USB Ethernet CDC.
Наконец, перепакуйте и сожмите образ initrd:
$ найти. | 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 --create 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"
Использованная литература:
- https://access.redhat.com/solutions/24029
- 96Boards Документация
Шаг 4: Создание корневой файловой системы на HOST
Теперь у нас есть новый загрузочный образ для обновления Dragonboard 410c. Но нам нужна корневая файловая система на удаленном сервере для загрузки модулей, служб и приложений. На этом этапе мы создадим общий каталог на хосте для сохранения всех этих данных. Таким образом, давайте загрузим файловую систему rootfs с сайта linaro с той же версией, что и в initrd. Итак, вернитесь на один каталог и загрузите образ rootfs linaro-developer с версией 431.
$ cd..
$ wget
Распаковать этот файл
$ распаковать dragonboard-410c-sdcard-developer-buster-431.zip
Используя этот файл, давайте запишем весь образ на SD-карту для доступа ко всем разделам и копирования файлов rootfs. Поэтому убедитесь, что данные с uSDCard скопированы, потому что все на SDCard будет потеряно.
Чтобы найти имя устройства SDCard, удалите SDCard и выполните следующую команду:
$ lsblk
Сохраните в памяти все распознанные имена дисков. Теперь вставьте SDCard, подождите немного и снова выполните команду:
$ lsblk
Обратите внимание на недавно распознанный диск. Это будет ваша SDCard. Запомните свое имя и измените параметр «of =» для имени устройства SDCard и обязательно используйте имя устройства без раздела, p.e.: / dev / mmcblk0
$ sudo dd if = dragonboard-410c-sdcard-developer-buster-431.img of = / dev / XXX bs = 4M oflag = статус синхронизации = прогресс
Примечания:
- Выполнение этой команды займет некоторое время. Наберитесь терпения и не вмешивайтесь в работу терминала до завершения процесса.
- После того, как SD-карта будет мигать, удалите ее из главного компьютера.
Ссылка: документация 96boards
Шаг 5: Создание серверной NFS на HOST и копирование файлов
На этом этапе у нас есть загрузочный образ, который нужно записать в dragonboard 410c, и SDCard с файловой системой rootfs для наших модулей, сервисов и приложений. Следующим шагом является создание удаленного каталога для подключения УСТРОЙСТВА USB Ethernet вместе с файловой системой rootfs HOST. Это можно сделать с помощью пакета от Ubuntu с именем nfs-kernel-server.
Этот пакет устанавливает службу NFS в Ubuntu, позволяющую совместно использовать некоторые каталоги для некоторых устройств в сети, мы можем настроить, какой каталог будет использоваться для каждого устройства, используя ваш IP-адрес.
Итак, давайте установим пакет и настроим его.
$ sudo apt-get install nfs-kernel-server
Служба NFS запускается автоматически. Для управления службами NFS используйте:
$ sudo service nfs-kernel-server restart // для перезапуска, либо используйте «stop» или «start» по мере необходимости.
Чтобы проверить статус службы NFS из командной строки, используйте:
$ sudo service nfs-kernel-server статус
nfsd работает // Служба работает nfsd не работает // Служба не работает
Теперь давайте создадим верхний каталог / srv / nfs и создадим в нем подкаталог для каждой необходимой смонтированной корневой файловой системы NFS. Здесь мы включаем общую корневую файловую систему, чтобы сохранить нашу корневую файловую систему:
$ sudo mkdir -p / srv / nfs
$ sudo mkdir -p / srv / nfs / rootfs
Теперь сервер NFS требует правильной настройки / etc / exports, чтобы контролировать доступ к каждому каталогу файловой системы NFS для определенных хостов. В этом случае хосты идентифицируются по их IP-адресу. Итак, для каждой созданной корневой файловой системы добавьте строку управления экспортом в / etc / exports, при необходимости изменив свой локальный IP-адрес и схему именования каталогов. В этом уроке мы всегда используем это:
/ srv / nfs / rootfs 10.42.0.2 (rw, синхронизация, no_root_squash, no_subtree_check)
Снова вставьте SDCard, смонтируйте ее и скопируйте всю файловую систему rootfs в / srv / nfs / rootfs, перезапустите службу NFS, чтобы обновить каталог с использованием новых скопированных файлов.
Кроме того, нам нужно скопировать новые файлы модулей в файловую систему rootfs, потому что мы скомпилировали ядро на шаге 2. Итак, скопируйте все каталоги в ~ / db410c-modules / в / srv / nfs / rootfs.
$ sudo cp -R ~ / db410c-modules / * / SRV / nfs / rootfs /
Убедитесь, что эти каталоги сделаны видимыми службой NFS. Или:
$ sudo exportfs -a
Ссылка: Корневая файловая система TFTP / NFS
Шаг 6: Обновление загрузочного образа Dragonboard 410c и настройка сетевых интерфейсов
Мы заранее сделали все шаги для реализации удаленной файловой системы rootfs, теперь нам нужно обновить загрузочный образ внутри dragonboard 410c, для этого подключите свой USB-кабель к ПК и к разъему uUSB dragonboard. Поэтому убедитесь, что fastboot настроен на хост-компьютере, если установка не выполняется с помощью:
$ sudo apt install fastboot
Теперь, чтобы обновить изображение, запустите Dragonboard в режиме быстрой загрузки, выполнив следующие действия:
- Нажмите и удерживайте кнопку громкости (-) на DragonBoard 410c, это кнопка S4. DragonBoard ™ 410c по-прежнему НЕ должен быть включен
- Удерживая кнопку Vol (-), включите DragonBoard 410c, подключив его к розетке.
- Когда DragonBoard 410c подключен к источнику питания, отпустите кнопку Vol (-).
- Подождите примерно 20 секунд.
- Плата должна загрузиться в режиме быстрой загрузки.
В окне терминала подключенного хост-компьютера выполните следующие команды:
устройства $ sudo fastboot
Обычно это будет выглядеть так, как показано ниже
de82318 fastboot
На этом этапе вы должны быть подключены к DragonBoard 410c с помощью кабеля USB-microUSB. Ваш DragonBoard 410c должен быть загружен в режим быстрой загрузки и готов к прошивке с соответствующими образами. Давайте обновим загрузочный образ нашим загрузочным образом:
$ sudo fastboot flash boot ~ / db410remoteroot / kernel / initrd_nfs.img
И перезапустите доску
$ sudo fastboot перезагрузка
Теперь ваш HOST обнаружит новый интерфейс с именем usb0, но у него еще нет IP. Итак, добавьте статический IP-адрес к этому интерфейсу, используя:
$ sudo ifconfig usb0 10.42.0.1 сетевая маска 255.255.255.0 вверх
Или войдите в «Конфигурация» на HOST, в пункте «сеть», установив статический IP-адрес USB Ethernet для этого интерфейса.
Теперь снова перезапустите Dragonboard и проверьте запуск системы, пытаясь подключиться с помощью ssh:
$ ssh [email protected]
Использованная литература:
- Документация 96boards
- HowtoForge - Пункт 6
Рекомендуемые:
Доступ к файловой системе Raspberry Pi через Windows: 9 шагов
Получите доступ к файловой системе Raspberry Pi через Windows: у вас когда-нибудь был Raspberry Pi, и вы не понимали: «Мне каждый раз приходится настраивать его с помощью монитора, мыши и клавиатуры!» Разочарование, которое вызывает отключение / повторное подключение монитора и клавиатуры / мыши, просто для доступа к Raspberry Pi не имеет себе равных
Устройство открывания гаражных ворот с обратной связью с использованием Esp8266 в качестве веб-сервера: 6 шагов
Устройство открывания гаражных ворот с обратной связью с использованием Esp8266 в качестве веб-сервера: Привет, я покажу вам, как сделать простой способ открытия ворот гаража. ESP8266 закодирован как веб-сервер, дверь может быть открыта повсюду в мире. обратная связь, вы будете знать, открыта или закрыта дверь в режиме реального времени - Просто, всего один ярлык, чтобы я
Создание любительского радио APRS RX Only IGate с использованием Raspberry Pi и RTL-SDR ключа менее чем за полчаса: 5 шагов
Создание любительского радио только APRS RX IGate с использованием Raspberry Pi и RTL-SDR ключа менее чем за полчаса: обратите внимание, что сейчас он довольно старый, поэтому некоторые части неверны и устарели. Файлы, которые вам нужно отредактировать, изменились. Я обновил ссылку, чтобы предоставить вам последнюю версию изображения (используйте 7-zip для ее распаковки), но для получения полной инструкции
Как использовать Wiimote в качестве компьютерной мыши, используя свечи в качестве датчика !!: 3 шага
Как использовать Wiimote в качестве компьютерной мыши с использованием свечей в качестве датчика !!: это руководство покажет вам, как подключить Wii Remote (Wiimote) к компьютеру и использовать его в качестве мыши
Взлом удаленной домашней безопасности за 10 долларов: 7 шагов
Взлом удаленной домашней безопасности за 10 долларов: превратите обычную недорогую веб-камеру в скрытую домашнюю систему безопасности, которую можно увидеть в любой точке мира со своего мобильного телефона! Я очень надеюсь, что вам это понравится, и если вы хотите лучше понять проект, вы можете посмотреть мое видео