11 июля 2019 г.

Embedded Linux на Zynq, как переместить файлы с компьютера на Linux

О том как запустить Linux на Zynq рассказано здесь.

По умолчанию для передачи файлов на Linux ядро от Xilinx, можно использовать несколько способов описанных на их wiki: xilinx-wiki.atlassian.net.

На рабочую систему файлы можно передавать как через Ethernet порт, так и через USB (UART) порт. Но т.к. файловая система находится в RAM, при выключении питания добавленные файлы пропадут, для их сохранения необходимо изменить файловую систему rootfs. Сперва рассмотрим передачу файлов через ethernet.

Стоит отметить, что по умолчанию U-Boot взятый от Xilinx, будет пытаться найти ядро Linux через Ethernet порт, перед тем как будет искать его на QSPI. Если кабель не подключен, то U-Boot переходит к следующему шагу, иначе это занимает довольно много времени, если ничего не менять, то он ничего не найдёт и перейдёт к следующему шагу.

Сперва проверим как настроена сеть. Для этого используется команда "ifconfig", которая выведет все включённые сетевые интерфейсы:


Рис.1 Выполнение команды ifconfig
Но в нашем случае ничего не включено. Также при соединении Ethernet кабелем Zynq и любое другое сетевое устройство (к примеру компьютер), лампочки на плате не горят и Linux никаким образом не реагирует на новое соединение.

Проверим какие сетевые интерфейсы сконфигурированы в системе используя команду
"ifconfig -a":

Рис.2 Выполнение команды ifconfig -a
Как видно в нашем случае есть несколько сетевых интерфейсов:
eth0 - первый ethernet интерфейс,
lo - loopback, подробней здесь,
sit0 - Simple Internet Transition, применяется для передачи IPv6 через IPv4, подробней.


Нас интересует eth0, в данный момент он выключен, для того чтобы его включить воспользуемся командой "ifconfig eth0 up":

Рис.3 Включение интерфейса
Теперь при просмотре включенных интерфейсов он будет отображаться:

Рис.4 Проверка включения интерфейса
И Linux реагирует на подключение нового сетевого устройства (Ethernet кабель к компьютеру и к Zybo, разъём RJ-45), как мигающими лампочками так и выводом информации в терминал:

Рис.5 Вывод терминала при подключении Ethernet устройства
Но, по умолчанию не установлен IP адрес, настроим всё необходимое и проверим ethernet соединение. Сперва настроим сетевое устройство к которому подключен Zybo, в моём случае это компьютер, на порте к которому подключена плата, необходимо установить корректный IP адрес. Главное чтобы оба устройства находились в одной подсети. Настройки следующие:
IP address 192.168.1.11
Subnet mask 255.255.255.0

Рис.6 Настройка IP компьютера
Для настройки Zybo используется команда "ifconfig eth0 192.168.1.10":

Рис.7 Настройка интерфейса
После этого можно проверить соединение с Zybo до компьютера, для этого используется команда "ping 192.168.1.11", для того чтобы прекратить выполнение команды используется комбинация "CTRL + C", иначе она будет выполняться вечно:

Рис.8 проверка соединения Zybo -> PC
Теперь можно проверить соединение компьютер -> Zybo в Windows используется та же команда, но теперь IP адрес Zybo "ping 192.168.1.10":

Рис.9 Проверка соединения PC -> Zybo
Теперь между устройствами установлена связь.

SFTP

1 Способ передачи файлов через SFTP, SSH File Transfer Protocol. Он включён по умолчанию в Zybo, ethernet настроен, должно всё работать. Для передачи файлов нужно установить какой-нибудь клиент на передающей стороне. Под Windows я использовал "psftp". По умолчанию логин и пароль для доступа к Zybo "root".
Переместим файл с компьютера D:/study/test_file.txt в Zybo /usr/:

Рис.10 Перемещение файла через sftp

ROOTFS

Файлы можно передавать в оба направления, но при выключении питания все проделанные изменения пропадут. Это происходит из-за того что файловая система находится в оперативной памяти (RAM). Для того чтобы файлы не пропадали при выключении питания их необходимо добавить в файловую систему rootfs, и заново переписать загрузочный образ BOOT.bin. Таким же образом устанавливаются дополнительные программы на нашу систему.

Описание необходимых действий указано здесь: xilinx-wiki.atlassian.net.

Если используется rootfs с уже добавленным U-boot заголовком, то сперва его необходимо убрать, иначе не получиться разархивировать. Если файл находится в корневом каталоге, то используется команда:
"dd if=uramdisk.image.gz bs=64 skip=1 of=ramdisk.gz", файл с сжатой файловой системой, с добавленным заголовком носит название "uramdisk.image.gz", рядом появится новый файл "ramdisk.gz" без заголовка.

Рис.11 Удаление заголовка из файла
Далее его необходимо разархивировать используя команду "gunzip ramdisk.gz"

Рис.12 Разархивирование файла
В итоге мы получили образ файловой системы, для его изменения его необходимо смонтировать. Сперва изменим права доступа к файлу, необходимо разрешить его выполнение, для этого применяется команда
"chmod u+rwx ramdisk".

Далее создадим папку "tmp_mnt", в которую будет смонтирована система, используя команду "mkdir tmp_mnt".

Осталось смонтировать систему командой:
"sudo mount -o loop ramdisk tmp_mnt"

Рис.13 Изменение приоритетов и монтирование образа
Теперь файловая система смонтирована и в неё можно вносить изменения. Ради примера создадим файл rootfs_test_file.txt и переместим его в директорию /usr/, команды:
"cat > rootfs_test_file.txt" - создаём новый файл и открываем его для записи
"CTRL+C" - для того чтобы прекратить запись в файл и закрыть его
"sudo mv rootfs_test_file.txt tmp_mnt/usr/" - перемещаем файл
"ls tmp_mnt/usr" - вывод содержимого для проверки

Рис.14 Создание файла и его перемещение
После изменений, необходимо размонтировать файл, сжать его и добавить к нему U-boot заголовок, команды:
"sudo umount tmp_mnt/" - размонтирование
"gzip ramdisk" - сжатие
"u-boot-xlnx/tools/mkimage -A arm -T ramdisk -C gzip -d ramdisk.gz uramdisk.image.gz" - добавление U-boot заголовка, для этого необходима утилита mkimage поставляемая вместе с U-boot рассмотрено было в предыдущем уроке.

Рис.15 Архивирование файла и добавление заголовка
Файл готов, можно делать новый загрузочный файл и проверять, как это делать рассмотрено было ранее.

После запуска Linux можно убедиться, что файл находится на месте:

Рис.16 Проверка добавленного файла

Комментариев нет :

Отправить комментарий