1
1
kpda-bsp-allwinner-h3-orang.../docs/11-Verification.dox

400 строки
22 KiB
Plaintext

@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
@@@item Проверка драйвера контроллера USB
@@@item Проверка драйвера контроллера SD/MMC
@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 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
6 random -t
7 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 15 procnto-smp
1 17 procnto-smp
2 1 slogger
3 1 pipe
3 2 pipe
3 3 pipe
4 1 devc-ser8250
1 0x20 0 --- @0x804ab6c:0x805d1c0
5 1 io-usb
2 0x6a 0 TP- =PULSE 0x40000008:21 0:0
3 0x6b 0 TP- =PULSE 0x4000000b:21 0:0
4 0x6c 0 TP- =PULSE 0x4000000e:21 0:0
5 0x6d 0 TP- =PULSE 0x40000011:21 0:0
6 0x6e 0 TP- =PULSE 0x40000014:21 0:0
7 0x6f 0 TP- =PULSE 0x40000017:21 0:0
5 2 io-usb
5 3 io-usb
5 4 io-usb
5 5 io-usb
5 6 io-usb
5 7 io-usb
5 8 io-usb
5 9 io-usb
5 10 io-usb
5 11 io-usb
6 1 random
6 2 random
6 3 random
7 1 io-pkt-v4-hc-ksz
7 2 io-pkt-v4-hc-ksz
8 0x72 0 T-- @0x78002d5c:0x818f2c0
7 3 io-pkt-v4-hc-ksz
4104 1 sh
4105 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<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33192
inet 127.0.0.1 netmask 0xff000000
sun0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
address: f2:b4:15:84:4c:8b
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet <ip адрес> netmask <маска> broadcast <широковещательный адрес>
@endoutput
Для проверки функционирования сетевого обмена выполнить следующую команду, инициирующую отправку ICMP пакетов существующему сетевому узлу:
@output{shell}
# ping -c 3 <ip получателя>
PING <ip получателя> (<ip получателя>): 56 data bytes
64 bytes from <ip получателя>: icmp_seq=0 ttl=64 time=0 ms
64 bytes from <ip получателя>: icmp_seq=1 ttl=64 time=0 ms
64 bytes from <ip получателя>: icmp_seq=2 ttl=64 time=0 ms
----<ip получателя> 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}. В составе загрузочного образа драйвер запускается автоматически. Для вывода информации о доступных интерфейсах выполнить команду @l{usb}.
В случае успешного запуска драйвера в директории `/dev/` будет создано устройство @c io-usb.
@output{shell}
# ls /dev/io-usb
devu-ehci.so devu-ohci.so io-usb
@endoutput
Для проверки функционирования драйвера UART подключить ПМ к ПК через преобразователь по USB в один из разъемов и запустить терминальную программу @a minicom. В последовательном или удалённом терминале выполнить следующую команду:
@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
После подключения должно появиться новое устройство:
@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
@prev{./00-UserGuide.html|table_of_articles||11}