Проверка функционирования ППМ Xilinx Zynq UltraScale+ MPSoC под ЗОСРВ «Нейтрино».
Список проверок:
Тестовый стенд представляет из себя отладочный модуль ZCU102, соединённый с инструментальным ПК по интерфейсам RS-232 и Ethernet.
На инструментальный ПК должно быть установлено:
Перед проведением проверок необходимо запустить ЗОСРВ «Нейтрино» на отладочном модуле ZCU102 в соответствии с главой документации Загрузка образа ОС.
Дополнительные тестовые программы i2c-scan, ticksize и другие не входят в состав ППМ и должны быть самостоятельно загружены из публичного git-репозитория и собраны командой:
$ cd utils $ make install
Затем следует скопировать aarch64le версии тестовых программ на SD карту памяти и подключить её к ZCU102 или передать файлы по сети с помощью FTP или NFS.
# uname -s
Проверка считается выполненной успешно, если в терминале будет выведено сообщение вида:
KPDA
Для вывода информации о процессоре и доступной оперативной памяти выполнить команду pidin info:
# pidin info CPU:AARCH64 Release:2024 FreeMem:4021Mb/4096Mb BootTime:Dec 10 04:36:50 UTC 2022 Processes: 21, Threads: 60 Processor1: 1091555380 Cortex-A53 1333MHz FPU Processor2: 1091555380 Cortex-A53 1333MHz FPU Processor3: 1091555380 Cortex-A53 1333MHz FPU Processor4: 1091555380 Cortex-A53 1333MHz FPU
Для проверки функционирования контроллера оперативной памяти используется утилита memcheck. Ее требуется запустить и дождаться завершения проверки:
# /tmp/memcheck
Проверка считается выполненной успешно, если выведено сообщение:
PASS: all memory allocated
Для вывода информации о используемых прерываниях выполнить команду pidin ir:
# pidin ir pid tid name 1 1 procnto-smp 1 2 procnto-smp 1 3 procnto-smp 1 4 procnto-smp 0 0x1b 0 -P- @0xffffff80600be160:0x0 1 6 procnto-smp 1 7 procnto-smp 1 14 procnto-smp 1 18 procnto-smp 1 22 procnto-smp 1 23 procnto-smp 1 24 procnto-smp 1 42 procnto-smp 1 46 procnto-smp 1 57 procnto-smp 1 68 procnto-smp 2 1 wdtkick 3 1 slogger 4 1 pipe 4 2 pipe 4 3 pipe 4 4 pipe 5 1 devc-pty 6 1 random 6 2 random 6 3 random 7 1 clock-xzynq 8 1 pmu-xzynq 9 1 fpga-xzynq 10 1 devc-serxzynq 1 0x35 0 T-- @0x402bb8:0x439028 2 0x36 0 T-- @0x402bb8:0x43f150 10 2 devc-serxzynq 11 1 -qspi-xzynq-zcu102 3 0x2f 0 TP- =PULSE 0x40000004:21 0x1:0 11 2 -qspi-xzynq-zcu102 11 3 -qspi-xzynq-zcu102 12 1 io-pkt-v4-hc 12 2 io-pkt-v4-hc 4 0x5f 0 TP- @0x780a9c50:0x554780 12 3 io-pkt-v4-hc 4110 1 inetd 8205 1 io-usb 5 0x61 0 TP- =PULSE 0x40000008:21 0:0 8205 2 io-usb 8205 3 io-usb 8205 4 io-usb 8205 5 io-usb 8205 6 io-usb 8205 7 io-usb 8207 1 devb-umass 8207 2 devb-umass 8208 1 devb-sdmmc 6 0x51 0 TP- =PULSE 0x40000005:21 0x3:0 8208 2 devb-sdmmc 8208 3 devb-sdmmc 8208 4 devb-sdmmc 8208 5 devb-sdmmc 8208 6 devb-sdmmc 8208 7 devb-sdmmc 8208 8 devb-sdmmc 8209 1 spi-master 8209 2 spi-master 7 0x33 0 T-- @0x780a64d8:0x41d028 8210 1 spi-master 8210 2 spi-master 8 0x34 0 T-- @0x780a64d8:0x41d028 8211 1 ocm-xzynq 8212 1 mksh 1253397 1 pidin
Проверка считается пройденной успешно, если вывод утилиты pidin ir содержит информацию об обработчиках прерывания, принадлежащих выполняемым процессам, в формате
pid tid Имя процесса id прерывания vector mask_count flags handler:area
Для проверки функционирования системного таймера необходимо воспользоваться программой ticksize:
# /tmp/ticksize
Проверка считается выполненной успешно, если вывод данной программы содержит аналогичные строки:
System timer ticksize: 1000 mks Measuring system timer interrupt latency for 10 sec... ------------------------------------ System Timer Latency = 0.54 mks ------------------------------------
Для вывода информации о количестве процессоров выполнить команду pidin info:
# pidin info CPU:AARCH64 Release:2024 FreeMem:4021Mb/4096Mb BootTime:Dec 10 04:36:50 UTC 2022 Processes: 21, Threads: 60 Processor1: 1091555380 Cortex-A53 1333MHz FPU Processor2: 1091555380 Cortex-A53 1333MHz FPU Processor3: 1091555380 Cortex-A53 1333MHz FPU Processor4: 1091555380 Cortex-A53 1333MHz FPU
Для проверки функционирования на всех ядрах выполнить следующее:
# for cpu in 0 1 2 3; do on -C$cpu pidin -P pidin -fl; done
Проверка считается выполненной успешно, если вывод содержит следующие строки:
cpu 0 cpu 1 cpu 2 cpu 3
Для работы с последовательным портом используется драйвер devc-serxzynq. Настройки последовательного порта по умолчанию: скорость 115200, 8 бит, без контроля четности, 1 стоп-бит. В составе загрузочного образа драйвер запускается автоматически.
В случае успешного запуска драйвера в директории /dev/
будут созданы устройства ser1
и ser2
.
# ls /dev/ser* /dev/ser1 /dev/ser2
Для проверки функционирования драйвера UART подключить ПМ к ПК через преобразователь по USB в один из разъемов и запустить терминальную программу minicom. В последовательном или удалённом терминале выполнить следующую команду:
# echo Test message > /dev/ser1
Проверка считается выполненной успешно, если в терминальной программе будет выведено сообщение:
Test message
Повторить описанные действия для /dev/ser2
, подключив плату к ПК через другой UART-интерфейс.
Для работы с контроллером интерфейса Gigabit Ethernet используется драйвер devnp-xzynq-ultrascale.so и менеджер ресурсов io-pkt-v4-hc. В составе загрузочного образа драйвер запускается автоматически. Для вывода информации о сетевых интерфейсах выполнить команду ifconfig.
В случае успешного запуска драйвера будет создан сетевой интерфейс xzynq0 и в результате выполнения команды ifconfig на экран будут выведены данные, аналогичные следующим, с указанием текущего ip-адреса, маски и широковещательного адреса:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33136 inet 127.0.0.1 netmask 0xff000000 xzynq0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 capabilities rx=7<IP4CSUM,TCP4CSUM,UDP4CSUM> capabilities tx=0 enabled=0 address: 00:0a:35:01:1d:ca media: Ethernet autoselect (1000baseT full-duplex,flowcontrol) status: active inet <ip адрес> netmask <маска> broadcast <широковещательный адрес>
Для проверки функционирования сетевого обмена выполнить следующую команду, инициирующую отправку ICMP пакетов существующему сетевому узлу:
# ping -c 3 <ip получателя> PING <ip получателя> (<ip получателя>): 56 data bytes 64 bytes from <ip получателя>: icmp_seq=0 ttl=64 time=0 ms 64 bytes from <ip получателя>: icmp_seq=1 ttl=64 time=0 ms 64 bytes from <ip получателя>: icmp_seq=2 ttl=64 time=0 ms ----<ip получателя> PING Statistics---- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 0/0/0 ms variance = 0 ms^2
Проверка считается выполненной успешно, если все 3 пакета были успешно получены (процент потерь равен нулю).
Просмотр доступных сетевых режимов осуществляется утилитой ifconfig с опцией -m:
# ifconfig -m xzynq0 xzynq0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 capabilities rx=7<IP4CSUM,TCP4CSUM,UDP4CSUM> capabilities tx=0 enabled=0 address: 00:0a:35:01:1d:ca media: Ethernet autoselect (1000baseT full-duplex,flowcontrol) status: active supported Ethernet media: media none media autoselect media 10baseT media 10baseT mediaopt full-duplex media 10baseT mediaopt full-duplex,flowcontrol media 10baseT mediaopt full-duplex,txpause media 10baseT mediaopt full-duplex,rxpause media 100baseTX media 100baseTX mediaopt full-duplex media 100baseTX mediaopt full-duplex,flowcontrol media 100baseTX mediaopt full-duplex,txpause media 100baseTX mediaopt full-duplex,rxpause media 1000baseT mediaopt full-duplex media 1000baseT mediaopt full-duplex,flowcontrol media 1000baseT mediaopt full-duplex,txpause media 1000baseT mediaopt full-duplex,rxpause inet <ip адрес> netmask <маска> broadcast <широковещательный адрес>
Для проверки автоматического определения сетевого режима выполнить следующие команды:
# ifconfig xzynq0 media autoselect down up # ifconfig -m xzynq0
Проверка считается пройденной успешно, если в выводе ifconfig -m присутствует строка
media: Ethernet autoselect
с указанием автоматически выбранного режима.
Для проверки установки требуемого сетевого режима необходимо установить его на ПМ и на инструментальной машине, с которой устанавливается сетевое соединение. Выполнить следующую команду на ПМ, где <режим> - требуемый сетевой режим из списка доступных сетевых режимов:
# ifconfig xzynq0 media <режим> down up
На инструментальной машине необходимо выполнить следующую команду, где <интерфейс> - сетевой интерфейс, <скорость> - требуемая скорость соединения, <тип> - half / full:
# ethtool -s <интерфейс> speed <скорость> duplex <тип> autoneg off
Проверка считается выполненной успешно, если после переключения режима корректно изменяется параметр media при вызове команды ifconfig для выбранного интерфейса, а команда ping отправляет и получает пакеты:
# ifconfig xzynq0 media 100baseTX mediaopt full-duplex down up # ifconfig xzynq0 xzynq0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 capabilities rx=7<IP4CSUM,TCP4CSUM,UDP4CSUM> capabilities tx=0 enabled=0 address: 00:0a:35:01:1d:ca media: Ethernet 100baseTX full-duplex status: active inet <ip адрес> netmask <маска> broadcast <широковещательный адрес>
$ ethtool -s enp2s0 speed 100 duplex full autoneg off $ ping -c3 <ip адрес> PING <ip адрес> (<ip адрес>) 56(84) bytes of data. 64 bytes from <ip адрес>: icmp_seq=1 ttl=255 time=0.228 ms 64 bytes from <ip адрес>: icmp_seq=2 ttl=255 time=0.119 ms 64 bytes from <ip адрес>: icmp_seq=3 ttl=255 time=0.147 ms --- <ip адрес> ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2028ms rtt min/avg/max/mdev = 0.119/0.164/0.228/0.046 ms
Для работы с контроллером USB используется драйвер devu-xhci-xzynq.so. В составе загрузочного образа драйвер запускается автоматически. В случае успешного запуска драйвера в директории /dev/
будут создана директория io-usb
. Для получения списка подключенных USB устройств может быть использована утилита usb:
# usb
Для проверки работоспособности драйвера подключить к ПМ USB flash накопитель с разделом FAT, содержащий хотя бы один непустой файл. Список созданных устройств в /dev
для подключенной USB flash можно посмотреть командой:
# pidin -P devb-umass fd pid name 8209 devb-umass 0 10 rw 0 /dev/ser1 1 10 rw 0 /dev/ser1 2 10 rw 0 /dev/ser1 3 3 -w 0 /dev/slog 4 1 5 1 6 8207 7 1 8 1 0s 1 2s 8209 5s 8209 8s 8209 10s 1 MP 0 / 11s 1 MP 0 /dev/hd1 12s 1 MP 0 /dev/hd1t12
Далее выполнить следующие команды:
# mount /dev/<устройство> /usbfs # cp /usbfs/<файл для проверки> /tmp/ # cksum /usbfs/<файл для проверки> # cksum /tmp/<файл для проверки>
Проверка считается выполненной успешно, если контрольные суммы, выведенные двумя последними командами, совпадают. Для проверки работы USB клавиатуры и мыши используется утилита hidview. Подключить клавиатуру (мышь) к ПМ и выполнить следующие команды:
# slay -f io-hid devi-hid # io-hid -d usb # hidview -a
Проверка считается выполненной успешно, если при совершении действий с клавиатурой (мышью) на консоль выводятся коды событий, например:
00 : 01 00 00 00 00 00 00 : 00 00 00 00 00 00 00 : 02 00 00 00 00 00 00 : 00 00 00 00 00 00 00 : 00 01 00 00 00 00 00 : 00 02 f0 ff 00 00 00 : 00 03 f0 ff 00 00 00 : 00 04 e0 ff 00 00
Для измерения скорости записи необходимо на подключенном к ПМ USB-flash создать файл размером 0.5 ГБайт и заполнить его случайными значениями с помощью утилиты dd, при этом измеряя время данной операции через time:
# dd if=/dev/urandom of=/dev/shmem/test_file bs=1000 count=512 # time dd if=/dev/shmem/test_file of=test_file bs=1000 count=512
Выводом данной команды будет является время и скорость записи на bulk транзакции:
512+0 records in 512+0 records out 512000 bytes transferred in 0.121 secs (4231404 bytes/sec) 0m00.13s real 0m00.00s user 0m00.00s system
Для измерения скорости чтения необходимо скопировать созданный тестовый файл в /dev/null
с помощью утилиты dd:
# time dd if=test_file of=/dev/null bs=1000 count=512
Выводом данной команды будет является время чтения на bulk транзакции:
512+0 records in 512+0 records out 512000 bytes transferred in 0.009 secs (56888888 bytes/sec) 0m00.01s real 0m00.00s user 0m00.00s system
Для работы с QSPI Flash используется драйвер devf-qspi-xzynq-zcu102. В составе загрузочного образа драйвер запускается автоматически. В каталоге /dev
должно появиться устройство fs0
. Для формирования файловой системы встроенного флэш накопителя используется утилита flashctl. Выполнить стирание данных флэш памяти:
# flashctl -p /dev/fs0 -e
Выполнить перезапуск драйвера для обновления таблицы разделов:
# slay -f devf-qspi-xzynq-zcu102 # devf-qspi-xzynq-zcu102 -r
Выполнить форматирование памяти для создания и монтирования файловой системы:
# flashctl -p /dev/fs0p0 -f -n /flash -m
Результатом проведения данных команд должно являться появление каталога /flash
в корневом каталоге файловой системы. Далее выполнить следующие команды:
# touch /tmp/test_file # cp /tmp/test_file /flash/ # cksum /flash/test_file # cksum /tmp/test_file
Проверка считается выполненной успешно, если контрольные суммы, выведенные двумя последними командами, совпадают. Для измерения производительности операции записи и чтения необходимо создать файл и заполнить его случайными значениями с помощью утилиты dd, при этом измеряя время данной операции через time:
# dd if=/dev/urandom of=/dev/shmem/test_file bs=1000 count=256 # time dd if=/dev/shmem/test_file of=/flash/test_file bs=1000 count=256
Выводом данной команды будет является время записи:
256+0 records in 256+0 records out 256000 bytes transferred in 3.901 secs (65624 bytes/sec) 0m03.92s real 0m00.00s user 0m00.00s system
Для измерения скорости чтения необходимо скопировать созданный тестовый файл в /dev/null
с помощью утилиты dd:
# time dd if=/flash/test_file of=/dev/null bs=1000 count=256
Выводом данной команды будет является время и скорость чтения:
256+0 records in 256+0 records out 256000 bytes transferred in 0.085 secs (3011764 bytes/sec) 0m00.11s real 0m00.00s user 0m00.00s system
Для работы с контроллером SD/MMC используется драйвер devb-sdmmc. В составе загрузочного образа драйвер запускается автоматически. В случае успешного запуска драйвера в директории /dev/
будет создано устройство sd0
, соответствующее SD-карте, а также устройства, соответствующие разделам. Для управления устройствами могут быть использованы стандартные утилиты для управления и чтения/записи блочных устройств. Проверка считается выполненной успешно, если при выполнении команды ls /dev/sd0* отображаются устройства, соответствующие SD-карте и разделам, например:
# ls /dev/sd0* /dev/sd0 /dev/sd0t11 /dev/sd0t177
В выводе утилиты mount увидеть точку монтирования одного из разделов SD-карты, например:
# mount /dev/sd0t177 on / type qnx6
Для измерения производительности операции записи и чтения необходимо создать файл и заполнить его случайными значениями с помощью утилиты dd, при этом измеряя время данной операции через time:
# dd if=/dev/urandom of=/dev/shmem/test_file bs=1000 count=256 # time dd if=/dev/shmem/test_file of=<точка монтирования>/test_file \ bs=1000 count=256
Выводом данной команды будет является время и скорость записи:
256+0 records in 256+0 records out 256000 bytes transferred in 0.025 secs (10240000 bytes/sec) 0m00.05s real 0m00.00s user 0m00.00s system
Для измерения скорости чтения необходимо скопировать созданный тестовый файл в /dev/null
с помощью утилиты dd:
# time dd if=<точка монтирования>/test_file of=/dev/null bs=1000 count=256
Выводом данной команды будет является время и скорость чтения:
256+0 records in 256+0 records out 256000 bytes transferred in 0.004 secs (64000000 bytes/sec) 0m00.01s real 0m00.00s user 0m00.00s system
Для работы с контроллером I2C используется драйвер i2c-xzynq. В составе загрузочного образа драйвер запускается автоматически. В случае успешного запуска драйвера в директории /dev/
будут созданы устройства i2c0
и i2c1
.
# ls /dev/i2c* /dev/i2c0 /dev/i2c1
Проверка функционирования заключается в запуске утилиты i2c-scan и считается выполненной успешно, если вывод i2c-scan соответствует ожидаемому, например:
# i2c-scan -d /dev/i2c1 Scanning I2C device /dev/i2c1 for I2C devices... 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: xx -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- 36 -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- 74 75 -- -- -- -- -- -- -- -- -- –-
Для работы с чипом RTC используется утилита rtc и драйвер rtc-zynqmp.so. Для проверки работоспособности RTC вызвать утилиту rtc:
# rtc -v hw
Проверка считается выполненной успешно, если будет выведена информация о текущей дате и времени:
rtc get: current RTC time is 2023/5/3 6:15:19 (UTC)
Для работы с блоком watchdog используется утилита wdtkick. В составе загрузочного образа утилита запускается автоматически. Для проверки работоспособности блока watchdog вызвать завершение работы системы с помощью утилиты shutdown:
# shutdown -fb
Проверка считается выполненной успешно, если через ~10 секунд произойдет сброс ПМ.
Для работы с SATA используется драйвер devb-ahci. В составе загрузочного образа драйвер запускается автоматически. Для проверки работоспособности драйвера подключить к ПМ накопитель с интерфейсом SATA с отформатированным разделом FAT, содержащий хотя бы один не пустой файл. Список созданных устройств в /dev
для подключенного накопителя можно посмотреть командой:
# pidin -P devb-ahci fd pid name 10409 devb-ahci 0 10 rw 0 /dev/ser1 1 10 rw 0 /dev/ser1 2 10 rw 0 /dev/ser1 3 3 -w 0 /dev/slog 4 1 5 1 6 8207 7 1 8 1 0s 1 2s 8209 5s 8209 8s 8209 10s 1 MP 0 / 11s 1 MP 0 /dev/hd2 12s 1 MP 0 /dev/hd2t11
Далее выполнить следующие команды:
# mount -t dos /dev/<имя устройства> /satafs # cp /satafs/test_file /tmp/ # cksum /satafs/test_file # cksum /tmp/test_file
Проверка считается выполненной успешно, если контрольные суммы, выведенные двумя последними командами, совпадают. Для оценки скорости записи и соответствующей загрузки CPU при работе с SATA необходимо открыть два псевдотерминала, в первом — воспользоваться утилитой dd для записи на устройство SATA:
# dd if=/dev/random of=/tmp/test_file bs=1000000 count=1000000 # dd if=/tmp/test_file of=/satafs/test_file bs=1000000 count=1000000 1024+0 records in 1024+0 records out 1024000000 bytes transferred in 86.734 secs (11806212 bytes/sec)
В другом терминале для отслеживания загрузки CPU требуется использовать утилиту top и визуально посмотреть на загрузку CPU.
В первом псевдотерминале провести чтение с SATA, отслеживая загрузку CPU
# dd if=/satafs/test_file of=/dev/null bs=1000000 count=1000000 1024+0 records in 1024+0 records out 1024000000 bytes transferred in 6.411 secs (159725471 bytes/sec)
Остановить работу утилиты top.
Для работы с контроллером PCIe используется менеджер ресурсов pci-xzynq. В составе загрузочного образа PCI сервер запускается автоматически. Получения списка PCI устройств:
# pci -v
Проверка считается выполненной успешно, если выведена информация о подключённых PCI устройствах.
Для работы с контроллером таймеров используется драйвер clock-xzynq. В составе загрузочного образа драйвер clock-xzynq запускается автоматически. Для проверки используется утилита lsclk:
# lsclk PLL actual frequency: IOPLL: 1499850000Hz RPLL: 733260000Hz APLL: 1199880000Hz DPLL: 1066560000Hz VPLL: 1499850000Hz IOPLL_TO_FPD: 499950000Hz RPLL_TO_FPD: 366630000Hz PSS_REF_CLK: 33330000Hz Device actual frequency: CPU: 1199880000Hz DBG_TRACE: DISABLED DBG_FPD: 249975000Hz DP_VIDEO: 299970000Hz DP_AUDIO: 24442000Hz DP_STC: 26187857Hz DDR: 533280000Hz GPU: 499950000Hz SATA: 249975000Hz PCIE: 249975000Hz FPD_DMA: 599940000Hz DPDMA: 599940000Hz TOPSW_LSBUS: 99990000Hz TOPSW_TSTMP: DISABLED USB3_DUAL: DISABLED GEM0: DISABLED GEM1: DISABLED GEM2: DISABLED GEM3: 124987500Hz USB0: DISABLED USB1: DISABLED QSPI: 299970000Hz SDIO0: 0Hz SDIO1: 187481250Hz UART0: 99990000Hz UART1: 99990000Hz SPI0: 499950Hz SPI1: 499950Hz CAN0: 46870312Hz CAN1: 99990000Hz CPU_R5: 499950000Hz IOU_SWITCH: 249975000Hz CSU_PLL: 187481250Hz PCAP: 187481250Hz LPD_SWITCH: 499950000Hz LPD_SBUS: 99990000Hz DBG_LPD: 249975000Hz NAND: DISABLED LPD_DMA: 499950000Hz PL0: 99990000Hz PL1: 299970000Hz PL2: DISABLED PL3: DISABLED GEM_TSU: 249975000Hz AMS: 51718965Hz I2C0: 99990000Hz I2C1: 99990000Hz TIMESTAMP: 33330000Hz
Проверка считается выполненной успешно, если утилита lsclk завершилась без ошибок и вывела корректные частоты.
Для работы с контроллером накристальной памяти используется драйвер ocm-xzynq. В составе загрузочного образа драйвер ocm-xzynq запускается автоматически. Создать файл со случайным данными размером 256 килобайт и записать его в накристальную память:
# dd if=/dev/random of=/tmp/random.bin bs=512 count=512 # cat /tmp/random.bin > /dev/ocm
Для подсчета контрольной суммы данных в оригинальном файле и в накристальной памяти выполнить команду cksum:
# cksum /tmp/random.bin /dev/ocm 4228331232 262144 /tmp/random.bin 4228331232 262144 /dev/ocm
Проверка считается выполненной успешно, если контрольные суммы данных в оригинальном файле и в накристальной памяти совпали.
Для работы с блоком управления загрузкой ПО FPGA используется менеджер fpga-xzynq. В составе загрузочного образа драйвер fpga-xzynq запускается автоматически. Для проверки требуется образ ПО FPGA, загрузка осуществляется командой cat:
# cat /tmp/example.bit > /dev/fpga
Для проверки загрузки образа ПО выполнить команду fpgactl status:
# fpgactl status
Проверка считается выполненной успешно, если fpgactl вывела
The PL configuration is done
Для работы с блоком управления платформой PMU используется менеджер pmu-xzynq. В составе загрузочного образа драйвер pmu-xzynq запускается автоматически. Для проверки загрузки можно выполнить команду чтения регистра PCAP Status с помощью программы pmuctl:
# pmuctl get_cfgreg 0x00FFCA3010
Проверка считается выполненной успешно, если регистр был прочитан без ошибок и программа вывела значение регистра:
Config register FFCA3010: 0xa0002fde
Проверка Display Port производится с использованием утилиты gf-vsync. Перед выполнением проверки необходимо подключить к ZCU102 монитор через разъем DisplayPort. Для корректной проверки на устройстве должен размещаться файл /etc/system/config/display.conf следующего содержания:
device {drivername=zynqmpvid=0x0did=0x0deviceindex=0display {xres=1920yres=1080refresh=60pixel_format=argb8888}}
В конфигурационном файле /etc/system/config/zynqmp-dp.conf заменить
no_vid_layer = 0
на
no_vid_layer = 1
Затем необходимо запустить io-display
# io-display -dvid=0,did=0
После — воспользоваться утилитой gf-vsync
# gf-vsync -l0
Проверка считается пройденной успешно, если на экране отображается корректное изображение, соответствующее документации на утилиту gf-vsync.
Для проверки тестов и примеров функционирования сопутствующей ПП АМР библиотеки libmetal, необходимо:
startup-xzynq-zcu102 -vvv -W10 -r 0x3ED00000,0x1000000,0
$ make
# scp <имя образа> root@<ip>:/boot
ZynqMP> tftpboot 0x100000 <новый образ>; go 0x100000
# ssh root@<ip адрес>
# export LD_LIBRARY_PATH=<путь к libmetal.so.1.4.0, libmetal.so.1, libmetal.so>
Для теста Libmetal API запустить на выполнение файлы test-metal-shared, test-metal-static. Проверка считается выполненной успешно, если в результате напротив каждого результата находится исключительно слово «pass». Для примера Libmetal загрузить файл, исполняемый на R5 ядре командой
# ./remoteprocctl load RPU0 LOCKSTEP ${Путь_к_файлу}/metal_r5_0.elf
# ./remoteprocctl start RPU0
# ./libmetal_amp_demo-static # ./libmetal_amp_demo-share
Проверка считается выполненной успешно, если вывод файлов не содержит указания ошибочного прохождения итерации. Для проверки работоспособности ПП AMP требуется выполнить следующую последовательность действий в терминале с установленным ssh-соединением:
# export LD_LIBRARY_PATH=<путь к библиотекам>
Параметр < путь к="" библиотекам> должен учитывать расположение бублиотек libmetal.so.1.4.0, libmetal.so.1, libmetal.so, libopen_amp.so.1.4.0, libopen_amp.so.1, libopen_amp.so.
Для проверки связи ОС с RPU с использованием rpsmsg используется тест echo. Для его выполнения необходимо:
# ./remoteprocctl load RPU0 LOCKSTEP ${Путь_к_файлу}/openamp_echo.elf
# ./remoteprocctl start RPU0
# ./rpmsg-ping-static # ./rpmsg-ping-shared
Для примера Matrix Multiplication, выполняющего перемножение матриц на RPU: загрузить файл, исполняемый на R5 ядре командой
# ./remoteprocctl load RPU0 LOCKSTEP ${Путь_к_файлу}/openamp_matrix.elf
# ./remoteprocctl start RPU0
# ./matrix_multiply-static # ./matrix_multiply-shared
Проверка считается выполненной успешно, если вывод файлов не содержит указания ошибочного прохождения итерации. Для примера Proxy Application, демонстрирующего альтернативное поведение RPU как сопроцессора APU: скопировать файл openamp_rpc.elf, загрузить файл, исполняемый на R5 ядре командой
# ./remoteprocctl load RPU0 LOCKSTEP ${Путь_к_файлу}/openamp_rpc.elf
# ./remoteprocctl start RPU0
# ./rpc_demod-static # ./rpc_demod-shared
Проверка считается выполненной успешно, если вывод файлов не содержит указания ошибочного прохождения итерации.
Предыдущий раздел: перейти