Пакеты поддержки модулей для ЗОСРВ «Нейтрино» > MIPS > BSP для устройств на базе процессора Элвис 1892ВМ206 > Проверка функционирования



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

Проверка функционирования ППМ для семейства микропроцессоров NXP серии i.MX8M под ЗОСРВ «Нейтрино».


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

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

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

Тестовый стенд представляет из себя ПМ на базе микропроцессора NXP серии i.MX8M, соединённый с инструментальным ПК по интерфейсам RS-232 и Ethernet.


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

Подготовка

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


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

$ cd utils $ make install

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

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

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

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

# uname -s

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

KPDA

Проверка запуска компонентов

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

# pidin ar pid Arguments 1 procnto-smp -vvv -mnP 2 slogger -s64k 3 pipe 4 devc-pty 5 devc-sermx1 -u 1 -e -F -c24000000 0x30890000,59 6 random -t 7 gpio-imx8m 8 i2c-mx35 -p 0x30a20000 -i67 -c66000000 9 spi-master -u1 -d mx51ecspi base=0x30820000,irq=63,loopback=1 10 devb-sdmmc cam pnp,verbose blk rw,cache=2M sdio addr=0x30b50000,irq=55,\ bs=cd_base=0x30210000:cd_pin=0:wp_base=0x30210000:wp_pin=1:cd_irq=12 disk name=sd1 11 io-pkt-v4 -v -dmx6x verbose=1 8205 inetd 12302 qconn 36879 mksh 36881 /usr/sbin/sshd 45068 pidin ar

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

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

# pidin info CPU:AARCH64 Release:2024 FreeMem:978Mb/1024Mb BootTime:Jan 01 00:00:00 UTC 1970 Processes: 16, Threads: 49 Processor1: 1091555380 Cortex-A53 1000MHz FPU Processor2: 1091555380 Cortex-A53 1000MHz FPU Processor3: 1091555380 Cortex-A53 1000MHz FPU Processor4: 1091555380 Cortex-A53 1000MHz 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- @0xffffff80600bda18:0x0 1 6 procnto-smp 1 7 procnto-smp 1 8 procnto-smp 1 10 procnto-smp 1 11 procnto-smp 1 13 procnto-smp 1 14 procnto-smp 1 15 procnto-smp 1 16 procnto-smp 1 17 procnto-smp 1 18 procnto-smp 2 1 slogger 3 1 pipe 3 2 pipe 3 3 pipe 3 4 pipe 4 1 devc-pty 5 1 devc-sermx1 1 0x3b 0 T-- @0x4032e8:0x439028 5 2 devc-sermx1 6 1 random 6 2 random 6 3 random 7 1 gpio-imx8m 8 1 i2c-mx35 3 0x43 0 T-- =INTR 9 1 spi-master 9 2 spi-master 2 0x3f 0 T-- @0x780a7220:0x424028 10 1 devb-sdmmc 4 0x37 0 TP- =PULSE 0x40000005:21 0x3:0 5 0xc 0 TP- =PULSE 0x40000005:21 0x1:0 10 2 devb-sdmmc 10 3 devb-sdmmc 10 4 devb-sdmmc 10 5 devb-sdmmc 10 6 devb-sdmmc 10 7 devb-sdmmc 10 8 devb-sdmmc 11 1 io-pkt-v4 11 2 io-pkt-v4 6 0x98 0 T-- @0x780accc8:0x4dda40 11 3 io-pkt-v4 11 4 io-pkt-v4 11 5 io-pkt-v4 8205 1 inetd 12302 1 qconn 12302 2 qconn 28687 1 mksh 36881 1 sshd 61452 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.13 mks ------------------------------------

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

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

# pidin info CPU:AARCH64 Release:2024 FreeMem:978Mb/1024Mb BootTime:Jan 01 00:00:00 UTC 1970 Processes: 16, Threads: 49 Processor1: 1091555380 Cortex-A53 1000MHz FPU Processor2: 1091555380 Cortex-A53 1000MHz FPU Processor3: 1091555380 Cortex-A53 1000MHz FPU Processor4: 1091555380 Cortex-A53 1000MHz 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

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

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

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

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

# ls /dev/ser* /dev/ser1

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

# echo Test message > /dev/ser1

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

Test message

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

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

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

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33136 inet 127.0.0.1 netmask 0xff000000 fec0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 address: 1e:37:77:3f:14:8d media: Ethernet autoselect (1000baseT full-duplex) status: active inet 192.168.1.11 netmask 0xffffff00 broadcast 192.168.1.255

Для проверки функционирования сетевого обмена выполнить следующую команду, инициирующую отправку ICMP пакетов существующему сетевому узлу:

# ping -c 3 192.168.1.100 PING 192.168.1.100 (192.168.1.100): 56 data bytes 64 bytes from 192.168.1.100: icmp_seq=0 ttl=64 time=0 ms 64 bytes from 192.168.1.100: icmp_seq=1 ttl=64 time=0 ms 64 bytes from 192.168.1.100: icmp_seq=2 ttl=64 time=0 ms ----192.168.1.100 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 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33136 inet 127.0.0.1 netmask 0xff000000 fec0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 address: 1e:37:77:3f:14:8d 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 192.168.1.11 netmask 0xffffff00 broadcast 192.168.1.255

Для проверки автоматического определения сетевого режима выполнить следующие команды:

# ifconfig fec0 media autoselect down up

Проверка считается пройденной успешно, если в выводе ifconfig -m присутствует строка

media: Ethernet autoselect

с указанием автоматически выбранного режима.

Для проверки установки требуемого сетевого режима необходимо установить его на ПМ и на инструментальной машине, с которой устанавливается сетевое соединение. Выполнить следующую команду на ПМ, где <режим> - требуемый сетевой режим из списка доступных сетевых режимов:

# ifconfig fec0 media <режим> down up

На инструментальной машине необходимо выполнить следующую команду, где <интерфейс> - сетевой интерфейс, <скорость> - требуемая скорость соединения, <тип> - half / full:

# ethtool -s <интерфейс> speed <скорость> duplex <тип> autoneg off

Проверка считается выполненной успешно, если после переключения режима корректно изменяется параметр media при вызове команды ifconfig для выбранного интерфейса, а команда ping отправляет и получает пакеты:

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

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

# ls /dev/sd10* /dev/sd10 /dev/sd10t177

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

# mount /dev/sd10t177 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-mx35. В составе загрузочного образа драйвер запускается автоматически. В случае успешного запуска драйвера в директории /dev/ будут создано устройство i2c0.

# ls /dev/i2c* /dev/i2c0

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

# i2c-scan -d /dev/i2c1 Scanning I2C device /dev/i2c0 for I2C devices... 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: xx -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- 25 -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Scanning done

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

Для работы с контроллером SPI используется драйвер spi-mx51ecspi.so. В составе загрузочного образа драйвер запускается автоматически. В случае успешного запуска драйвера в директории /dev/ будет создано устройство spi1.

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

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

Для работы с контроллерами CAN используется драйвер dev-can-mx35. В составе загрузочкого образа драйвер запускается автоматически. В случае успешного запуска драйвера в директории /dev/ будут созданы устройства can0,can1.

Проверка функционирования драйвера контроллера CAN описана ниже.


Note: Подразумевается, что на CAN периферию приходит тактирование частотой 66.5Мгц. Подробнее смотрите параметры -b, -B, -C в dev-can-mx35.

Проверяем наличие устройств после запуска драйвера:

# ls /dev/can0 rx0 rx16 rx23 rx30 tx32 tx40 tx48 tx56 rx1 rx17 rx24 rx31 tx33 tx41 tx49 tx57 rx10 rx18 rx25 rx4 tx34 tx42 tx50 tx58 rx11 rx19 rx26 rx5 tx35 tx43 tx51 tx59 rx12 rx2 rx27 rx6 tx36 tx44 tx52 tx60 rx13 rx20 rx28 rx7 tx37 tx45 tx53 tx61 rx14 rx21 rx29 rx8 tx38 tx46 tx54 tx62 rx15 rx22 rx3 rx9 tx39 tx47 tx55 tx63 # ls /dev/can1 rx0 rx16 rx23 rx30 tx32 tx40 tx48 tx56 rx1 rx17 rx24 rx31 tx33 tx41 tx49 tx57 rx10 rx18 rx25 rx4 tx34 tx42 tx50 tx58 rx11 rx19 rx26 rx5 tx35 tx43 tx51 tx59 rx12 rx2 rx27 rx6 tx36 tx44 tx52 tx60 rx13 rx20 rx28 rx7 tx37 tx45 tx53 tx61 rx14 rx21 rx29 rx8 tx38 tx46 tx54 tx62 rx15 rx22 rx3 rx9 tx39 tx47 tx55 tx63

Убеждаемся, что mailbox имеются.

Соединяем физически CAN0 и CAN1 интерфейсы.

CAN_H - CAN_H, CAN_L - CAN_L.

Затем запускаем на CAN1 - прослушивание mailbox 0. В CAN0 - будем отправлять пакеты в mailbox 32:

# cat /dev/can1/rx0 & # echo testing > /dev/can0/tx32 # testing

Мы убедились, что из can0-tx32 в can1-rx0 пришёл наш пакет.

То же самое проделываем и для последнего ящика в обратном направлении.

# cat /dev/can0/rx31 & # echo testing > /dev/can1/tx63 # testing

Мы убедились, что из can1-tx63 в can0-rx31 пришёл наш пакет.

Убеждаемся, что передача происходит физически, не в loopback режиме. Необходимо физически рассоединить CAN0-CAN1 и отправить несколько пакетов. Увидим, что они не выводятся у нас. Но после того, как подключим кабель - пакеты приходят.

# cat /dev/can0/rx31 & # echo testing > /dev/can1/tx63 # echo testing > /dev/can1/tx63 # echo testing > /dev/can1/tx63 # echo testing > /dev/can1/tx63 # echo testing > /dev/can1/tx63 # Соединили физически кабель # testing testing testing testing testing

Убеждаемся, что пакеты пришли после подключения кабеля.

На этом тестирование CAN можно считать завершённым успешно.

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

Для работы с блоком watchdog используется утилита wdtkick-imx. В составе загрузочного образа утилита запускается автоматически. Для проверки работоспособности блока watchdog вызвать завершение работы системы с помощью утилиты shutdown:

# shutdown -fb

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

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

Для работы с контроллером PCI используется драйвер pci-imx. В составе загрузочного образа драйвер запускается автоматически. В случае успешного запуска драйвера в директории /dev/ будут создано устройство pci.

# ls /dev/pci /dev/pci

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

# pci PCI version = 2.10 Class = Network (Ethernet) Vendor ID = 8086h, Intel Corporation Device ID = 1533h, I210 Gigabit Network Connection PCI index = 0h BAR - 0 [Mem] = 0h disabled BAR - 3 [Mem] = 0h disabled PCI Expansion ROM = 0h disabled PCI Int Pin = INT A Interrupt line = 0 CPU Interrupt = 0h

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

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

# ls /dev/gpio /dev/gpio

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

# cat /dev/gpio 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 0 0i 0i 0i 0i 0i 1i 1i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i gpio2 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 0 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 1i 0i 0i 0i 0i 0i 0i 1i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i gpio3 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 0 1i 1i 0i 0i 0i 0i 1i 1i 1i 1i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 1i 0i 0i 1i 1i 0i 0i 0i 0i gpio4 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 0 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 1i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i gpio5 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 0 0i 0i 0i 1i 1i 1i 1i 0i 0i 0i 0i 0i 0i 0i 0i 0i 1i 1i 1i 1i 1i 1i 0i 1i 0i 0i 1i 1i 1i 0i 0i 0i # echo "3 16 1" > /dev/gpio # cat /dev/gpio 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 0 0i 0i 0i 0i 0i 1i 1i 0i 1o 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i gpio2 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 0 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 1i 0i 0i 0i 0i 0i 0i 1i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i gpio3 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 0 1i 1i 0i 0i 0i 0i 1i 1i 1i 1i 0i 0i 0i 0i 0i 0i 1o 0i 0i 0i 0i 0i 0i 1i 0i 0i 1i 1i 0i 0i 0i 0i gpio4 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 0 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 1i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i gpio5 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 0 0i 0i 0i 1i 1i 1i 1i 0i 0i 0i 0i 0i 0i 0i 0i 0i 1i 1i 1i 1i 1i 1i 0i 1i 0i 0i 1i 1i 1i 0i 0i 0i




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