BuildRoot

встраиваемые модели

Модераторы: Olej, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

BuildRoot

Непрочитанное сообщение Olej » 28 июн 2018, 13:11

Сборка системы под Orange Pi с помощью инструмента BuildTools (про BuildTools начало здесь: Linux для embedded применений)...

Код: Выделить всё

[olej@xenix buildroot-master]$ pwd
/home/olej/buildroot-master

Код: Выделить всё

[olej@xenix buildroot-master]$ make list-defconfigs | grep orangepi
  orangepi_lite_defconfig             - Build for orangepi_lite
  orangepi_one_defconfig              - Build for orangepi_one
  orangepi_pc2_defconfig              - Build for orangepi_pc2
  orangepi_pc_defconfig               - Build for orangepi_pc
  orangepi_pc_plus_defconfig          - Build for orangepi_pc_plus
  orangepi_plus_defconfig             - Build for orangepi_plus
  orangepi_prime_defconfig            - Build for orangepi_prime
  orangepi_win_defconfig              - Build for orangepi_win
  orangepi_zero_defconfig             - Build for orangepi_zero
  orangepi_zero_plus2_defconfig       - Build for orangepi_zero_plus2

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Orange Pi

Непрочитанное сообщение Olej » 28 июн 2018, 16:57

Olej писал(а):Сборка системы под Orange Pi с помощью инструмента BuildTools
Начинаю с того, что заказываю дефаултный для Orange Pi One начальный конфиг:

Код: Выделить всё

[olej@xenix buildroot-master]$ pwd
/home/olej/buildroot-master

Код: Выделить всё

[olej@xenix buildroot-master]$ make orangepi_one_defconfig
mkdir -p /home/olej/buildroot-master/output/build/buildroot-config/lxdialog
PKG_CONFIG_PATH="" make CC="/usr/bin/gcc" HOSTCC="/usr/bin/gcc" \
    obj=/home/olej/buildroot-master/output/build/buildroot-config -C support/kconfig -f Makefile.br conf
/usr/bin/gcc -D_GNU_SOURCE -D_DEFAULT_SOURCE  -DCURSES_LOC="<ncurses.h>" -DNCURSES_WIDECHAR=1 -DLOCALE  -I/home/olej/buildroot-master/output/build/buildroot-config -DCONFIG_=\"\"   /home/olej/buildroot-master/output/build/buildroot-config/conf.o /home/olej/buildroot-master/output/build/buildroot-config/zconf.tab.o  -o /home/olej/buildroot-master/output/build/buildroot-config/conf
#
# configuration written to /home/olej/buildroot-master/.config
#

Теперь в этом рабочем каталоге появился .config для требуемой платы, которую начинаем под себя править.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Orange Pi

Непрочитанное сообщение Olej » 28 июн 2018, 17:06

Olej писал(а):Теперь в этом рабочем каталоге появился .config для требуемой платы, которую начинаем под себя править.
Конфигурируем будущую систему!

Код: Выделить всё

[olej@xenix buildroot-master]$ make nconfig
mkdir -p /home/olej/buildroot-master/output/build/buildroot-config/lxdialog
PKG_CONFIG_PATH="" make CC="/usr/bin/gcc" HOSTCC="/usr/bin/gcc" \
    obj=/home/olej/buildroot-master/output/build/buildroot-config -C support/kconfig -f Makefile.br nconf
/usr/bin/gcc -DCURSES_LOC="<curses.h>" -DLOCALE  -I/home/olej/buildroot-master/output/build/buildroot-config -DCONFIG_=\"\"  -MM *.c > /home/olej/buildroot-master/output/build/buildroot-config/.depend 2>/dev/null || :
/usr/bin/gcc -DCURSES_LOC="<curses.h>" -DLOCALE  -I/home/olej/buildroot-master/output/build/buildroot-config -DCONFIG_=\"\"   -c conf.c -o /home/olej/buildroot-master/output/build/buildroot-config/conf.o
/usr/bin/gcc -DCURSES_LOC="<curses.h>" -DLOCALE  -I/home/olej/buildroot-master/output/build/buildroot-config -DCONFIG_=\"\"   -c nconf.gui.c -o /home/olej/buildroot-master/output/build/buildroot-config/nconf.gui.o
In file included from nconf.gui.c:8:0:
nconf.h:18:10: фатальная ошибка: curses.h: Нет такого файла или каталога
 #include <curses.h>
          ^~~~~~~~~~
компиляция прервана.
make[2]: *** [Makefile.br:34: /home/olej/buildroot-master/output/build/buildroot-config/nconf.gui.o] Ошибка 1
make[1]: *** [Makefile:876: /home/olej/buildroot-master/output/build/buildroot-config/nconf] Ошибка 2
make: *** [Makefile:79: _all] Ошибка 2
Или так ...

Код: Выделить всё

[olej@xenix buildroot-master]$ make menuconfig
mkdir -p /home/olej/buildroot-master/output/build/buildroot-config/lxdialog
PKG_CONFIG_PATH="" make CC="/usr/bin/gcc" HOSTCC="/usr/bin/gcc" \
    obj=/home/olej/buildroot-master/output/build/buildroot-config -C support/kconfig -f Makefile.br mconf
 *** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 *** 
 *** Install ncurses (ncurses-devel) and try again.
 *** 
make[2]: *** [Makefile:199: /home/olej/buildroot-master/output/build/buildroot-config/dochecklxdialog] Ошибка 1
make[1]: *** [Makefile:876: /home/olej/buildroot-master/output/build/buildroot-config/mconf] Ошибка 2
make: *** [Makefile:79: _all] Ошибка 2
В обоих случаях ему не хватает:

Код: Выделить всё

[olej@xenix Загрузки]$ dnf provides '*/curses.h'
Последняя проверка окончания срока действия метаданных: 26 days, 19:21:48 назад, Пт 01 июн 2018 18:04:24.
ncurses-devel-6.0-14.20170722.fc27.i686 : Development files for the ncurses library
Репозиторий        : updates
Совпадения с:
Имя файла   : /usr/include/curses.h
Совпадения с:
Имя файла   : /usr/include/ncurses/curses.h
Совпадения с:
Имя файла   : /usr/include/ncursesw/curses.h
...

Устанавливаем:

Код: Выделить всё

[olej@xenix Загрузки]$ sudo dnf install ncurses-devel
...
Установлено:
  ncurses-devel.x86_64 6.0-14.20170722.fc27                          ncurses-c++-libs.x86_64 6.0-14.20170722.fc27                         

Выполнено!
P.S. Вообще то ... вот здесь в документации BuildRoot - Chapter 2. System requirements - подробно расписаны все пакеты, и обязательные и опциональные, которые могут потребоваться BuildRoot:
2.1. Mandatory packages
...
2.2. Optional packages
...
Но это - на все конфигурации которые можно придумать, это сильно много .... Но можно доустанавливать недостающие пакеты по мере ошибок в ходе сборки!

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Orange Pi

Непрочитанное сообщение Olej » 28 июн 2018, 17:15

Olej писал(а): Конфигурируем будущую систему!
Вот тут начинается самое интересное!!! :-P

Код: Выделить всё

[olej@xenix buildroot-master]$ make nconfig
mkdir -p /home/olej/buildroot-master/output/build/buildroot-config/lxdialog
PKG_CONFIG_PATH="" make CC="/usr/bin/gcc" HOSTCC="/usr/bin/gcc" \
    obj=/home/olej/buildroot-master/output/build/buildroot-config -C support/kconfig -f Makefile.br nconf
/usr/bin/gcc -D_GNU_SOURCE -D_DEFAULT_SOURCE  -DCURSES_LOC="<ncurses.h>" -DNCURSES_WIDECHAR=1 -DLOCALE  -I/home/olej/buildroot-master/output/build/buildroot-config -DCONFIG_=\"\"   -c nconf.gui.c -o /home/olej/buildroot-master/output/build/buildroot-config/nconf.gui.o
/usr/bin/gcc -D_GNU_SOURCE -D_DEFAULT_SOURCE  -DCURSES_LOC="<ncurses.h>" -DNCURSES_WIDECHAR=1 -DLOCALE  -I/home/olej/buildroot-master/output/build/buildroot-config -DCONFIG_=\"\"   -c nconf.c -o /home/olej/buildroot-master/output/build/buildroot-config/nconf.o
nconf.c:8:0: предупреждение: «_GNU_SOURCE» переопределён
 #define _GNU_SOURCE
...
Вложения
br1.png
br2.png

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Orange Pi

Непрочитанное сообщение Olej » 28 июн 2018, 18:01

Olej писал(а): Вот тут начинается самое интересное!!! :-P
Конспектирую очень подробно!
В конфигурациях ядра:
Вложения
br31.png
br42.png
br43.png
br44.png

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Orange Pi

Непрочитанное сообщение Olej » 28 июн 2018, 18:05

Olej писал(а):В конфигурациях ядра:
То, что относится к realtime, Xenomai - это очень специфично, но обязательно и согласовано с установками (патча) для ядра:
Вложения
br50.png
br51.png
br52.png
br53.png

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Orange Pi

Непрочитанное сообщение Olej » 28 июн 2018, 18:10

Olej писал(а):В конфигурациях ядра:
Изображение
В конфигурациях ядра указываем путь на патч ipipe (Adeos), который нужно предварительно скачать.
Только тогда мы можем указать ядро Xenomai как Cobalt, которое реализует 2-х ядерную конфигурацию (ядро Xenomai + ядро Linux) и hard realtime:
Изображение

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Orange Pi

Непрочитанное сообщение Olej » 28 июн 2018, 18:31

Olej писал(а): В конфигурациях ядра указываем путь на патч ipipe (Adeos), который нужно предварительно скачать.
Патчи Xenomai (собственно, патчи проекта Adeos, но готовят их под себя Xenomai) качаем здесь - Index of /downloads/ipipe/v4.x/arm (с учётом архитектуры, естественно: ARM, x86, PPC... - погулять там может по каталогам):

Код: Выделить всё

[DIR] Parent Directory                                    -   
[TXT] ipipe-core-4.14.36-arm-1.patch 12-Jun-2018 19:12  587K  
[TXT] ipipe-core-4.4.71-arm-9.patch  03-Oct-2017 12:35  672K  
[TXT] ipipe-core-4.9.51-arm-4.patch  26-Mar-2018 09:16  700K  
[DIR] older/                         12-Jun-2018 19:13    -   

Как видно, патчи есть только для ограниченного числа версий ядра Linux. Поэтому согласованную версию ядра нужно указать для сборки и для BuildRoot.

P.S. Версия для ядра 4.14 выложена для эксперимента 2 недели назад, для архитектуры x86 её вообще ещё нет (только обещают). При сборке для 4.14 ARM у меня выявлялись какие-то 2 странные ошибки, при сборке именно userspace части пакета Xenomai ... возможно это болезни роста.
Поэтому на сегодня лучше остановиться на ядре 4.9.51.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Orange Pi

Непрочитанное сообщение Olej » 28 июн 2018, 18:54

Olej писал(а):То, что относится к realtime, Xenomai - это очень специфично, но обязательно и согласовано с установками (патча) для ядра:
Закончив конфигурацию, сохраняем её по F6 (можно под любым именем, но работать при сборке будет .config ... хотя загрузить в конфигуратор можно любое ранее сохранённое имя-файл).
После чего можно переходить к сборке (сборка очень большая, понятно, я лог записываю с помощью tee в файл make.hist):

Код: Выделить всё

[olej@xenix buildroot-master]$ time make | tee -a make.hist
which: no flex in (/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/olej/.local/bin:/home/olej/bin)
which: no bison in (/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/home/olej/.local/bin:/home/olej/bin)
/usr/bin/make -j1 O=/home/olej/buildroot-master/output HOSTCC="/usr/bin/gcc" HOSTCXX="/usr/bin/g++" silentoldconfig
>>> host-skeleton  Extracting
>>> host-skeleton  Patching
^Cmake: *** [Makefile:79: _all] Прерывание


real	0m7,203s
user	0m6,416s
sys	0m0,685s
Это 1-й слёт - в этой системе у меня нет flex + bison :

Код: Выделить всё

[olej@xenix buildroot-master]$ sudo dnf install flex
...
[olej@xenix buildroot-master]$ sudo dnf install bison
...
Поехали по-новой ;-) :

Код: Выделить всё

[olej@xenix buildroot-master]$ time make | tee make.hist
...
No RTAI patch for your kernel version
make[1]: *** [package/pkg-generic.mk:195: /home/olej/buildroot-master/output/build/linux-4.14.36/.stamp_patched] Ошибка 1
make: *** [Makefile:79: _all] Ошибка 2

real	57m1,848s
user	100m49,401s
sys	25m15,234s
На этот раз нужно убрать RTAI из конфигураций (нет RTAI для этого ядра) и запускать снова и снова ... и так продвигаемся к концу.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Orange Pi

Непрочитанное сообщение Olej » 28 июн 2018, 18:57

Olej писал(а):

Код: Выделить всё

real	57m1,848s
user	100m49,401s
sys	25m15,234s
Всё это очень долго!
При том, что я это делаю на весьма хорошем процессоре, SSD-диске и в достатке RAM:

Код: Выделить всё

[olej@xenix buildroot-master]$ lscpu
Архитектура:         x86_64
CPU op-mode(s):      32-bit, 64-bit
Порядок байт:        Little Endian
CPU(s):              4
On-line CPU(s) list: 0-3
Thread(s) per core:  1
Ядер на сокет:       4
Сокетов:             1
NUMA node(s):        1
ID прроизводителя:   GenuineIntel
Семейство ЦПУ:       6
Модель:              23
Имя модели:          Intel(R) Xeon(R) CPU           L5420  @ 2.50GHz
Степпинг:            6
CPU MHz:             2499.981
CPU max MHz:         2499,0000
CPU min MHz:         2003,0000
BogoMIPS:            4999.96
Виртуализация:       VT-x
L1d cache:           32K
L1i cache:           32K
L2 cache:            6144K
NUMA node0 CPU(s):   0-3
Флаги:               fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 lahf_lm pti tpr_shadow vnmi flexpriority dtherm

Код: Выделить всё

[olej@xenix buildroot-master]$ inxi -D
Drives:    HDD Total Size: 240.1GB (56.6% used)
           ID-1: /dev/sda model: SAMSUNG_SP0802N size: 80.1GB
           ID-2: /dev/sdb model: INTEL_SSDSA2MH16 size: 160.0GB

Код: Выделить всё

[olej@xenix Orange_Pi]$ free
              total        used        free      shared  buff/cache   available
Mem:        8099448     2607156      181792      817004     5310500     4309192
Swap:             0           0           0
Так что спланируйте на это время ещё чем-то заниматься, заглядывая в терминал время от времени... :lol:

Ответить

Вернуться в «Одноплатные компьютеры»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей