400 строки
22 KiB
Plaintext
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}
|