Оглавление:

Доступ к удаленной корневой файловой системе с использованием DB410 в качестве ключа Ethernet: 6 шагов
Доступ к удаленной корневой файловой системе с использованием DB410 в качестве ключа Ethernet: 6 шагов

Видео: Доступ к удаленной корневой файловой системе с использованием DB410 в качестве ключа Ethernet: 6 шагов

Видео: Доступ к удаленной корневой файловой системе с использованием DB410 в качестве ключа Ethernet: 6 шагов
Видео: Как исправить RAW диск или флешку? Исправление ошибок файловой системы RAW 2024, Ноябрь
Anonim
Доступ к удаленной корневой файловой системе с использованием DB410 в качестве ключа Ethernet
Доступ к удаленной корневой файловой системе с использованием DB410 в качестве ключа Ethernet

Цели:

  • Установите набор инструментов и перекомпилируйте ядро, чтобы добавить поддержку USB Ethernet CDC Gadget;
  • Воссоздайте boot.img из Linaro для загрузки USB Ethernet CDC;
  • Создайте сервер NFS для размещения корневой файловой системы;
  • Конфигурация IP в DEVICE и HOST.

Шаг 1. Требования

Вам понадобятся следующие предметы:

  1. DragonBoard ™ 410c (названный здесь УСТРОЙСТВО);
  2. ПК с обновленным Ubuntu 16.04.3 (названный здесь HOST) с подключением к Интернету и слотом для SDCard;
  3. Чистая установка Linaro-developer версии 431 - Ссылка: Снимок Linaro Debian v431
  4. Монитор HDMI;
  5. USB-клавиатура;
  6. SDCard 8 ГБ;
  7. Кабель 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

Рекомендуемые: