Пакеты поддержки модулей для ЗОСРВ «Нейтрино» > ARMv7 > BSP для Xilinx Zynq 7000 > Проверка функционирования



Проверка функционирования

Проверка функционирования ППМ Xilinx Zynq 7000 под ЗОСРВ «Нейтрино».


Список проверок:

Базовые проверки функционирования ОС
Проверка запуска на ПМ ядра ЗОСРВ в составе загружаемого образа
Проверка функционирования контроллера DDR памяти
Проверка функционирования контроллера прерываний
Проверка функционирования таймера
Проверка работы ЗОСРВ на ЦП в режиме симметричной мультипроцессорности (SMP) с поддержкой всех CPU ядер типа Cortex-A9
Проверки интерфейсов
Проверка драйвера контроллера UART
Проверка драйвера контроллера Gigabit Ethernet
Проверка переключения режимов и дуплекса контроллера Ethernet
Проверка драйвера контроллера CAN
Проверка драйвера контроллера SPI
Проверка драйвера контроллера QSPI
Проверка драйвера контроллера SD
Проверка драйвера контроллера I2C
Проверка блока Watchdog
Проверка драйвера контроллера накристальной памяти (OCM)
Проверка блока управления загрузки битстрима FPGA
Проверка блока аналого-цифрового преобразователя XADC
Проверка драйвера контроллера GPIO

Тестовый стенд

Тестовый стенд представляет из себя отладочный модуль Avnet ZedBoard, соединённый с инструментальным ПК по интерфейсам RS-232 и Ethernet.


На инструментальный ПК должно быть установлено:

Подготовка

Перед проведением проверок необходимо запустить ЗОСРВ «Нейтрино» на отладочном модуле Avnet ZedBoard в соответствии с главой документации Загрузка образа ОС.


Стоит учитывать, что некоторые штатные утилиты могут не входить в состав загрузочного образа.


Дополнительные тестовые программы i2c-scan, ticksize и другие не входят в состав ППМ и должны быть самостоятельно загружены из публичного git-репозитория и собраны командой:

$ cd utils $ make install

Затем следует скопировать armv7.le версии тестовых программ на SD карту памяти и подключить её к Avnet ZedBoard или передать файлы по сети с помощью FTP или NFS.

Базовые проверки функционирования ОС

Проверка запуска на ПМ ядра ЗОСРВ в составе загружаемого образа

В последовательном терминале выполнить команду:

# uname -s

Проверка считается выполненной успешно, если в терминале будет выведено сообщение вида:

KPDA

Проверка функционирования контроллера DDR памяти

Для вывода информации о процессоре и доступной оперативной памяти выполнить команду pidin info:

# pidin info CPU:ARM Release:2024 FreeMem:488Mb/512Mb BootTime:Jan 01 00:00:00 UTC 1970 Processes: 23, Threads: 50 Processor1: 1094697104 Cortex A9 MPCore 666MHz FPU Processor2: 1094697104 Cortex A9 MPCore 666MHz FPU

Для проверки функционирования контроллера оперативной памяти используется утилита memcheck. Ее требуется запустить и дождаться завершения проверки:

# /tmp/memcheck

Проверка считается выполненной успешно, если выведено сообщение:

PASS: all memory allocated

Проверка функционирования контроллера прерываний

Для вывода информации о используемых прерываниях выполнить команду pidin ir:

# pidin ir pid tid name 1 1 procnto-smp 1 2 procnto-smp 0 0x1d 0 -P- @0xfe05e160:0x0 1 3 procnto-smp 1 4 procnto-smp 1 5 procnto-smp 1 6 procnto-smp 1 7 procnto-smp 1 8 procnto-smp 1 9 procnto-smp 1 10 procnto-smp 1 11 procnto-smp 1 12 procnto-smp 1 13 procnto-smp 2 1 platform-control 2 2 platform-control 3 1 devc-serxzynq 1 0x52 0 T-- @0x804a38c:0x8073c88 3 2 devc-serxzynq 4 1 pipe 4 2 pipe 4 3 pipe 5 1 mqueue 6 1 random 6 2 random 6 3 random 7 1 slogger 8 1 wdtkick-xzynq 10 1 devf-qspi-zynq7000 3 0x33 0 T-- @0x804b3b4:0x8078040 10 2 devf-qspi-zynq7000 10 3 devf-qspi-zynq7000 11 1 ocm-xzynq 12 1 xadc-zynq7000 4 0x27 0 T-- =INTR 12 2 xadc-zynq7000 13 1 fpga-zynq7000 14 1 io-pkt-v4-hc 14 2 io-pkt-v4-hc 5 0x36 0 T-- @0x780038e8:0x8192240 14 3 io-pkt-v4-hc 8207 1 devc-pty 8208 1 qconn 8208 2 qconn 8210 1 inetd 12305 1 ksh 24585 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 ------------------------------------

Проверка работы ЗОСРВ на ЦП в режиме симметричной мультипроцессорности (SMP) с поддержкой всех CPU ядер типа Cortex-A9

Для проверки функционирования на всех ядрах выполнить следующее:

# for cpu in 0 1; do on -C$cpu pidin -P pidin -fl; done

Проверка считается выполненной успешно, если вывод содержит следующие строки:

cpu 0 cpu 1

Проверки интерфейсов

Проверка драйвера контроллера UART

Для работы с последовательным портом используется драйвер devc-serxzynq. Настройки последовательного порта по умолчанию: скорость 115200, 8 бит, без контроля четности, 1 стоп-бит. В составе загрузочного образа драйвер запускается автоматически.

В случае успешного запуска драйвера в директории /dev/ будет создано устройство ser1.

# ls /dev/ser* /dev/ser1

Для проверки функционирования драйвера UART подключить ПМ к ПК через преобразователь по USB и запустить терминальную программу minicom. В последовательном или удалённом терминале выполнить следующую команду:

# echo Test message > /dev/ser1

Проверка считается выполненной успешно, если в терминальной программе будет выведено сообщение:

Test message

Проверка драйвера контроллера Gigabit Ethernet

Для работы с контроллером интерфейса Gigabit Ethernet используется драйвер devnp-zynq7000.so и менеджер ресурсов io-pkt-v4-hc. В составе загрузочного образа драйвер запускается автоматически. Для вывода информации о сетевых интерфейсах выполнить команду ifconfig.

В случае успешного запуска драйвера будет создан сетевой интерфейс xzynq0 и в результате выполнения команды ifconfig на экран будут выведены данные, аналогичные следующим, с указанием текущего ip-адреса, маски и широковещательного адреса:

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33192 inet 127.0.0.1 netmask 0xff000000 xzynq0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 address: 00:0a:35:02:78:11 media: Ethernet autoselect (1000baseT full-duplex) 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 пакета были успешно получены (процент потерь равен нулю).

Проверка переключения режимов и дуплекса контроллера Ethernet

Просмотр доступных сетевых режимов осуществляется утилитой ifconfig с опцией -m:

# ifconfig -m xzynq0 xzynq0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 address: 00:0a:35:02:78:11 media: Ethernet autoselect (1000baseT full-duplex) 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 отправляет и получает пакеты:

Проверка драйвера контроллера CAN

Для взаимодействия с контроллерами CAN используется драйвер dev-can-xzynq. В случае успешного запуска драйвера в директории /dev/ создаются соответствующие устройства: can#, где символ # обозначает номер интерфейса. Запуск драйвера для двух контроллеров CAN в loopback режиме:

# dev-can-xzynq -L can0 -L can1 # ls /dev/can0 rx0 rx1 rx2 rx3 tx4 # ls /dev/can1 rx0 rx1 rx2 rx3 tx4

После чего необходимо запустить процесс прослушивания на любом из интерфейсов и выполнить отправку тестовых пакетов:

# cat /dev/can0/rx0 & # echo testing > /dev/can0/tx4

Проверка считается выполненной успешно, если будет выведено сообщение:

# testing

Проверка драйвера контроллера SPI

Для работы с контроллером SPI используется драйвер spi-xzynq-zynq7000.so.

Запуск драйвера для двух контроллеров:

spi-master -u 0 -d xzynq-zynq7000 base=0xE0006000,irq=58 spi-master -u 1 -d xzynq-zynq7000 base=0xE0007000,irq=81

В случае успешного запуска драйвера в директории /dev/ создаются соответствующие устройства: spi#, где символ # обозначает номер интерфейса.

# ls /dev/spi* /dev/spi0 /dev/spi1

Так как для полноценной проверки функционирования необходимо slave устройство и драйвер под это устройство, а также написанный сценарий обмена данными, проверка ограничится некоторыми функциями драйвера и передачей на loopback.

Проверка функционирования заключается в запуске утилиты spitest и считается выполненной успешно, если конфигурация устройства изменяется в соответствии с заданными параметрами, вывод соответствует измененным ранее параметрам и входные данные при передаче на loopback соответствуют выходным.

Настройка конфигурации устройства:

# spitest setcfg 1 1 1288 5000 Set configuration for SPI Device /dev/spi1: cs1 mode 508 clock_rate 5000 Reading existing configuration of SPI Device... device = 0x1 name = SPI-DEV1 mode = 0x408 clock_rate = 5000000 Changing configuration of SPI Device... Reading updated configuration of SPI Device... device = 0x1 name = SPI-DEV1 mode = 0x508 clock_rate = 5000 Test OK!

Вывод информации об устройствах:

# spitest devinfo 1 1 === SPI Device /dev/spi1 info: === Reading info using SPI_DEV_DEFAULT bit... --- device 0x0000 info --- device = 0x0 name = SPI-DEV0 mode = 0x408 clock_rate = 5000000 --- device 0x0001 info --- device = 0x1 name = SPI-DEV1 mode = 0x508 clock_rate = 5000 --- device 0x0002 info --- device = 0x2 name = SPI-DEV2 mode = 0x408 clock_rate = 5000000 --- device 0x0003 info --- Done, 3 devices detected Reading info using SPI_DEV_ID_NONE bit... device = 0x0 name = SPI-DEV0 mode = 0x408 clock_rate = 5000000 device = 0x1 name = SPI-DEV1 mode = 0x508 clock_rate = 5000 device = 0x2 name = SPI-DEV2 mode = 0x408 clock_rate = 5000000 Done, 3 devices detected

Проверка драйвера контроллера QSPI

Для работы с QSPI Flash используется драйвер devf-qspi-zynq7000. В составе загрузочного образа драйвер запускается автоматически. В каталоге /dev должно появиться устройство fs0. Для формирования файловой системы встроенного флэш накопителя используется утилита flashctl. Выполнить стирание данных флэш памяти с адреса 0x800000:

# flashctl -p /dev/fs0 -e -o 0x800000

Выполнить форматирование памяти для создания и монтирования файловой системы:

# flashctl -p /dev/fs0p0 -f -o 0x800000 -n /flash

Выполнить перезапуск драйвера для обновления таблицы разделов:

# slay -f devf-qspi-zynq7000 # devf-qspi-zynq7000 -r

Результатом проведения данных команд должно являться появление каталога /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 11.204 secs (22848 bytes/sec) 0m11.27s 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.077 secs (3324675 bytes/sec) 0m00.09s real 0m00.00s user 0m00.00s system

Проверка драйвера контроллера SD

Для работы с контроллером SD/MMC используется драйвер devb-sdmmc. В составе загрузочного образа драйвер запускается автоматически. В случае успешного запуска драйвера в директории /dev/ будет создано устройство sd0, соответствующее SD-карте, а также устройства, соответствующие разделам. Для управления устройствами могут быть использованы стандартные утилиты для управления и чтения/записи блочных устройств. Проверка считается выполненной успешно, если при выполнении команды ls отображаются устройства, соответствующие SD-карте и разделам, например:

# ls /dev/sd* /dev/sd0 /dev/sd0t12 /dev/sd0t131

В выводе утилиты mount увидеть точку монтирования одного из разделов SD-карты, например:

# mount /dev/sd0t131 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 используется драйвер i2c-xzynq.

Запуск драйвера для двух контроллеров:

i2c-xzynq -p 0xE0004000 -i 57 --u 0 i2c-xzynq -p 0xE0005000 -i 80 --u 1

В случае успешного запуска драйвера в директории /dev/ будут созданы устройства i2c0 и i2c1.

# ls /dev/i2c* /dev/i2c0 /dev/i2c1

Перед проверкой функционирования убедитесь, что требуемые сигналы I2C корректно назначены на выводы MIO. Пример выводов представлен в разделе «Известные особенности».

Также для проверки необходимо какое-либо подключенное устройство к интерфейсу.

Проверка считается выполненной успешно, если утилита 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: -- -- -- 23 -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Scanning done

Проверка блока Watchdog

Для работы с блоком watchdog используется утилита wdtkick-xzynq. В составе загрузочного образа утилита запускается автоматически. Перед проверкой необходимо убедиться, что для startup-zedboard включена опция -W и указано количество секунд сброса.

Для проверки работоспособности контроллера watchdog необходимо вызвать завершение работы системы, введя следующую команду:

# slay -9 wdtkick-xzynq

Проверка считается выполненной успешно, если через указанное количество секунд произойдет сброс ПМ и появится приглашение для ввода загрузчика.

Проверка драйвера контроллера накристальной памяти (OCM)

Для работы с контроллером накристальной памяти используется драйвер 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 2937395622 262144 /tmp/random.bin 2937395622 262144 /dev/ocm

Проверка считается выполненной успешно, если контрольные суммы данных в оригинальном файле и в накристальной памяти совпали.

Проверка блока управления загрузки битстрима FPGA

Для работы с блоком управления загрузкой битстрима FPGA используется менеджер fpga-zynq7000. В составе загрузочного образа драйвер fpga-zynq7000 запускается автоматически. Для проверки требуется битстрим FPGA в формате .bin, загрузка осуществляется командой cat:

# cat /tmp/example.bin > /dev/fpga

Для проверки загрузки битстрима выполнить команду:

# fpgactl-zynq7000 status

Проверка считается выполненной успешно, если fpgactl-zynq7000 вывела:

The PL configuration is done

Проверка блока аналого-цифрового преобразователя XADC

Для работы с блоком управления аналого-цифрового преобразователя XADC используется менеджер xadc-zynq7000.

В случае успешного запуска драйвера в директории /dev/ будет создано устройство xadc.

# ls /dev/xadc /dev/xadc

Проверка драйвера контроллера GPIO

Для работы с контроллером GPIO используется драйвер [gpio-zynq7000]. В составе загрузочного образа драйвер запускается автоматически. В случае успешного запуска драйвера в директории /dev будет создано устройство gpio.

# ls /dev/gpio /dev/gpio

Проверка функционирования заключается в выводе информации с регистров контроллеров, внесении изменений в состояние регистров, проверке изменений и считается успешной, если вывод соответствует ожидаемому, а также внесение изменений отражается на состоянии регистров.

# cat /dev/gpio gpio0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0i 1i 0i 0i 1i 1i 1i 0i 0i 1i 1i 1i 1i 1i 1i 1i 1i 0i 0i 0i 0i 0i 0i 1i 0i 1i 1i 0i 0i 0i 0i 0i gpio1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0i 0i 0i 0i 1i 0i 0i 0i 1i 1i 1i 1i 1i 1i 0i 0i 1i 1i 1i 1i 0i 1i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i # echo "P10 o" > /dev/gpio # echo "P10 1" > /dev/gpio # cat /dev/gpio gpio0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0i 1i 0i 0i 1i 1i 1i 0i 0i 1i 1o 1i 1i 1i 1i 1i 0i 0i 0i 0i 0i 0i 0i 1i 0i 1i 1i 0i 0i 0i 0i 0i gpio1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 0i 0i 0i 0i 0i 0i 0i 0i 1i 1i 1i 1i 1i 1i 0i 0i 1i 1i 1i 1i 0i 1i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i




Предыдущий раздел: перейти