1
1

BSP для ЗОСРВ "Нейтрино" редакции 2021

This commit is contained in:
commit de2c0ad4e5
588 changed files with 80506 additions and 0 deletions

58
Makefile Normal file
View File

@ -0,0 +1,58 @@
# This is the top level Makefile for all source packages.
# It makes all the code in the "src" directory, then installs it
# to the "install" directory", then makes the images in
# the images directory (if present)
ROOT_DIR := $(notdir $(CURDIR))
ifndef QCONFIG
QCONFIG=qconfig.mk
endif
include $(QCONFIG)
unexport ROOT_DIR
.PHONY: all install clean make_builds clean_builds dummy images prebuilt
# Expands to a single newline character
define NEWLINE
endef
SUFFIXES := .mk
all:
$(if $(wildcard prebuilt/*), $(MAKE) prebuilt)
$(if $(wildcard src/*), $(MAKE) -Csrc hinstall)
$(if $(wildcard src/*), $(MAKE) -Csrc install)
$(MAKE) make_builds
$(MAKE) images
@echo done
subdirs:=$(subst /Makefile,,$(wildcard */[Mm]akefile))
clean:
$(foreach dir,$(subdirs), $(MAKE) -C$(dir) clean $(NEWLINE))
-$(RM_HOST) -rv install/*
install: all
make_builds:
@$(foreach file,$(wildcard install/*/boot/build/*), \
$(if $(wildcard images/$(notdir $(file))), \
echo Skip $(wildcard images/$(notdir $(file))), \
echo Copy $(file) to images/$(notdir $(file)); $(CP_HOST) -n $(file) images/$(notdir $(file)));)
clean_builds:
@$(if $(wildcard install/*/boot/build/*), \
$(foreach file,$(wildcard install/*/boot/build/*), \
echo Delete images/$(notdir $(file)); $(RM_HOST) images/$(notdir $(file)); ), \
$(foreach file,$(wildcard prebuilt/*/boot/build/*), \
echo Delete images/$(notdir $(file)); $(RM_HOST) images/$(notdir $(file)); ))
images:
$(if $(wildcard images/*.build), $(MAKE) -Cimages)
prebuilt:
-$(RM_HOST) -rf install/*
$(CP_HOST) -r prebuilt/* install/

85
README.md Normal file
View File

@ -0,0 +1,85 @@
# BSP для платы OrangePi PC на базе Allwinner H3 (ARMv7 Cortex-A7 QuadCore)
## Руководство пользователя и бинарная сборка
- [Бинарный релиз](https://git.kpda.ru/BSP/kpda-bsp-allwinner-h3-orangepipc/releases/tag/release-2021)
- [Руководство пользователя](https://git.kpda.ru/BSP/kpda-bsp-allwinner-h3-orangepipc/releases/download/release-2021/UserManual.pdf)
## Поддерживаемые редакции
- 2021
- 2020 (ограниченно)
## Сборка BSP
Скопировать BSP в рабочую директорию
Сменить текущую директорию на директорию с BSP
`cd kpda-bsp-allwinner-h3-orangepipc`
Для сборки образа из файла построения orangepi.build
`make -j$(nproc)`
## Передача образа на плату
- скопировать полученный образ в папку tftp-сервера;
`tftp -R 6969:6969 172.16.x.x -c put ifs-h3-orangepi.bin ifs-h3-orangepi.bin`
- подключить плату по usb-uart;
- проверить наличие устройства /dev/ttyUSB0;
- настроить minicom со следующими параметрами: скорость 115200, 8 бит, без контроля
четности, 1 стоп-бит, порт /dev/ttyUSB0;
- запустить minicom и включить плату;
- после запуска U-Boot ввести следующую последовательность команд:
Установка ip-адреса для модуля:
`=> setenv ipaddr 172.16.x.x`
Установка ip-адреса для tftp-сервера:
`=> setenv serverip 172.16.x.x`
`=> setenv gatewayip 172.16.x.x`
Загрузка
```
=> tftpboot 0x41000000 ifs-h3-orangepi.bin
=> go 0x41000000
```
Пример скрипта `tftp.sh` для автоматизации:
```
#!/bin/bash
set -ex
TFTP_SERIAL=${TTY_SERIAL:-/dev/ttyUSB0}
TFTP_CLIENT=172.16.x.x
TFTP_SERVER=172.16.x.x
image="ifs-h3-orangepi.bin"
tftp -R 6969:6969 $TFTP_SERVER -c put $image $image
echo "setenv ipaddr $TFTP_CLIENT" > $TFTP_SERIAL
echo "setenv serverip $TFTP_SERVER" > $TFTP_SERIAL
echo "setenv gatewayip $TFTP_SERVER" > $TFTP_SERIAL
echo "tftpboot 0x41000000 $image; go 0x41000000" > $TFTP_SERIAL
```
Запуск:
`./tftp.sh`
## Поддерживаемые компоненты
| Компонент | Поддержка | Протестировано | Комментарий |
| :------------: | :-------: | :------------: | :----------------------------------------------------: |
| RAM | 1GB | + | |
| SMP | 4 CPU cores | + | |
| UART | + | + | |
| NET | + | + | |

42
docs/00-UserGuide.dox Normal file
View File

@ -0,0 +1,42 @@
@page "00-UserGuide" BSP для OrangePi-PC Allwinner-H3
@par Аннотация
@brief Данный документ представляет собой руководство пользователя для пакета поддержки платы OrangePi-PC на основе интегральной микросхемы Allwinner-H3 под ЗОСРВ «Нейтрино».
Процессорная архитектура: ARMv7 Little Endian
@hide @arch{armv7} @endhide
Поддерживаемые устройства:
- Одноплатный компьютер @link{http://www.orangepi.org/html/hardWare/computerAndMicrocontrollers/details/Orange-Pi-PC.html}OrangePi-PC@endlink
Документ включает следующие разделы:
@ul
@item Основные термины и сокращения
@item Общие сведения
@item Состав и структура
@item Установка и настройка
@item Загрузка образа ОС
@item Описание компонентов
@item Проверка функционирования
@item Известные особенности
@item Журнал изменений
@endul
В разделе «Основные термины и сокращения» приведена расшифровка сокращений, используемых в данном документе.
В разделе «Общие сведения» приведены назначение и функции ППМ, а также описание используемых технических средств.
В разделе «Состав и структура» приведены сведения о структуре ППМ, его составных частях и назначении составных частей.
В разделе «Установка и настройка» приведены указания по установке и настройке компонентов сред разработки и сред исполнения, необходимых для функционирования ППМ и сборки загружаемого образа ЗОСРВ «Нейтрино».
В разделе «Загрузка образа ОС» приведены сведения о вариантах запуска загружаемого образа ЗОСРВ «Нейтрино» на целевой системе.
В разделе «Описание компонентов» приведены описания компонентов ППМ.
В разделе «Проверка функционирования» приведены указания по проверке работоспособности пакета поддержки.
В разделе «Известные особенности» приведены известные особбености и ограничения текущей версии пакета поддержки.
@group table_of_articles
@@table[width:40:60:width] Раздел @| Описание

17
docs/01-Glossary.dox Normal file
View File

@ -0,0 +1,17 @@
@page "Glossary" Основные термины и сокращения
@brief Основные термины и сокращения, используемые в данном руководстве
@dl
@term ЗОСРВ
@use защищенная операционная система реального времени
@term ПМ
@use процессорный модуль
@term ППМ
@term BSP
@use пакет поддержки микропроцессора
@enddl
@prev{./00-UserGuide.html|table_of_articles||1}

24
docs/02-GeneralInfo.dox Normal file
View File

@ -0,0 +1,24 @@
@page "GeneralInfo" Общие сведения
@brief Общие сведения
@br
Пакет поддержки платы OrangePi-PC (ППМ) предназначен для обеспечения запуска и функционирования ЗОСРВ «Нейтрино» на процессорном модуле (ПМ) на на основе интегральной микросхемы Allwinner-H3.
@br
Для работы с ППМ необходим инструментальный ПК с установленным комплектом разработчика для ЗОСРВ «Нейтрино» в варианте _Linux Host_ и целевая плата OrangePi-PC на основе интегральной микросхемы Allwinner-H3.
@br
ППМ совместим со следующими редакциями ЗОСРВ «Нейтрино»: @b 2021, @b 2020 (ограниченно).
@br
ППМ обеспечивает поддержку и функционирование следующих блоков и интерфейсов интегральной микросхемы Allwinner-H3:
@ul
@item процессорнные ядра Cortex-A7 в режиме SMP
@item контроллер прерываний GICv2
@item контроллер оперативной памяти DDR
@item UART
@item Ethernet
@endul
@prev{./00-UserGuide.html|table_of_articles||2}

28
docs/03-Contents.dox Normal file
View File

@ -0,0 +1,28 @@
@page "Contents" Состав и структура
@brief Состав и структура
@br
ППМ представляет собой архив, имеющий формат .tar.gz и имя вида «kpda-bsp-allwinner-h3-orangepipc-(версия-ОС)-(формат)-(дата)-(хэш-git).tar.gz».
Назначение полей:
@ul
@item (версия-ОС) - версия ЗОСРВ для которой предназначен BSP
@item (формат) - формат ППМ: @a src для версии с исходными кодами, @a bin для версии с бинарными компонентами
@item (дата) - дата сборки и запаковки BSP в формате ГГГГММДД
@item (хэш-git) - номер или хэш коммита системы контроля версией git
@endul
@br
Архив ППМ содержит следующие компоненты:
@output{asciiart}
kpda-bsp-allwinner-h3-orangepipc/ # Каталог верхнего уровня
|--> images/ # Каталог с загрузочным образом (IFS) и файлами построения
| |--> ifs-h3-orangepi.bin # Загружаемый образ ЗОСРВ «Нейтрино»
| `--> *.build # Файлы построения загрузочных образов
|--> install/ # Бинарные компоненты, собираемые из исходных кодов
| `--> usr/include/ # Заголовочные файлы
`--> src/ # Исходные коды компонентов ППМ
@endoutput
@prev{./00-UserGuide.html|table_of_articles||3}

23
docs/04-Install.dox Normal file
View File

@ -0,0 +1,23 @@
@page "Install" Установка и настройка
@brief Установка и настройка
@br
Распаковывать архив с ППМ следует на инструментальной машине @a x86_64 c ОС @a Linux с установленным комплектом разработчика ЗОСРВ «Нейтрино».
Для распаковки ППМ следует скопировать архив в рабочий каталог и выполнить команду:
@output{shell}
$ tar xzf kpda-bsp-allwinner-h3-orangepipc-*.tar.gz
@endoutput
Для сборки ППМ выполните следующие команды:
@output{shell}
$ cd kpda-bsp-allwinner-h3-orangepipc
$ make
@endoutput
В результате будет произведена сборка ППМ и подготовлен загрузочный образ ЗОСРВ «Нейтрино» @c ifs-h3-orangepi.bin.
@prev{./00-UserGuide.html|table_of_articles||4}

124
docs/05-Boot.dox Normal file
View File

@ -0,0 +1,124 @@
@page "Boot" Загрузка образа ОС
@brief Загрузка образа ОС
@@item Загрузка образа по сети
@@item Загрузка образа с SD карты памяти
@@item Результат загрузки образа
@@item Сохранение варианта загрузки по-умолчанию
@group boot_net
Для загрузки образа ЗОСРВ «Нейтрино» на ПМ по сети используется протокол TFTP. На инструментальной системе необходимо настроить TFTP сервер и скопировать полученный загрузочный образ @c ifs-h3-orangepi.bin в каталог, использующийся TFTP сервером.
@br
Затем следует подключить отладочный USB-UART ПМ к USB порту инструментального ПК, проверить наличие устройства `/dev/ttyUSB*` и запустить терминальную программу, например, minicom со следующими параметрами: скорость 115200, 8 бит, без контроля четности, 1 стоп-бит, порт `/dev/ttyUSB0`.
@br
После включения питания ПМ в терминальной программе должен присутствовать отладочный вывод загрузчика U-Boot. Например:
@output{shell}
U-Boot SPL 2020.04-orangepi (Oct 26 2020 - 16:27:23 +0800)
DRAM: 1024 MiB
Trying to boot from MMC1
U-Boot 2020.04-orangepi (Oct 26 2020 - 16:27:23 +0800) Allwinner Technology
CPU: Allwinner H3 (SUN8I 1680)
Model: Xunlong Orange Pi PC
DRAM: 1 GiB
MMC: mmc@1c0f000: 0
Loading Environment from FAT... Unable to use mmc 0:1... In: serial@1c28000
Out: serial@1c28000
Err: serial@1c28000
Net: phy interface0
eth0: ethernet@1c30000
starting USB...
Bus usb@1c1a000: USB EHCI 1.00
Bus usb@1c1a400: USB OHCI 1.0
Bus usb@1c1b000: USB EHCI 1.00
Bus usb@1c1b400: USB OHCI 1.0
Bus usb@1c1c000: USB EHCI 1.00
Bus usb@1c1c400: USB OHCI 1.0
Bus usb@1c1d000: USB EHCI 1.00
Bus usb@1c1d400: USB OHCI 1.0
scanning bus usb@1c1a000 for devices... 1 USB Device(s) found
scanning bus usb@1c1a400 for devices... 1 USB Device(s) found
scanning bus usb@1c1b000 for devices... 1 USB Device(s) found
scanning bus usb@1c1b400 for devices... 1 USB Device(s) found
scanning bus usb@1c1c000 for devices... 1 USB Device(s) found
scanning bus usb@1c1c400 for devices... 1 USB Device(s) found
scanning bus usb@1c1d000 for devices... 1 USB Device(s) found
scanning bus usb@1c1d400 for devices... 1 USB Device(s) found
scanning usb for storage devices... 0 Storage Device(s) found
Autoboot in 1 seconds, press <Space> to stop
=>
@endoutput
@br
Для загрузки образа ЗОСРВ «Нейтрино» cледует остановить загрузку и в консоли загрузчика U-Boot выполнить следующие команды:
@ul
@item Указать IP-адрес TFTP сервера:
@output{shell}
=> setenv serverip 172.16.0.16
=> setenv gatewayip 172.16.0.16
@endoutput
@item Установить IP-адрес модулю, для организации обмена по протоколу TFTP:
@output{shell}
=> setenv ipaddr 172.16.10.44
@endoutput
@item Загрузить образ по протоколу TFTP и запустить его:
@output{shell}
=> tftpboot 0x41000000 ifs-h3-orangepi.bin
=> go 0x41000000
@endoutput
@endul
@group boot_sd
Для загрузки образа ЗОСРВ «Нейтрино» с карты памяти SD/microSD, скопируйте заранее подготовленный загрузочный образ @c ifs-h3-orangepi.bin на FAT раздел карты памяти и после включения питания ПМ в консоли загрузчика U-Boot выполните следующие команды:
@output{shell}
=> fatload mmc 0 0x41000000 ifs-h3-orangepi.bin
=> go 0x41000000
@endoutput
@group boot_kpda
В результате выполнения приведенных выше команд должен запуститься образ ЗОСРВ, выведены сообщения о ходе загрузки и запущен командный интерпретатор. Пример вывода:
@output{shell}
System page at phys:40022000 user:fc410000 kern:fc410000
Starting next program at vfe0820ac
cpu_startnext: cpu0 -> fe0820ac
cpu_startnext: invoking vstart:4100a720 sysp:fc410000 eip:fe0820ac cpu:00000000
VFPv3: fpsid=41023075
coproc_attach(10): attach fe099c78 (fe09b750)
coproc_attach(11): attach fe099c78 (fe09b750)
Welcome to KPDA Neutrino on the OrangePi PC Allwinner H3 (ARMv7 Cortex-A7 QuadCore) - Board
Starting common servers...
Starting UART serial driver...
Starting Network driver...
#
@endoutput
@group boot_auto
Для сохранения параметров загрузки и выполнения требуемого вариант загрузки по-умолчанию автоматически при включении питании модуля, в консоли U-Boot установите переменную окружения @b bootcmd и сохраните значение переменных c помощью команды @b saveenv, например:
@output{shell}
=> setenv kpdaboot_net “tftpboot 0x41000000 ifs-h3-orangepi.bin; go 0x41000000”
=> setenv bootcmd run kpdaboot_net
=> saveenv
@endoutput
@prev{./00-UserGuide.html|table_of_articles||5}

29
docs/10-Components.dox Normal file
View File

@ -0,0 +1,29 @@
@page "10-Components" Описание компонентов
@brief Описание компонентов, используемых в ППМ
@@item Список компонентов, входящих в состав ППМ
@@item Список стандартных компонентов, используемых в ППМ
@group table_of_drivers
Описание компонентов, входящих в состав ППМ.
@@table[width:40:60:width] Раздел @| Описание
@group table_of_std_drivers
Описание стандартных компонентов, не входящих в состав ППМ.
@table[width:40:60:width]
@tr Компонент @| Описание
@tr @center @l{devc-ser8250} @endcenter @| Менеджер последовательных 8250-совместимых каналов связи
@endtable
@hint
Опции запуска по умолчанию для указанных компонентов можно посмотреть на странице @link{./Verification.html#base_comp}"Проверка функционирования"@endlink.
@endhint
@prev{./00-UserGuide.html|table_of_articles||10}

268
docs/11-Verification.dox Normal file
View File

@ -0,0 +1,268 @@
@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<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 пакета были успешно получены (процент потерь равен нулю).
@prev{./00-UserGuide.html|table_of_articles||11}

8
docs/20-KnownIssues.dox Normal file
View File

@ -0,0 +1,8 @@
@page "KnownIssues" Известные особенности
@brief Известные особенности и ограничения текущей версии пакета поддержки
@br
Известные особенности отсутствуют
@prev{./00-UserGuide.html|table_of_articles||20}

5
docs/21-ReleaseNotes.dox Normal file
View File

@ -0,0 +1,5 @@
@page "ReleaseNotes" Журнал изменений BSP для OrangePi-PC Allwinner-H3
@brief Журнал и история изменений компонентов пакета поддержки
@prev{./00-UserGuide.html|table_of_articles||21}

11
docs/caption.inc Normal file
View File

@ -0,0 +1,11 @@
#!/bin/sh
################################################################
## Переменные окружения с названием документа для gendoc
################################################################
export GENDOC_PROJECT_NAME="Руководство пользователя"
export GENDOC_PROJECT_BRIEF="Руководство пользователя пакета поддержки платы OrangePi-PC на основе интегральной микросхемы Allwinner-H3 под ЗОСРВ «Нейтрино»"
export GENDOC_PROJECT_VERSION=""
export GENDOC_IGNORE_MISSING_AUTOLINK_ERRORS="yes"

18
exclude.inc Normal file
View File

@ -0,0 +1,18 @@
# Include file for bsp-release.sh script
# Multithread build
JLEVEL=$(nproc)
PACKAGE_SRCZIP_IGNORE=\
"-x*.git/* "\
"-x*.git* "\
"-x*prebuilt/.* "\
"-x*src/hardware/devu/* "\
""
PACKAGE_SRCTAR_IGNORE=\
"--exclude=src/hardware/devu"\
""
PACKAGE_BINTAR_IGNORE=\
""

19
images/Makefile Normal file
View File

@ -0,0 +1,19 @@
ROOT_DIR := $(notdir $(CURDIR))
ifndef QCONFIG
QCONFIG=qconfig.mk
endif
include $(QCONFIG)
HOST_MKIFS := mkifs
SUFFIXES := .build .ifs .raw
.PHONY: all clean
all: ifs-h3-orangepi.bin
clean:
$(RM_HOST) ifs-h3-orangepi.bin
ifs-h3-orangepi.bin: orangepi.build
$(HOST_MKIFS) -r../install -v $(MKIFSFLAGS) $^ $@

216
images/orangepi.build Normal file
View File

@ -0,0 +1,216 @@
###########################################################################
##
## KPDA Neutrino trunk on the OrangePi PC Allwinner H3 (ARMv7 Cortex-A7 QuadCore) Board
##
###########################################################################
##
## SUPPORTED DEVICES:
##
## UART_SERIAL: devc-ser8250
## NETWORK: devnp-sun8i
##
###########################################################################
##
## NOTES:
##
###########################################################################
###########################################################################
## START OF BUILD SCRIPT
###########################################################################
[image=0x41000000]
[virtual=armle-v7,raw] .bootstrap = {
startup-orangepi -vvv
PATH=:/proc/boot:/bin:/usr/bin:/sbin:/usr/sbin LD_LIBRARY_PATH=:/proc/boot:/lib:/usr/lib:/lib/dll procnto-smp -vvv -ae
}
[+script] .script = {
# Initialise the console
procmgr_symlink ../../proc/boot/libc.so.3 /usr/lib/ldqnx.so.2
display_msg Welcome to KPDA Neutrino on the OrangePi PC Allwinner H3 (ARMv7 Cortex-A7 QuadCore) - Board
display_msg Starting common servers...
slogger -s 16384k
pipe
#######################################################################
## UART driver
## UART0 (0x01C28000) -> stdout
#######################################################################
display_msg Starting UART serial driver...
devc-ser8250 -e -F -b115200 -c24000000/16 0x01C28000^2,32
waitfor /dev/ser1
reopen /dev/ser1
#######################################################################
## These env variables are inherited by all the programs which follow
#######################################################################
SYSNAME=nto
TERM=qansi
HOME=/
PATH=:/proc/boot:/bin:/usr/bin:/sbin:/usr/sbin:/opt/bin:/usr/photon/bin
LD_LIBRARY_PATH=:/proc/boot:/lib:/usr/lib:/lib/dll:/opt/lib
random -t
#######################################################################
## Network driver
#######################################################################
display_msg Starting Network driver...
io-pkt-v4-hc-ksz -dsun8i
ifconfig sun0 192.168.1.2/24 up
[+session] sh &
}
# Redirect console messages
[type=link] /bin/sh=/proc/boot/ksh
[type=link] /dev/console=/dev/ser1
[type=link] /tmp=/dev/shmem
[type=link] /var/log=/tmp
[type=link] /usr/tmp=/tmp
[type=link] /bin/login=/proc/boot/login
###########################################################################
## Системные библиотеки
###########################################################################
libc.so
libm.so
libz.so
libc.so.3
[type=link] /lib/libc.so=/proc/boot/libc.so.3
[type=link] /lib/libc.so.2=/proc/boot/libc.so.3
[type=link] /lib/libc.so.3=/proc/boot/libc.so.3
[type=link] /usr/lib/ldqnx.so.2=/proc/boot/libc.so.3
###########################################################################
## Библиотеки работы с диском и файловые системы
###########################################################################
fs-qnx4.so
fs-qnx6.so
libcam.so
io-blk.so
cam-disk.so
fs-dos.so
cam-cdrom.so
fs-cd.so
fs-udf.so
###########################################################################
## Драйверы USB и устройств ввода
###########################################################################
libhiddi.so
libusbdi.so
devu-ehci.so
devu-ohci.so
devh-usb.so
###########################################################################
## Сетевые драйверы
###########################################################################
devnp-shim.so
libsocket.so
lsm-qnet.so
devnp-sun8i.so
[data=c]
#######################################################################
## Драйверы последовательных портов
#######################################################################
devc-ser8250
/bin/stty=stty
#######################################################################
## Драйверы ввода
#######################################################################
devu-kbd
devu-mouse
###########################################################################
## Системные сервисы и утилиты
###########################################################################
ksh
sh
pipe
mqueue
cp
mkdir
ls
pidin
rm
mv
on
uname
slay
sync
mount
umount
shutdown
less
setconf
getconf
grep
rtc
date
fdisk
cat
chown
chmod
use
which
dcheck
usb
pci
devc-pty
waitfor
sloginfo
sleep
date
###########################################################################
## Менеджеры ресурсов: PCI, сеть, графика, аудио, драйвер диска и т.д.
###########################################################################
io-pkt-v4-hc-ksz
io-usb
io-hid
usb
devb-umass
slogger
###########################################################################
## Сетевые утилиты
###########################################################################
fs-nfs3
hostname
ifconfig
inetd
ping
telnetd
ftpd
nicinfo
dhcp.client
if_up
netstat
route
random
###########################################################################
## END OF BUILD SCRIPT
###########################################################################

15
images/tftp.sh Executable file
View File

@ -0,0 +1,15 @@
#!/bin/bash
set -ex
TFTP_SERIAL=${TTY_SERIAL:-/dev/ttyUSB0}
TFTP_CLIENT=172.16.7.99
TFTP_SERVER=172.16.7.7
image="ifs-h3-orangepi.bin"
tftp -R 6969:6969 $TFTP_SERVER -c put $image $image
echo "setenv ipaddr $TFTP_CLIENT" > $TFTP_SERIAL
echo "setenv serverip $TFTP_SERVER" > $TFTP_SERIAL
echo "setenv gatewayip $TFTP_SERVER" > $TFTP_SERIAL
echo "tftpboot 0x41000000 $image; go 0x41000000" > $TFTP_SERIAL

4
src/Makefile Normal file
View File

@ -0,0 +1,4 @@
LIST=ALL
EARLY_DIRS=lib
LATE_DIRS=apps
include recurse.mk

3
src/hardware/Makefile Normal file
View File

@ -0,0 +1,3 @@
LIST=hardware
EARLY_DIRS=dma devu
include recurse.mk

View File

@ -0,0 +1,2 @@
LIST=DEVNP
include recurse.mk

View File

@ -0,0 +1,2 @@
LIST=CPU
include recurse.mk

View File

@ -0,0 +1,8 @@
LIST=VARIANT
ifndef QRECURSE
QRECURSE=recurse.mk
ifdef QCONFIG
QRDIR=$(dir $(QCONFIG))
endif
endif
include $(QRDIR)$(QRECURSE)

View File

@ -0,0 +1 @@
include ../../common.mk

View File

@ -0,0 +1,25 @@
#
# (c) 2014-2019, SWD Embedded Systems Limited, http://www.kpda.ru
#
ifndef QCONFIG
QCONFIG=qconfig.mk
endif
include $(QCONFIG)
ISKERNEL := 1
NETDRIVERS_MK = $(firstword $(wildcard $(MKFILES_ROOT)/netdrivers.mk ../../../../../netdrivers.mk ../../netdrivers.mk))
include $(NETDRIVERS_MK)
LIBS = drvrS cacheS
LIBS += $(foreach libpath,$(LIBVPATH), $(if $(wildcard $(libpath)/libnetdrvrS.a), netdrvrS) )
NAME = devnp-sun8i
CCFLAGS += -Wall -Wextra -pedantic -Werror -std=gnu99
define PINFO
PINFO DESCRIPTION=sample io-pkt ethernet driver.
endef
include $(MKFILES_ROOT)/qtargets.mk

View File

@ -0,0 +1,41 @@
@page "devnp-sun8iso" devnp-sun8i.so
@brief Драйвер Ethernet контроллеров семейства процессоров Allwinner sun8i (на базе Cortex-A7)
@remark io-pkt-* -d sun8i [опция[,опция ...]] ...
@caution
Для разделения опций используется запятая (но не пробелы).
@endcaution
@par Платформы:
ЗОСРВ «Нейтрино»
@arch{armv7}
@par Описание:
Драйвер @a devnp-sun8i.so управляет Ethernet контроллерами семейства процессоров Allwinner sun8i (на базе Cortex-A7). Это драйвер @l{io-pkt-*}; имена интерфейсов назначаются в виде @a sunX, где @a X целое число.
@par Поддерживаемые устройства:
@ul
@item Ethernet контроллер процессора Allwinner H3
@endul
@par Примеры:
Запуск @l{io-pkt-*} с использованием драйвера @a devnp-sun8i.so и полного стека TCP/IP:
@output{shell}io-pkt -d sun8i
ifconfig sun0 192.168.0.10 @endoutput
@par Классификация:
Базовые подсистемы ЗОСРВ «Нейтрино», Драйверы
@par Тематические ссылки:
@l{Драйверы|devn-*}, @l{Драйверы|devnp-*}, @l{ifconfig}, @l{io-pkt-*}, @l{nicinfo}
@prev{./10-Components.html|table_of_drivers||50}

View File

@ -0,0 +1,36 @@
# We link the stack with -E so a lot of the undefined
# references get resolved from the stack itself. If
# you want them listed at link time, turn off
# --allow-shlib-undefined and replace with --warn-once
# if desired.
#LDFLAGS+=-Wl,--warn-once
LDFLAGS+=-Wl,--allow-shlib-undefined
NETDRVR_ROOT:=$(patsubst %/,%, $(dir $(abspath $(lastword $(MAKEFILE_LIST)))))
DEVNP_ROOT:=$(NETDRVR_ROOT)/hardware/devnp
BSDDRVR_ROOT:=$(DEVNP_ROOT)/bsd
LIBNBDRVR_ROOT:=$(NETDRVR_ROOT)/lib/libnbdrvr
HDR_PATH=$(INSTALL_ROOT_HDR)/io-pkt
PUBLIC_HDR_PATH=$(KPDA_TARGET)/usr/include/io-pkt
# Check for staging area first
EXTRA_INCVPATH+= $(HDR_PATH) $(HDR_PATH)/sys-nto
# Use headers installed in system if staging area not available
EXTRA_INCVPATH+= $(PRODUCT_ROOT) $(PUBLIC_HDR_PATH) $(PUBLIC_HDR_PATH)/sys-nto
ifneq ($(NEED_QNXH),)
CCFLAGS += -Wp,-include -Wp,$(if $(wildcard $(HDR_PATH)),$(HDR_PATH)/qnx.h,$(PUBLIC_HDR_PATH)/qnx.h)
endif
ifneq ($(NEED_LIBNBDRVR),)
EXTRA_INCVPATH+=$(LIBNBDRVR_ROOT)
endif
ifneq ($(ISKERNEL),)
CCFLAGS += -D_KERNEL
endif
CCFLAGS_e2k += -fkernel
CCFLAGS += $(CCFLAGS_$(CPU))
# gcc sometime after 2.95.3 added a builtin log()
CCFLAGS += -fno-builtin-log

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,276 @@
/*
* (c) 2023, SWD Embedded Systems Limited, http://www.kpda.ru
*/
#ifndef __SUN8I_H__
#define __SUN8I_H__
#define BIT(bit) (UINT32_C(1) << bit)
#define GENMASK32(a, b) ((UINT32_MAX >> (32 - (b) - 1)) & (UINT32_MAX << (a)))
// Syscon address space
#define AW_H3_SYS_CTRL_BASE 0x01c00000
#define AW_H3_SYS_CTRL_SIZE 0x1000
// EMAC Clock Register, Syscon
#define EMAC_CLK_REG 0x0030
#define H3_EPHY_DEFAULT_VALUE 0x58000
#define H3_EPHY_DEFAULT_MASK GENMASK32(16, 31)
#define H3_EPHY_ADDR_SHIFT 20
#define REG_PHY_ADDR_MASK GENMASK32(0, 4)
#define SC_EPIT BIT(2) // 1: RGMII, 0: MII
#define SC_RMII_EN BIT(13)
#define H3_EPHY_SELECT BIT(15) // 1: internal PHY, 0: external PHY
#define H3_EPHY_SHUTDOWN BIT(16) // 1: shutdown, 0: power up
#define H3_EPHY_LED_POL BIT(17) // 1: active low, 0: active high
#define H3_EPHY_CLK_SEL BIT(18) // 1: 24MHz, 0: 25MHz
#define SC_ETCS_MASK 0x3
// CCU address space
#define AW_H3_CCU_BASE 0x01c20000
#define AW_H3_CCU_SIZE 0x400
// Clock source register, CCU
#define BUS_CLK_GATING_REG0 0x0060
#define BUS_CLK_GATING_REG0_EMAC_GATING BIT(17)
// Reset source register, CCU
#define BUS_SOFT_RST_REG0 0x02C0
#define BUS_SOFT_RST_REG0_EMAC_RST BIT(17)
// EPHY clock, CCU
#define BUS_CLK_GATING_REG4 0x0070
#define BUS_CLK_GATING_REG4_EPHY_GATING BIT(0)
// EPHY reset, CCU
#define BUS_SOFT_RST_REG2 0x02c8
#define BUS_SOFT_RST_REG2_EPHY_RST BIT(2)
// EMAC address space
#define SUN8I_EMAC_BASE 0x01c30000
#define SUN8I_EMAC_SIZE 0x10000
// EMAC Basic Control 0 Register (Link control)
#define EMAC_CTL0 0x0000
#define EMAC_CTL0_FULL_DUPLEX BIT(0)
#define EMAC_CTL0_LOOPBACK BIT(1)
#define EMAC_CTL0_SPEED_MASK (BIT(3) | BIT(2))
#define EMAC_CTL0_10 (BIT(3))
#define EMAC_CTL0_100 (BIT(3) | BIT(2))
// EMAC Basic Control 1 Register
#define EMAC_CTL1 0x0004
#define EMAC_CTL1_SOFT_RST BIT(0) // Soft reset
#define EMAC_CTL1_BURST_SIZE(val) ((val & 0x3f) << 24) // RX/TX DMA transfer burst len
// EMAC Interrupt Status/Enable Register
#define EMAC_INT_STA 0x0008
#define EMAC_INT_EN 0x000c
#define EMAC_INT_RX_INT BIT(8) // RX interrupt
#define EMAC_INT_TX_INT BIT(0) // TX interrupt
#define EMAC_INT_TX_UNDERFLOW_INT_EN BIT(4) // TX FIFO underflow error
#define EMAC_INT_RX_UNDERFLOW_INT_EN BIT(12) // RX FIFO underflow error
#define EMAC_INT_EN_MASK (EMAC_INT_RX_INT | EMAC_INT_TX_INT | EMAC_INT_RX_UNDERFLOW_INT_EN | EMAC_INT_TX_UNDERFLOW_INT_EN)
// EMAC Transmit Control 0 Register
#define EMAC_TX_CTL0 0x0010
#define EMAC_TX_CTL0_TX_EN BIT(31) // Enable transmitter
// EMAC Transmit Control 1 Register
#define EMAC_TX_CTL1 0x0014
#define EMAC_TX_CTL1_TX_MD BIT(1) // Transmission starts after a full frame located in TX DMA FIFO
#define EMAC_TX_CTL1_TX_DMA_EN BIT(30) // Start and run TX DMA
#define EMAC_TX_CTL1_TX_DMA_START BIT(31) // Start and run TX DMA
// EMAC Transmit DMA Descriptor List Address Register
#define EMAC_TX_DMA_DESC 0x0020
// EMAC Receive Control 0 Register
#define EMAC_RX_CTL0 0x0024
#define EMAC_RX_CTL0_RX_EN BIT(31) // Enable receiver
// EMAC Receive Control 1 Register
#define EMAC_RX_CTL1 0x0028
#define EMAC_RX_CTL1_RX_MD BIT(1) // RX DMA reads data from RX DMA FIFO to host memory after a complete frame has been written to RX DMA FIFO
#define EMAC_RX_CTL1_RX_DMA_EN BIT(30) // Start and run RX DMA
// EMAC Receive DMA Descriptor List Address Register
#define EMAC_RX_DMA_DESC 0x0034
// EMAC MAC Address 0 High Register
#define EMAC_ADDR0_HIGH 0x0050
// EMAC MAC Address 0 Low Register
#define EMAC_ADDR0_LOW 0x0054
// EMAC MII Command Register
#define EMAC_MII_CMD 0x0048
#define MDIO_CMD_MII_BUSY BIT(0)
#define MDIO_CMD_MII_WRITE BIT(1)
#define MDIO_CMD_MII_PHY_REG_ADDR_MASK GENMASK32(4, 8)
#define MDIO_CMD_MII_PHY_REG_ADDR_SHIFT 4
#define MDIO_CMD_MII_PHY_ADDR_MASK GENMASK32(12, 16)
#define MDIO_CMD_MII_PHY_ADDR_SHIFT 12
#define MDIO_CMD_MDC_DIV_RATIO_M_128 (BIT(20) | BIT(21))
// EMAC MII Data Register
#define EMAC_MII_DATA 0x004c
// Descriptors macros
#define CONFIG_ETH_BUFSIZE 2048 // Note must be dma aligned
#define CONFIG_ETH_RXSIZE 2044 // Note must fit in ETH_BUFSIZE
#define SUN8I_DESC(buf, idx) (&((sun8i_desc_t *)(buf)->area)[(idx)])
// TX descriptors
#define CONFIG_TX_DESCR_NUM 32
#define SUN8I_TX_DESC(sun8i, idx) SUN8I_DESC(&(sun8i)->txb, (idx))
#define TX_DESC_CTL BIT(31)
#define TX_INT_CTL BIT(31)
#define LAST_DESC BIT(30)
#define FIR_DESC BIT(29)
#define TX_HEADER_ERR BIT(16)
#define TX_LENGHT_ERR BIT(14)
#define TX_PAYLOAD_ERR BIT(12)
#define TX_CRS_ERR BIT(10)
#define TX_COL_ERR_0 BIT(9)
#define TX_COL_ERR_1 BIT(8)
#define TX_COL_CNT_MASK GENMASK32(3, 6)
#define TX_COL_CNT_SHIFT 3
#define TX_COL_CNT(status) (((status) & TX_COL_CNT_MASK) >> TX_COL_CNT_SHIFT)
#define TX_DEFER_ERR BIT(2)
#define TX_UNDERFLOW_ERR BIT(1)
#define TX_DEFER BIT(0)
#define ERROR_STATUS_MASK (TX_HEADER_ERR | TX_LENGHT_ERR | TX_PAYLOAD_ERR | TX_CRS_ERR | TX_COL_ERR_0 | TX_DEFER_ERR | TX_UNDERFLOW_ERR)
// RX descriptors
#define CONFIG_RX_DESCR_NUM 32
#define SUN8I_RX_DESC(sun8i, idx) SUN8I_DESC(&(sun8i)->rxb, (idx))
#define RX_DESC_CTL BIT(31)
#define RX_LAST_DESC BIT(8)
#define RX_DESC_FRM_SIZE_MASK GENMASK32(16, 29)
#define RX_DESC_FRM_SIZE(status) (((status) & RX_DESC_FRM_SIZE_MASK) >> 16)
#define CONFIG_SYS_HZ 1000
#define CONFIG_MDIO_TIMEOUT (3 * CONFIG_SYS_HZ)
#define EMAC_SOFT_RESET_TIMEOUT_USEC (100 * 1000)
#define SPI_INTERRUPT_START 0x20
#define SUN8I_H3_INTERRUPT (SPI_INTERRUPT_START + 0x52)
const uint8_t etherbroadcastaddr[ETHER_ADDR_LEN] =
{ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
enum emac_variant
{
H3_EMAC = 2,
};
enum
{
PHY_INTERFACE_MODE_MII = 1,
PHY_INTERFACE_MODE_GMII,
PHY_INTERFACE_MODE_SGMII,
};
struct sun8i_desc
{
uint32_t status;
uint32_t size;
uint32_t addr;
uint32_t next;
} __attribute__ ((packed));
typedef struct sun8i_desc sun8i_desc_t;
struct desc_buffer
{
void *area;
size_t size;
off_t dma;
int prot_flags;
int map_flags;
int tmem_fd;
struct mbuf **mbufs_set;
int head;
int tail;
int cnt;
int free_cnt;
struct
{
uint64_t header;
uint64_t length;
uint64_t payload;
uint64_t crs;
uint64_t coll0;
uint64_t coll1;
uint64_t coll_cnt;
uint64_t defer;
uint64_t underflow;
} err;
};
typedef struct desc_buffer desc_buffer_t;
struct sun8i_dev
{
struct device dev;
struct ethercom ec;
struct ieee80211com ic;
struct mii_data bsd_mii;
int iid;
int intr_cnt;
int intr_spurious;
void *sd_hook;
uintptr_t syscon_base;
uintptr_t clk_base;
uintptr_t emac_base;
enum emac_variant variant;
int use_internal_phy;
uint32_t mii_mode;
uint32_t adv;
nic_config_t cfg;
nic_stats_t stats;
struct _iopkt_self *iopkt;
struct _iopkt_inter inter;
int speed;
int duplex;
desc_buffer_t txb;
desc_buffer_t rxb;
struct cache_ctrl cachectl;
uint32_t irq_src;
mdi_t *mdi;
struct callout mii_callout;
int linkup;
int start_running;
};
typedef struct sun8i_dev sun8i_dev_t;
struct sun8i_attach_args
{
uintptr_t syscon_base;
uintptr_t clk_base;
uintptr_t emac_base;
enum emac_variant variant;
int use_internal_phy;
int phy_addr;
uint32_t mii_mode;
nic_config_t cfg;
struct _iopkt_self *iopkt;
char *options;
};
#endif

View File

@ -0,0 +1,4 @@
LATE_DIRS=boards
CPULIST=arm
VARIANTLIST=v7
include recurse.mk

View File

@ -0,0 +1,2 @@
LIST=BOARD
include recurse.mk

View File

@ -0,0 +1,128 @@
#
# (c) 2010-2019, SWD Embedded Systems Limited, http://www.kpda.ru
#
ifndef QCONFIG
QCONFIG=qconfig.mk
endif
include $(QCONFIG)
PSTAG_64 = .64
LIB_VARIANT = $(subst .o,,a.$(COMPOUND_VARIANT))$(PSTAG_$(PADDR_SIZE))
LINKER_TYPE=BOOTSTRAP
INSTALLDIR = boot/sys
LIBS = startup$(subst .,-,$(PSTAG_$(PADDR_SIZE)))
LIBS += $(foreach lib,ucl lz4-dec zstd-dec,$(if $(wildcard $(addsuffix /lib$(lib).a,$(LIBVPATH))), $(lib)) )
LIBS += drvr
# The board level is one up from the CPU level
BOARD_ROOT=$(patsubst %/,%,$(dir $(CPU_ROOT)))
BOARD=$(notdir $(BOARD_ROOT))
NAME = startup-$(BOARD)
EXTRA_SILENT_VARIANTS+=$(subst -, ,$(BOARD) $(SECTION))
USEFILE =
EXTRA_SRCVPATH += $(BOARD_ROOT)/overrides
EXTRA_INCVPATH += $(BOARD_ROOT)/overrides \
$(LIBSTARTUP_ROOT)/$(CPU)/$(LIB_VARIANT) \
$(LIBSTARTUP_ROOT)/$(CPU) \
$(LIBSTARTUP_ROOT) \
$(LIBSTARTUP_ROOT)/public
EXTRA_LIBVPATH += $(LIBSTARTUP_ROOT)/$(CPU)/$(LIB_VARIANT) \
$(USE_ROOT_LIB) \
$(QNX_TARGET)/$(CPUVARDIR)/lib \
$(QNX_TARGET)/$(CPUVARDIR)/usr/lib
#LDBOOTSTRAPPOST_nto_x86_gcc_qcc:=$(subst -lc, -L$(QNX_TARGET)/x86/lib -lc, $(LDBOOTSTRAPPOST_nto_x86_gcc_qcc))
CCFLAG_64 = -D_PADDR_BITS=64
CCFLAGS_gcc_ = -O2 -fomit-frame-pointer
CCFLAGS_gcc_qcc = -O2 -Wc,-fomit-frame-pointer
CCFLAGS_$(BUILDENV) = -DBUILDENV_$(BUILDENV)
CCFLAGS = $(CCFLAGS_$(COMPILER_TYPE)_$(COMPILER_DRIVER)) $(CCFLAG_$(PADDR_SIZE)) $(CCFLAGS_$(BUILDENV))
CCFLAGS += -DBOARDNAME=\"$(BOARD)\"
LDFLAGS_gcc_qcc = -M
LDFLAGS = $(LDFLAGS_$(COMPILER_TYPE)_$(COMPILER_DRIVER))
EXTRA_ICLEAN=$(BOARD_ROOT)/*.pinfo
FILE_INFO = 0 0 644
define POST_INSTALL
-$(foreach build,$(EXAMPLE_BUILDFILES), \
$(CP_HOST) $(build) $(INSTALL_ROOT_nto)/$(CPUVARDIR)/boot/build/$(BOARD)-$(notdir $(build));)
-$(foreach build,$(MAIN_BUILDFILES) $(EXAMPLE_READMES), \
$(CP_HOST) $(build) $(INSTALL_ROOT_nto)/$(CPUVARDIR)/boot/build/$(BOARD).$(notdir $(build));)
endef
include $(MKFILES_ROOT)/qmacros.mk
ADD_USAGE=
-include $(PROJECT_ROOT)/roots.mk
ifndef LIBSTARTUP_ROOT
LIBSTARTUP_ROOT=$(PRODUCT_ROOT)/lib
endif
EXAMPLE_BUILDFILES:=$(wildcard *.build $(BOARD_ROOT)/*.build)
MAIN_BUILDFILES:=$(wildcard build $(BOARD_ROOT)/build)
EXAMPLE_READMES:=$(wildcard $(BOARD_ROOT)/*readme)
EBF_PINFOS:=$(addsuffix .pinfo, $(EXAMPLE_BUILDFILES))
ERM_PINFOS:=$(addsuffix .pinfo, $(EXAMPLE_READMES))
EXTRA_DEPS = $(EBF_PINFOS) $(ERM_PINFOS)
include $(BOARD_ROOT)/pinfo.mk
-include $(BOARD_ROOT)/extra.mk
include $(MKFILES_ROOT)/qtargets.mk