@page "Verification" Проверка функционирования @brief Проверка функционирования ППМ OrangePi-PC Allwinner-H3 под ЗОСРВ «Нейтрино». @br Список проверок: @@item Базовые проверки функционирования ОС @@@item Проверка запуска на ПМ ядра ЗОСРВ в составе загружаемого образа @@@item Проверка запуска компонентов @@@item Проверка функционирования контроллера DDR памяти @@@item Проверка функционирования контроллера прерываний @@@item Проверка функционирования таймера @@@item Проверка работы ЗОСРВ на ЦП в режиме симметричной мультипроцессорности (SMP) с поддержкой всех CPU ядер типа Cortex-A7 @@item Проверки интерфейсов @@@item Проверка драйвера контроллера UART @@@item Проверка драйвера контроллера Gigabit Ethernet @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 devc-ser8250 -e -F -b115200 -c24000000/16 0x01C28000^2,32 5 random -t 6 io-pkt-v4-hc-ksz -dsun8i 4103 sh 4104 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- @0xfe08a2c4:0x0 1 5 procnto-smp 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 16 procnto-smp 2 1 slogger 3 1 pipe 3 2 pipe 3 3 pipe 4 1 devc-ser8250 1 0x20 0 --- @0x804ab30:0x805d1c0 5 1 random 5 2 random 5 3 random 6 1 io-pkt-v4-hc-ksz 6 2 io-pkt-v4-hc-ksz 2 0x72 0 T-- @0x78002d5c:0x818f2c0 6 3 io-pkt-v4-hc-ksz 4103 1 sh 20488 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_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 пакета были успешно получены (процент потерь равен нулю). @prev{./00-UserGuide.html|table_of_articles||11}