@page "Verification" Проверка функционирования @brief Проверка функционирования ППМ OrangePi PC Allwinner H3 под ЗОСРВ «Нейтрино». @br Список проверок: @@item Базовые проверки функционирования ОС @@@item Проверка запуска на ПМ ядра ЗОСРВ в составе загружаемого образа @@@item Проверка запуска компонентов @@@item Проверка функционирования контроллера DDR памяти @@@item Проверка функционирования контроллера прерываний @@@item Проверка функционирования таймера @@@item Проверка функционирования подсистемы управления общими элементами платформ @@@item Проверка работы ЗОСРВ на ЦП в режиме симметричной мультипроцессорности (SMP) с поддержкой всех CPU ядер типа Cortex-A7 @@item Проверки интерфейсов @@@item Проверка драйвера контроллера UART @@@item Проверка драйвера контроллера Gigabit Ethernet @@@item Проверка драйвера контроллера USB @@@item Проверка драйвера контроллера SD/MMC @@@item Проверка драйвера контроллера HDMI @par Тестовый стенд Тестовый стенд представляет из себя отладочный модуль OrangePi PC, соединённый с инструментальным ПК по интерфейсам RS-232 и Ethernet. @br На инструментальный ПК должно быть установлено: @ul @item ОС семейства GNU Linux, например, Ubuntu 20.04 @item Комплект разработчика для ЗОСРВ «Нейтрино» @item ППМ OrangePi PC Allwinner H3 @item Терминальная программа для отладочной консоли модуля OrangePi PC, например, minicom @endul @par Подготовка Перед проведением проверок необходимо запустить ЗОСРВ «Нейтрино» на отладочном модуле OrangePi PC в соответствии с главой документации @link{./Boot.html}Загрузка образа ОС@endlink. @br Дополнительные тестовые программы @a rr, @a ticksize и другие не входят в состав ППМ и должны быть самостоятельно загружены из @link{https://git.kpda.ru/utils/hw}публичного git-репозитория@endlink и собраны командой: @output{shell} $ cd utils $ make install @endoutput Затем следует скопировать @a armle-v7 версии тестовых программ на SD карту памяти и подключить её к OrangePi PC или передать файлы по сети с помощью @l{Настройка FTP сервера|FTP} или @l{Настройка NFS сервера|NFS}. @group base @group base_run В последовательном терминале выполнить команду: @output{shell}# uname -s @endoutput Проверка считается выполненной успешно, если в терминале будет выведено сообщение вида: @output{shell}KPDA @endoutput @group base_comp Для вывода информации о запущенных компонентов выполнить команду @l{pidin|pidin ar}: @output{shell} # pidin ar pid Arguments 1 procnto-smp -vvv -ae 2 slogger -s 16384k 3 pipe 4 platform-control -dsunxi 5 devc-ser8250 -e -F -b115200 -c24000000/16 0x01C28000^2,32 6 io-usb -dehci ioport=0x01c1b000,irq=106 -dohci ioport=0x01c1b400,irq=107 -dehci ioport=0x01c1c000,irq=108 -dohci ioport=0x01c1c400,irq=109 -dehci ioport=0x01c1d000,irq=110 -dohci ioport=0x01c1d400,irq=111 7 devb-sdmmc mem name=/below4G blk memory=/below4G,cache=8m sdio hc=sunxi,addr=0x01C0F000,irq=92 disk name=sd cam pnp,quiet 8 random -t 9 io-pkt-v4-hc-ksz -dsun8i 4106 sh 4107 pidin ar @endoutput @group base_mem Для вывода информации о процессоре и доступной оперативной памяти выполнить команду @l{pidin|pidin info}: @output{shell} # pidin info CPU:ARM Release:trunk FreeMem:992Mb/1024Mb BootTime:Jan 01 00:00:00 UTC 1970 Processes: 8, Threads: 28 Processor1: 1091551349 Cortex A7 228MHz FPU Processor2: 1091551349 Cortex A7 228MHz FPU Processor3: 1091551349 Cortex A7 228MHz FPU Processor4: 1091551349 Cortex A7 228MHz FPU @endoutput Для проверки функционирования контроллера оперативной памяти используется утилита @a memcheck. Ее требуется запустить и дождаться завершения проверки: @output{shell}# /tmp/memcheck @endoutput Проверка считается выполненной успешно, если выведено сообщение: @output{shell}PASS: all memory allocated @endoutput @group base_interrupts Для вывода информации о используемых прерываниях выполнить команду @l{pidin|pidin ir}: @output{shell} # 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- @0xfe08a4b8: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 13 procnto-smp 1 14 procnto-smp 1 15 procnto-smp 1 16 procnto-smp 2 1 slogger 3 1 pipe 3 2 pipe 3 3 pipe 4 1 platform-control 4 2 platform-control 5 1 devc-ser8250 1 0x20 0 --- @0x804ab6c:0x805d1c0 6 1 io-usb 2 0x6a 0 TP- =PULSE 0x40000008:21 0:0 3 0x6c 0 TP- =PULSE 0x4000000e:21 0:0 4 0x6e 0 TP- =PULSE 0x40000014:21 0:0 6 2 io-usb 6 3 io-usb 6 4 io-usb 6 5 io-usb 6 6 io-usb 6 7 io-usb 6 8 io-usb 7 1 devb-sdmmc 5 0x5c 1 TP- =PULSE 0x40000005:21 0x3:0 7 2 devb-sdmmc 7 3 devb-sdmmc 7 4 devb-sdmmc 7 5 devb-sdmmc 7 6 devb-sdmmc 7 7 devb-sdmmc 7 8 devb-sdmmc 8 1 random 8 2 random 8 3 random 9 1 io-pkt-v4-hc-ksz 9 2 io-pkt-v4-hc-ksz 6 0x72 0 T-- @0x78002d5c:0x818f2c0 9 3 io-pkt-v4-hc-ksz 4106 1 sh 12299 1 pidin @endoutput Проверка считается пройденной успешно, если вывод утилиты @l{pidin|pidin ir} содержит информацию об обработчиках прерывания, принадлежащих выполняемым процессам, в формате @output{shell} pid tid Имя процесса id прерывания vector mask_count flags handler:area @endoutput @group base_system_timer Для проверки функционирования системного таймера необходимо воспользоваться программой @a ticksize: @output{shell}# /tmp/ticksize @endoutput Проверка считается выполненной успешно, если вывод данной программы содержит аналогичные строки: @output{shell} System timer ticksize: 1000 mks Measuring system timer interrupt latency for 10 sec... ------------------------------------ System Timer Latency = 0.54 mks ------------------------------------ @endoutput @group base_platform Для вывода информации о запущенных компонентов выполнить команду @l{pidin|pidin ar}: @output{shell} # pidin ar pid Arguments 1 procnto-smp -vvv -ae 2 slogger -s 16384k 3 pipe 4 platform-control -dsunxi 5 devc-ser8250 -e -F -b115200 -c24000000/16 0x01C28000^2,32 6 io-usb -dehci ioport=0x01c1b000,irq=106 -dohci ioport=0x01c1b400,irq=107 -dehci ioport=0x01c1c000,irq=108 -dohci ioport=0x01c1c400,irq=109 -dehci ioport=0x01c1d000,irq=110 -dohci ioport=0x01c1d400,irq=111 7 devb-sdmmc mem name=/below4G blk memory=/below4G,cache=8m sdio hc=sunxi,addr=0x01C0F000,irq=92 disk name=sd cam pnp,quiet 8 random -t 9 io-pkt-v4-hc-ksz -dsun8i 4106 sh 4107 pidin ar @endoutput Проверка считается пройденной успешно, если вывод утилиты @l{pidin|pidin ar} содержит информацию о запуске @l{platform-control|менеджера управления общими элементами платформ} с аргументом @l{devp-sunxi.so|-dsunxi}: @output{shell} 4 platform-control -dsunxi @endoutput @group base_smp Для вывода информации о количестве процессоров выполнить команду @l{pidin|pidin info}: @output{shell} # pidin info CPU:ARM Release:trunk FreeMem:992Mb/1024Mb BootTime:Jan 01 00:00:00 UTC 1970 Processes: 8, Threads: 28 Processor1: 1091551349 Cortex A7 228MHz FPU Processor2: 1091551349 Cortex A7 228MHz FPU Processor3: 1091551349 Cortex A7 228MHz FPU Processor4: 1091551349 Cortex A7 228MHz FPU @endoutput Для проверки функционирования на всех ядрах выполнить следующее: @output{shell} # for cpu in 0 1 2 3; do on -C$cpu pidin -P pidin -fl; done @endoutput Проверка считается выполненной успешно, если вывод содержит следующие строки: @output{shell} cpu 0 cpu 1 cpu 2 cpu 3 @endoutput @group bsp @group bsp_uart Для работы с последовательным портом используется драйвер @l{devc-ser8250}. Настройки последовательного порта по умолчанию: скорость 115200, 8 бит, без контроля четности, 1 стоп-бит. В составе загрузочного образа драйвер запускается автоматически. В случае успешного запуска драйвера в директории `/dev/` будет создано устройство @c ser1. @output{shell} # ls /dev/ser* /dev/ser1 @endoutput Для проверки функционирования драйвера UART подключить ПМ к ПК через преобразователь по USB в один из разъемов и запустить терминальную программу @a minicom. В последовательном или удалённом терминале выполнить следующую команду: @output{shell} # echo Test message > /dev/ser1 @endoutput Проверка считается выполненной успешно, если в терминальной программе будет выведено сообщение: @output{shell} Test message @endoutput @group bsp_ethernet Для работы с контроллером интерфейса Gigabit Ethernet используется драйвер @l{devnp-sun8i.so} и менеджер ресурсов @l{io-pkt-*|io-pkt-v4-hc-ksz}. В составе загрузочного образа драйвер запускается автоматически. Для вывода информации о сетевых интерфейсах выполнить команду @l{ifconfig}. В случае успешного запуска драйвера будет создан сетевой интерфейс @a xzynq0 и в результате выполнения команды @l{ifconfig} на экран будут выведены данные, аналогичные следующим, с указанием текущего ip-адреса, маски и широковещательного адреса: @output{shell} lo0: flags=8049 mtu 33192 inet 127.0.0.1 netmask 0xff000000 sun0: flags=8843 mtu 1500 address: f2:b4:15:84:4c:8b media: Ethernet autoselect (100baseTX full-duplex) status: active inet netmask <маска> broadcast <широковещательный адрес> @endoutput Для проверки функционирования сетевого обмена выполнить следующую команду, инициирующую отправку ICMP пакетов существующему сетевому узлу: @output{shell} # ping -c 3 PING (): 56 data bytes 64 bytes from : icmp_seq=0 ttl=64 time=0 ms 64 bytes from : icmp_seq=1 ttl=64 time=0 ms 64 bytes from : icmp_seq=2 ttl=64 time=0 ms ---- PING Statistics---- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 0/0/0 ms variance = 0 ms^2 @endoutput Проверка считается выполненной успешно, если все 3 пакета были успешно получены (процент потерь равен нулю). @group bsp_usb Для работы с контроллером интерфейса USB используются драйвера @l{devu-ehci.so}, @l{devu-ohci.so} и менеджер ресурсов @l{io-usb}. В составе загрузочного образа драйвер запускается автоматически. В случае успешного запуска драйвера в директории `/dev/` будет создано устройство @c io-usb. @output{shell} # ls /dev/io-usb devu-ehci.so devu-ohci.so io-usb @endoutput Для получения списка подключенных @a usb устройств может быть использована утилита @a usb: @output{shell} # usb @endoutput Проверка считается выполненной успешно, если в терминальной программе будет выведено сообщение: @output{shell} USB 0 (EHCI) v1.10, v1.01 DDK, v1.01 HCD USB 1 (OHCI) v1.10, v1.01 DDK, v1.01 HCD USB 2 (EHCI) v1.10, v1.01 DDK, v1.01 HCD USB 3 (OHCI) v1.10, v1.01 DDK, v1.01 HCD USB 4 (EHCI) v1.10, v1.01 DDK, v1.01 HCD USB 5 (OHCI) v1.10, v1.01 DDK, v1.01 HCD @endoutput После подключения USB flash накопителя к ПМ должно появиться новое устройство: @output{shell} # usb USB 0 (EHCI) v1.10, v1.01 DDK, v1.01 HCD Device Address : 1 Vendor : 0x8564 (JetFlash) Product : 0x1000 (Mass Storage Device) Class : 0x00 (Independent per interface) USB 1 (OHCI) v1.10, v1.01 DDK, v1.01 HCD USB 2 (EHCI) v1.10, v1.01 DDK, v1.01 HCD USB 3 (OHCI) v1.10, v1.01 DDK, v1.01 HCD USB 4 (EHCI) v1.10, v1.01 DDK, v1.01 HCD USB 5 (OHCI) v1.10, v1.01 DDK, v1.01 HCD @endoutput @group bsp_sdmmc Для работы с контроллером SD/MMC используется драйвер @l{devb-sdmmc}. В составе загрузочного образа драйвер запускается автоматически. В случае успешного запуска драйвера в директории `/dev/` будет создано устройство `sd0`, соответствующее SD-карте, а также устройства, соответствующие разделам. Для управления устройствами могут быть использованы стандартные утилиты для управления и чтения/записи блочных устройств. Проверка считается выполненной успешно, если при выполнении команды @l{ls|ls /dev/sd0*} отображаются устройства, соответствующие SD-карте и разделам, например: @output{shell} # ls /dev/sd0* /dev/sd0 /dev/sd0t131 /dev/sd0t177 @endoutput В выводе утилиты @l{mount} увидеть точку монтирования одного из разделов SD-карты, например: @output{shell} # mount /dev/sd0t177 on /fs/qnx6 type qnx6 @endoutput Для измерения производительности операции записи и чтения необходимо создать файл и заполнить его случайными значениями с помощью утилиты @l{dd}, при этом измеряя время данной операции через @l{time}: @output{shell} # 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 @endoutput Выводом данной команды будет является время и скорость записи: @output{shell} 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 @endoutput Для измерения скорости чтения необходимо скопировать созданный тестовый файл в `/dev/null` с помощью утилиты @l{dd}: @output{shell} # time dd if=<точка монтирования>/test_file of=/dev/null bs=1000 count=256 @endoutput Выводом данной команды будет является время и скорость чтения: @output{shell} 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 @endoutput @group bsp_hdmi Проверка HDMI производится с использованием утилиты @l{gf-vsync}. Перед выполнением проверки необходимо подключить к OrangePi PC монитор через разъем HDMI. Для корректной проверки на устройстве должен размещаться файл @l{display.conf|/etc/system/config/display.conf} следующего содержания: @code device { drivername=sunxi vid=0x0 did=0x0 deviceindex=0 display { xres=1920 yres=1080 refresh=60 pixel_format=argb8888 } } @endcode В конфигурационном файле @l{sunxi.conf|/etc/system/config/sunxi.conf} раскомментировать соответствующую строку: @code # Allwinner H3 configuration sample irq=118,memory=64,verbose=debug #base=0x01C0C000:0x01000000:0x01EE0000,irq=118,memory=64,verbose=debug @endcode Затем необходимо запустить @l{io-display} @output{shell} # io-display -dvid=0,did=0 @endoutput После — воспользоваться утилитой @l{gf-vsync} @output{shell} # gf-vsync -l0 @endoutput Проверка считается пройденной успешно, если на экране отображается корректное изображение, соответствующее документации на утилиту @l{gf-vsync}. @prev{./00-UserGuide.html|table_of_articles||11}