Проверка функционирования ППМ для семейства микропроцессоров Rockchip серии RK3568 под ЗОСРВ «Нейтрино».
Список проверок:
Тестовый стенд представляет из себя ПМ на базе микропроцессора 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
Для вывода информации о процессоре и доступной оперативной памяти выполнить команду 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)
Проверка считается выполненной успешно, если выводятся аналогичные выше строки и при перезапуске устройства с батарейкой время не сбрасывается.
Для вывода информации о количестве процессоров выполнить команду 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
Для работы с последовательным портом используется драйвер devc-ser8250. Настройки последовательного порта по умолчанию: скорость 115200, 8 бит, без контроля четности, 1 стоп-бит. В составе загрузочного образа драйвер запускается автоматически.
В случае успешного запуска драйвера в директории /dev/
будут созданы устройства ser1
.
# ls /dev/ser* /dev/ser1
Для проверки функционирования драйвера UART подключите ПМ к последовательному порту ПК (или через преобразователь по USB) и запустите терминальную программу. В последовательном или удалённом терминале выполните следующую команду:
# echo Test message > /dev/ser1
Проверка считается выполненной успешно, если в терминальной программе будет выведено сообщение:
Test message
Для работы с контроллером 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 используется драйвер devnp-rockchip.so и менеджер ресурсов io-pkt-*. В составе загрузочного образа драйвер запускается автоматически. Для вывода информации о сетевых интерфейсах выполните команду ifconfig. В случае успешного запуска драйвера будет создан сетевой интерфейс 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-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-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 требуется менеджер 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-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
Предыдущий раздел: перейти