Пакеты поддержки модулей для ЗОСРВ «Нейтрино» > AArch64 (ARM64) > BSP для устройств на основе процессора Rockchip RK3568 > Проверка функционирования



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

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


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

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

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

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


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

Подготовка

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


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


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

$ cd utils $ make install

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

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

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

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

# uname -s

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

KPDA

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

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

# pidin ar pid Arguments 1 procnto-smp -v -mnP 2 slogger -s64k 3 pipe 4 random -t 5 devc-ser8250-dw -vv -F -e -b115200 -c24000000 0xFE660000^2,150 6 devb-sdmmc mem name=/below4G blk memory=/below4G,cache=8m sdio hc=dw,addr=0xFE2B0000,irq=0x82 disk name=sd cam quiet 7 mksh 8 pidin ar

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

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

# pidin info CPU:AARCH64 Release:2024 FreeMem:105Mb/130Mb BootTime:Jan 01 00:00:00 UTC 1970 Processes: 8, Threads: 32 Processor1: 1093652560 Cortex-A55 816MHz FPU Processor2: 1093652560 Cortex-A55 816MHz FPU Processor3: 1093652560 Cortex-A55 816MHz FPU Processor4: 1093652560 Cortex-A55 816MHz 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- @0xffffff80600aca18:0x0 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 14 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 4 1 random 4 2 random 4 3 random 5 1 devc-ser8250-dw 1 0x96 0 --- @0x403288:0x42d078 6 1 devb-sdmmc 2 0x82 0 TP- =PULSE 0x40000005:21 0x3:0 6 2 devb-sdmmc 6 3 devb-sdmmc 6 4 devb-sdmmc 6 5 devb-sdmmc 6 6 devb-sdmmc 6 7 devb-sdmmc 6 8 devb-sdmmc 7 1 mksh 40968 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 = 1.58 mks ------------------------------------

Проверка функционирования часов реального времени

Для установки и получения даты от внешних часов реального времени используется утилита rtc. Перед использованием необходимо проверить какие часы реального времени используются на оборудовании и включить соответствующий I2C контроллер.

Получить текущее время от часов реального времени pcf8563:

# rtc -v pcf8563 rtc get: current RTC time is 2020/12/10 14:30:22 (UTC)

Установить системную дату и время на часы реального времени pcf8563:

# rtc -v -s pcf8563 rtc set: current RTC time is 1999/10/11 18:00:13 (UTC)

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

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

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

# pidin info CPU:AARCH64 Release:2024 FreeMem:105Mb/130Mb BootTime:Jan 01 00:00:00 UTC 1970 Processes: 8, Threads: 33 Processor1: 1093652560 Cortex-A55 816MHz FPU Processor2: 1093652560 Cortex-A55 816MHz FPU Processor3: 1093652560 Cortex-A55 816MHz FPU Processor4: 1093652560 Cortex-A55 816MHz 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-ser8250. Настройки последовательного порта по умолчанию: скорость 115200, 8 бит, без контроля четности, 1 стоп-бит. В составе загрузочного образа драйвер запускается автоматически.

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

# ls /dev/ser* /dev/ser1

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

# echo Test message > /dev/ser1

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

Test message

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

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

# ls /dev/sd0* /dev/sd0 /dev/sd0.lin_data.2 /dev/sd0.efi.1 /dev/sd0.qnx6.3

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

# mount /dev/sd0.qnx6.3 on /fs/qnx6 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.038 secs (6736842 bytes/sec) 0m00.04s 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.010 secs (25600000 bytes/sec) 0m00.01s real 0m00.00s user 0m00.00s system

Проверка сетевого драйвера

Для работы Ethernet-контроллеров необходимо использовать менеджер ресурсов io-pkt-* с драйвером devnp-stmmac.so либо devnp-rockchip.so. Драйвер devnp-stmmac.so обеспечивает работу двух контроллеров, в то время как devnp-rockchip.so предоставляет возможность использовать только один сетевой контроллер. По умолчанию в загрузочном образе используется devnp-stmmac.so.


Note: Для работы Ethernet-контроллеров рекомендуется использовать драйвер devnp-stmmac.

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

# ifconfig lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33136 inet 127.0.0.1 netmask 0xff000000 st0: flags=843<UP,BROADCAST,RUNNING,SIMPLEX> mtu 1500 address: ea:63:57:cc:f4:76 media: Ethernet autoselect (1000baseT full-duplex) status: active inet 192.168.0.10 netmask 0xffffff00 broadcast 192.168.0.255 st1: flags=843<UP,BROADCAST,RUNNING,SIMPLEX> mtu 1500 address: 0e:5d:b6:ae:ce:fa media: Ethernet autoselect (1000baseT full-duplex) status: active inet 192.168.1.10 netmask 0xffffff00 broadcast 192.168.1.255

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

# ping -c 3 192.168.0.1 PING 192.168.0.1 (192.168.0.1): 56 data bytes 64 bytes from 192.168.0.1: icmp_seq=0 ttl=64 time=1 ms 64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0 ms 64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=0 ms ----192.168.0.1 PING Statistics---- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 0/0/1 ms variance = 0 ms^2 # ping -c 3 192.168.1.1 PING 192.168.1.1 (192.168.1.1): 56 data bytes 64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=1 ms 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0 ms ----192.168.1.1 PING Statistics---- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 0/0/1 ms variance = 0 ms^2

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

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33136 inet 127.0.0.1 netmask 0xff000000 rkc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 address: a6:e5:a6:79:b4:1f media: Ethernet autoselect (1000baseT full-duplex) status: active inet 192.168.42.2 netmask 0xffffff00 broadcast 192.168.42.255

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

# ping -c 3 192.168.42.1 PING 192.168.42.1 (192.168.42.1): 56 data bytes 64 bytes from 192.168.42.1: icmp_seq=0 ttl=64 time=1 ms 64 bytes from 192.168.42.1: icmp_seq=1 ttl=64 time=0 ms 64 bytes from 192.168.42.1: icmp_seq=2 ttl=64 time=0 ms

Проверка считается выполненной успешно, если все 3 пакета были успешно получены (процент потерь равен нулю).

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

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

Проверить наличие устройства gpio в директории /dev/:

# ls /dev/gpio /dev/gpio

Выполнить чтение состояний и направлений GPIO:

# cat /dev/gpio 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 1i 0i 1i 1i 0i 1i 1i 0i 1i 1i 1i 1i 1i 1i 0i 0i 1i 0i 0i 1i 0i 1i 0i 1i 1i 0i 1i 0i 0i 0i 0i 1 1i 1i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 1i 1i 1i 1i 1i 1i 1i 1i 1i 1i 0i 1i 0i 1i 1i 1i 1i 1i 1i 1i 2 1i 1i 0i 0i 0i 0i 0i 0i 1i 0i 1i 0i 0i 0i 0i 0i 0i 0i 0i 0i 1i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 1i 3 0i 0i 0i 0i 0i 0i 1i 0i 0i 1i 0i 1i 1i 0i 0i 0i 1i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 0i 4 1i 1i 1i 0i 0i 0i 0i 1i 0i 0i 1i 1i 1i 1i 0i 1i 0i 0i 1i 1i 0i 0i 0i 1i 1i 1i 1i 0i 0i 0i 0i 0i

Проверка считается выполненной успешно, если в директории /dev/ есть устройство gpio и удалось выполнить чтение состояний и направлений GPIO.

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

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

# can-rk3568 can0 -v can1 -v # ls /dev/can* /dev/can0: rx0 tx1 /dev/can1: rx0 tx1

Для выполнения тестирования необходимо физически соединить интерфейсы CAN0 и CAN1. Соединение осуществляется следующим образом:

CAN_H - CAN_H, CAN_L - CAN_L.

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

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

В результате выполнения теста следует убедиться, что пакеты, отправленные через интерфейс can0-tx1, успешно приняты на интерфейсе can1-rx0.

Проверка подсистемы USB

Для работы USB требуется менеджер io-usb и драйверы хост-контроллеров devu-ohci.so и devu-ehci.so. В составе загрузочного образа менеджер запускается автоматически. Для проверки работы шины выполните команду usb, выводящую информацию о запущенных контроллерах и подключенных к ним устройствам. При корректной работе USB в выводе должны появиться все подключенные в 2.0 порты устройства:

# usb USB 0 (OHCI) v1.10, v1.01 DDK, v1.01 HCD USB 1 (EHCI) v1.10, v1.01 DDK, v1.01 HCD Device Address : 1 Vendor : 0x0dd8 (Netac) Product : 0x3700 (OnlyDisk) Class : 0x00 (Independent per interface) USB 2 (OHCI) v1.10, v1.01 DDK, v1.01 HCD Device Address : 1 Vendor : 0x04f3 Product : 0x0103 Class : 0x00 (Independent per interface) USB 3 (EHCI) v1.10, v1.01 DDK, v1.01 HCD

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

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

# ls /dev/i2c* /dev/i2c0

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

# i2c-scan -d /dev/i2c0 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: -- -- -- -- -- -- -- -- -- -- -- -- 1c -- -- -- 20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 50 51 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Scanning done

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

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

# ls /dev/spi* /dev/spi0

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

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

# spitest setcfg 1 1 1288 5 Set configuration for SPI Device /dev/spi1: cs1 mode 508 clock_rate 5 Reading existing configuration of SPI Device... device = 0x1 name = spi-dev1 mode = 0x108 clock_rate = 50 Changing configuration of SPI Device... Reading updated configuration of SPI Device... device = 0x1 name = spi-dev1 mode = 0x508 clock_rate = 5 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 = 0x108 clock_rate = 50 --- device 0x0001 info --- device = 0x1 name = spi-dev1 mode = 0x508 clock_rate = 5 --- device 0x0002 info --- device = 0x2 name = spi-dev2 mode = 0x108 clock_rate = 50 --- device 0x0003 info --- device = 0x3 name = spi-dev3 mode = 0x108 clock_rate = 50 --- device 0x0004 info --- Done, 4 devices detected Reading info using SPI_DEV_ID_NONE bit... device = 0x0 name = spi-dev0 mode = 0x108 clock_rate = 50 Done, 1 devices detected

Запись/чтение при настройке loopback:

# spitest iotext 1 1 5 asdfg SPI Device /dev/spi1 cs1 transfer test Was called uncorrect testTransfering 5 bytes of data Sent data: 61 73 64 66 67 SPI transfer completed, 5 byte(s) read Read data: 61 73 64 66 67 Test completed OK!

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

Для работы с SATA используется драйвер devb-ahci. В составе загрузочного образа драйвер запускается автоматически. Для проверки работоспособности драйвера подключить к ПМ накопитель с интерфейсом SATA с отформатированным разделом FAT, содержащий хотя бы один не пустой файл. Список созданных устройств в /dev для подключенного накопителя можно посмотреть командой:

# ls /dev bpf null socket tty bpf0 pipe spi1 tun0 can0 platform stderr tun1 console random stdin tun2 crypto sd0 stdout tun3 gpio sd0.efi.1 tap tymem hd0 sd0.lin_data.2 tap0 urandom hd0t131 sem tap1 zero i2c0 ser1 tap2 io-usb shmem tap3 mem slog text

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

# mount -t dos /dev/<имя устройства> /satafs # cp /satafs/test_file /tmp/ # cksum /satafs/test_file # cksum /tmp/test_file

В данном случае имя устройства: hd0t131. Проверка считается выполненной успешно, если контрольные суммы, выведенные двумя последними командами, совпадают. Для оценки скорости записи и соответствующей загрузки 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.




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