Проверка функционирования ППМ для семейства микропроцессоров 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-контроллеров необходимо использовать менеджер ресурсов io-pkt-* с драйвером devnp-stmmac.so либо devnp-rockchip.so. Драйвер devnp-stmmac.so обеспечивает работу двух контроллеров, в то время как devnp-rockchip.so предоставляет возможность использовать только один сетевой контроллер. По умолчанию в загрузочном образе используется devnp-stmmac.so.
| Для работы 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-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
Для работы с контроллером 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 используется драйвер 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.
Предыдущий раздел: перейти