Orange pi PC, AllWinner H3 SoC

ARMBIAN 5.23—-> 5.75 Debian jessie, stretch, Ubuntu xenial, bionic
платформа : «Orangepi PC» Linux 3.4.113-sun8i  —> 4.20.y
Тестировал на дату публикации .

Devuan 2.0 «ASCII» на Orange Pi PC

Devuan — форк дистрибутива Debian, появившийся в 2014 году. Его первая цель заключалась в предоставлении дистрибутива без демона systemd init по умолчанию.

У Devuan есть свой собственный репозиторий пакетов, который отражает развитие Debian вверх по течению с локальными изменениями, сделанными только тогда, когда это необходимо для других систем инициализации, а не systemd.

Ставил на MicroSDCard в  USB-Reader на целевой платформе,
карта определилась как /dev/sda
удалим все разделы карты с помощью fdisk:

fdisk /dev/sda
d - for deleting a partition
Selected partition 1
Partition 1 has been deleted.
w - for write & exit
curl -O https://files.devuan.org/devuan_ascii/embedded/devuan_ascii_2.0.0_armhf_sunxi.img.xz

xzcat devuan_ascii_2.0.0_armhf_sunxi.img.xz | sudo dd of=/dev/sda bs=2M
curl -O https://files.devuan.org/devuan_ascii/embedded/u-boot/orangepi_2_defconfig.bin
dd if=orangepi_2_defconfig.bin of=/dev/sda bs=1024 seek=8 && sync

Всё. Загружаемся с этой картой:
login:root
pass:toor

root@devuan:~# uname -a
Linux devuan 4.17.0 #1 SMP Tue Jun 5 16:49:29 CEST 2018 armv7l GNU/Linux


root@devuan:~df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 1.7G 517M 1.1G 33% /
devtmpfs 356M 0 356M 0% /dev
tmpfs 97M 120K 97M 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 194M 0 194M 0% /run/shm
/dev/mmcblk0p1 120M 7.3M 104M 7% /boot


root@devuan:~# lsmod
Module Size Used by
sha256_generic 20480 0
sha256_arm 24576 4
hmac 16384 8
ipv6 393216 24
root@devuan:~#

Созданная в 1983 г. sysvinit не умела решать ряд важных задач, таких как:

•параллельный запуск процессов;
•обнаружение съемных носителей;
•активизация сервисов на основе сокетов;
•надежно контролировать зависимости между различными процессами и службами;
•раннее логирование событий через /dev/log.

Все эти и многие другие неудобства были наконец-то решены в systemd.
В последнее время наметились подвижки между группами разработчиков СИ Debian и Devuan. Решено объединить усилия по нескольким направлениям.

20 февраля   Devuan   OrangePI PC

Сборка загрузчика UBOOT

u-boot. запросто и быстро компилируется на OPi
тестировал на Armbian_5.75_Orangepipc_Ubuntu_bionic_next_4.19.20

uname -a


Linux orangepipc 4.19.20-sunxi #5.75 SMP Sat Feb 9 19:02:47 CET 2019 armv7l armv7l armv7l GNU/Linux

надо например мне включить в u-boot CONFIG_OLD_SUNXI_KERNEL_COMPAT=y

apt install libncurses-dev python-dev swig
git clone git://git.denx.de/u-boot-sunxi.git
cd u-boot-sunxi

For all supported boards there are ready-to-use default
configurations available; just type make board_name_defconfig

make orangepi_pc_defconfig
make menuconfig
make -j4
dd if=/dev/zero of=/dev/mmcblk0 bs=1024 seek=544 count=128
dd if=u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8
reboot

Здесь, первая команда dd предназначена для очистки переменных окружения U-Boot, а вторая, — для записи начального SPL загрузчика и, непосредственно, U-Boot.
подробнее тут.

Вывод U-Boot информации serial console на плате Orange Pi PC

U-Boot SPL 2019.04-rc1-00629-gd065a6c00a (Feb 19 2019 - 07:15:33 +0000)
DRAM: 1024 MiB
Trying to boot from MMC1


U-Boot 2019.04-rc1-00629-gd065a6c00a (Feb 19 2019 - 07:15:33 +0000) 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
Out:   vidconsole
Err:   vidconsole
Net:   phy interface0
eth0: ethernet@1c30000
starting USB...
USB0:   USB EHCI 1.00
USB1:   USB OHCI 1.0
USB2:   USB EHCI 1.00
USB3:   USB OHCI 1.0
USB4:   USB EHCI 1.00
USB5:   USB OHCI 1.0
USB6:   USB EHCI 1.00
USB7:   USB OHCI 1.0
scanning bus 0 for devices... 1 USB Device(s) found
scanning bus 1 for devices... 1 USB Device(s) found
scanning bus 2 for devices... 1 USB Device(s) found
scanning bus 3 for devices... 1 USB Device(s) found
scanning bus 4 for devices... 1 USB Device(s) found
scanning bus 5 for devices... 1 USB Device(s) found
scanning bus 6 for devices... 1 USB Device(s) found
scanning bus 7 for devices... 2 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
Hit any key to stop autoboot:  0
switch to partitions #0, OK
mmc0 is current device
Scanning mmc 0:1...
Found U-Boot script /boot/boot.scr
3798 bytes read in 2 ms (1.8 MiB/s)
## Executing script at 43100000
U-boot loaded from SD
Boot script loaded from mmc
201 bytes read in 1 ms (196.3 KiB/s)
8129656 bytes read in 368 ms (21.1 MiB/s)
7323200 bytes read in 332 ms (21 MiB/s)
Found mainline kernel configuration
29109 bytes read in 10 ms (2.8 MiB/s)
4155 bytes read in 6 ms (675.8 KiB/s)
Applying kernel provided DT fixup script (sun8i-h3-fixup.scr)
## Executing script at 44000000
## Loading init Ramdisk from Legacy Image at 43300000 ...
   Image Name:   uInitrd
   Image Type:   ARM Linux RAMDisk Image (gzip compressed)
   Data Size:    8129592 Bytes = 7.8 MiB
   Load Address: 00000000
   Entry Point:  00000000
   Verifying Checksum ... OK
## Flattened Device Tree blob at 43000000
   Booting using the fdt blob at 0x43000000
EHCI failed to shut down host controller.
   Loading Ramdisk to 4983f000, end 49fffc38 ... OK
   Loading Device Tree to 497cf000, end 4983efff ... OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.

Ubuntu 18.04.1 LTS orangepipc ttyS0

orangepipc login:
19 февраля   armbian   UBOOT

LIRC (ir-keytable + lircd) на armbian

LIRC стабильная и проверенная библиотека с открытым кодом, которая позволяет отправлять и получать команды по инфракрасному порту, (англ. Linux Infrared Remote Control, «управление Linux при помощи инфракрасного пульта дистанционного управления»)

При использовании irrecord он будет просить вас несколько раз нажимать кнопки различным образом, использование ir-keytable лишает этой радости, но всё равно надо привязать названия к кнопкам. Не обязательно ко всем, можно только к тем, которые планируете использовать.

тестировал на Armbian_5.75_Orangepipc_Ubuntu_bionic_next_4.19.20

uname -a


Linux orangepipc 4.19.20-sunxi #5.75 SMP Sat Feb 9 19:02:47 CET 2019 armv7l armv7l armv7l GNU/Linux

ставим ir-keytable (просто скопируйте код, и вставьте в терминал )

apt install ir-keytable -y
mkdir -p  /etc/rc_keymaps
touch /etc/rc_keymaps/my_keymaps

ir-keytable -c -p other,lirc,rc-5,rc-5-sz,jvc,sony,nec,sanyo,mce_kbd,rc-6,sharp,xmp -w /etc/rc_keymaps/my_keymaps

ir-keytable -t

нажимаем на кнопки пульта, пример выдачи моего пульта
при нажатии кнопки «1» , «2», «-VOL», «+VOL» и т. д.

root@orangepipc:~# ir-keytable -t
Testing events. Please, press CTRL-C to abort.
1300.707932: lirc protocol(nec): scancode = 0xc
1300.758474: lirc protocol(nec): scancode = 0xc repeat
1305.305770: lirc protocol(nec): scancode = 0x18
1308.840815: lirc protocol(nec): scancode = 0x18 repeat
1810.025185: lirc protocol(nec): scancode = 0x15
1810.075733: lirc protocol(nec): scancode = 0x15 repeat
1811.312910: lirc protocol(nec): scancode = 0x9
1811.363469: lirc protocol(nec): scancode = 0x9 repeat

scancode прописываем в файл: /etc/rc_keymaps/my_keymaps

0x0c KEY_1
0x18 KEY_2
0x15 KEY_VOLUMEDOWN
0x09 KEY_VOLUMEUP

для автозапуска ir-keytable в  файл /etc/rc.local прописываем строку:

ir-keytable -c -p other,lirc,rc-5,rc-5-sz,jvc,sony,nec,sanyo,mce_kbd,rc-6,sharp,xmp -w /etc/rc_keymaps/my_keymaps

вывод команды: lsmod | grep ir_

root@orangepipc:~# lsmod | grep ir_
ir_xmp_decoder 16384 0
ir_mce_kbd_decoder 16384 0
ir_sharp_decoder 16384 0
ir_sanyo_decoder 16384 0
ir_sony_decoder 16384 0
ir_jvc_decoder 16384 0
ir_rc6_decoder 16384 0
ir_nec_decoder 16384 0
ir_rc5_decoder 16384 0

после настройки, лишние модули при запуске ir-keytable в опции -p можно не указывать.

Ставим lirc

apt install lirc -y

запуск irw

irw

нажимаем на кнопки пульта, пример выдачи моего пульта
при нажатии кнопки «1» , «2», «-VOL», «+VOL» и т. д.

root@orangepipc:~# irw
0000000080010002 00 KEY_1 devinput-32
0000000080010003 00 KEY_2 devinput-32
0000000080010072 00 KEY_VOLUMEDOWN devinput-32
0000000080010073 00 KEY_VOLUMEUP devinput-32

Далее требуется настроить команды, которые будут получать приложения, использующие управление при помощи ПДУ, при нажатии кнопок пульта. Они указываются в файле: /etc/lirc/irexec.lircrc в котором описывается как и какому приложению реагировать на нажатие клавиши на пульте. Для примера как всегда поморгаем светодиодами на плате OrangePI PC и поуправляем громкостью с помощью amixer, запустив alsamixer наблюдаем визуально столбик «Line Out» при регулировке громкостью с помощью пульта.

begin
   remote = devinput-32	
   button = KEY_1
   repeat = 0
   delay = 0
   prog = irexec
   config = echo heartbeat | sudo tee "/sys/class/leds/orangepi:red:status/trigger"
   config = echo none | sudo tee "/sys/class/leds/orangepi:red:status/trigger"
end
begin
   remote = devinput-32	
   button = KEY_2
   repeat = 0
   delay	= 0
   prog = irexec
   config = echo heartbeat | sudo tee "/sys/class/leds/orangepi:green:pwr/trigger"
   config = echo none | sudo tee "/sys/class/leds/orangepi:green:pwr/trigger"
end
begin
   remote = devinput-32
   prog   = irexec
   button = KEY_VOLUMEDOWN
   config = amixer set "Line Out" 3%- &> /dev/null
   repeat = 10
   delay  = 10
end
 begin
   remote = devinput-32
   prog   = irexec
   button = KEY_VOLUMEUP
   config = amixer set "Line Out" 3%+ &> /dev/null
   repeat = 10
   delay  = 10
end
18 февраля   armbian   IR/InfraRed

Модуль gpio-rotary encoder на armbian

Энкодер или датчик угла поворота — это электромеханическое устройство, предназначенное для преобразования углового положения вала или оси в электрические сигналы.

тестировал на Armbian_5.75_Orangepipc_Ubuntu_bionic_next_4.19.20

uname -a


Linux orangepipc 4.19.20-sunxi #5.75 SMP Sat Feb 9 19:02:47 CET 2019 armv7l armv7l armv7l GNU/Linux

обновим нашу систему и ставим headers

wget https://apt.armbian.com/pool/main/l/linux-4.20.7-sunxi/linux-dtb-dev-sunxi_5.75_armhf.deb

wget https://apt.armbian.com/pool/main/l/linux-4.20.7-sunxi/linux-headers-dev-sunxi_5.75_armhf.deb

wget https://apt.armbian.com/pool/main/l/linux-4.20.7-sunxi/linux-image-dev-sunxi_5.75_armhf.deb

dpkg -i *.deb
reboot
apt update &&  apt list --upgradable && apt upgrade -y
uname -a


Linux orangepipc 4.20.7-sunxi #5.75 SMP Fri Feb 8 09:02:10 CET 2019 armv7l armv7l armv7l GNU/Linux

в linux-headers-4.20.7-sunxi есть ошибка, для исправления надо создать пустой файл
source «net/wireguard/Kconfig» и запустить make scripts в папке /usr/src/linux-headers-4.20.7-sunxi

mkdir -p  /usr/src/linux-headers-4.20.7-sunxi/net/wireguard
touch /usr/src/linux-headers-4.20.7-sunxi/net/wireguard/Kconfig
cd /usr/src/linux-headers-4.20.7-sunxi
make scripts
cd

Использовал драйвер ядра gpio-keys (для кнопки энкодера) и драйвер ядра rotary-encoder,
по умолчанию в armbian, модуль rotary-encoder не установлен.
компилируем и ставим модуль rotary-encoder :

git clone https://github.com/ua3nbw-cf/rotary_encoder.git
cd rotary_encoder
make all install

компилируем и ставим оверлей gpio-rotary.dts:

armbian-add-overlay gpio-rotary.dts
reboot

в файле /boot/armbianEnv.txt появится строка: user_overlays=gpio-rotary
в папке /boot/overlay-user появится файл: gpio-rotary.dtbo
в файле /etc/udev/rules.d/90-devinput-rotary.rules строки:

SUBSYSTEM=="input", MODE="666"
SUBSYSTEMS=="input", ATTRS{name}=="rotary_axis", SYMLINK+="input/rotary_axis"
SUBSYSTEMS=="input", ATTRS{name}=="rotary_button", SYMLINK+="input/rotary_button"

проверка:

dmesg | grep rotary


root@orangepipc:~# dmesg | grep rotary
[ 9.346633] input: rotary_button as /devices/platform/rotary_button/input/input0
[ 9.356333] rotary_encoder: loading out-of-tree module taints kernel.
[ 9.357242] rotary-encoder rotary_axis: gray
[ 9.377227] input: rotary_axis as /devices/platform/rotary_axis/input/input2

cat /sys/kernel/debug/gpio | grep rotary


root@orangepipc:~# cat /sys/kernel/debug/gpio | grep rotary
gpio-200 ( |rotary_axis ) in  hi IRQ ACTIVE LOW
gpio-201 ( |rotary_axis ) in  hi IRQ ACTIVE LOW

ls -la /dev/input | grep rotary


root@orangepipc:~# ls -la /dev/input | grep rotary
lrwxrwxrwx 1 root root 6 Feb 17 15:58 rotary_axis -> event2
lrwxrwxrwx 1 root root 6 Feb 17 15:58 rotary_button -> event0

Тестируем.
энкодер подключаем к контактам 32 («PG8») и 36 («PG9») гребенки, общий вывод к 34 контакту.

evtest  /dev/input/rotary_axis

вращение енкодера по часовой стрелке и против часовой:
вывод команды evtest /dev/input/rotary_axis:

root@orangepipc:~# evtest  /dev/input/rotary_axis
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x0 product 0x0 version 0x0
Input device name: "rotary_axis"
Supported events:
  Event type 0 (EV_SYN)
  Event type 2 (EV_REL)
    Event code 1 (REL_Y)
Properties:
Testing ... (interrupt to exit)
Event: time 1550422364.373974, type 2 (EV_REL), code 1 (REL_Y), value -1
Event: time 1550422364.373974, -------------- SYN_REPORT ------------
Event: time 1550422364.488588, type 2 (EV_REL), code 1 (REL_Y), value -1
Event: time 1550422364.488588, -------------- SYN_REPORT ------------
Event: time 1550422364.651093, type 2 (EV_REL), code 1 (REL_Y), value -1
Event: time 1550422364.651093, -------------- SYN_REPORT ------------
Event: time 1550422365.439925, type 2 (EV_REL), code 1 (REL_Y), value 1
Event: time 1550422365.439925, -------------- SYN_REPORT ------------
Event: time 1550422365.656337, type 2 (EV_REL), code 1 (REL_Y), value 1
Event: time 1550422365.656337, -------------- SYN_REPORT ------------
Event: time 1550422365.727505, type 2 (EV_REL), code 1 (REL_Y), value 1
Event: time 1550422365.727505, -------------- SYN_REPORT ------------

кнопку энкодера подключаем к контактам 7 («PA6») гребенки, и к  9 контакту гребенки.

evtest  /dev/input/rotary_button

вывод команды при нажатии кнопки энкодера:

root@orangepipc:~# evtest  /dev/input/rotary_button
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x1 product 0x1 version 0x100
Input device name: "rotary_button"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 99 (KEY_SYSRQ)
Properties:
Testing ... (interrupt to exit)
Event: time 1550424346.724098, type 1 (EV_KEY), code 99 (KEY_SYSRQ), value 1
Event: time 1550424346.724098, -------------- SYN_REPORT ------------
Event: time 1550424346.912050, type 1 (EV_KEY), code 99 (KEY_SYSRQ), value 0
Event: time 1550424346.912050, -------------- SYN_REPORT ------------

Видим, что все события энкодера генерирует ядро.

17 февраля   armbian   GPIO   rotary encoder

Сборка Mesa 3D на Orangepi

mesa — свободная реализация графических API OpenGL и Vulkan с открытым исходным кодом, и других спецификаций, а также набор видеодрайверов пространства пользователя для GPU.

OpenGL driver for ARM Mali400/450
Linux-Lima — ориентирован на поддержку ARM Mali серии 400/500, одной из нескольких попыток реверс-инжиниринга с открытым исходным кодом, которые сейчас применяются к различным поколениям аппаратного обеспечения Mali.
Включен по умолчанию на сборках armbian Next LTS kernel 4.19.y Allwinner A10, A20, A64, H2+, H3, H5, H6 тема на форуме armbian.

lsmod | grep "lima"


lima 40960 0
gpu_sched 20480 1 lima
ttm 57344 1 lima

Mesa, над которым работает Qiang Yu для обеспечения поддержки OpenGL для Mali 400/500 и являющийся реализацией на основе Gallium3D.

Установим зависимости, несколько пакетов можно не устанавливать, но для тестового запуска пусть будут.

apt update
apt list --upgradable
apt install -y pkg-config libwayland-dev wayland-protocols libdrm-dev libgbm-dev libinput-dev libxkbcommon-dev libpixman-1-dev libx11-dev libegl1-mesa-dev gettext libtool libsystemd-dev libcap-dev libxcb-xkb-dev libxcb-composite0-dev  libavutil-dev libghc-xcb-types-dev libpng-dev libavutil-dev  libavcodec-dev libavformat-dev  libvdpau-dev libxvmc-dev  libomxil-bellagio-dev gperf libpcre2-dev libaudit-dev libselinux1-dev libpolkit-gobject-1-dev kexec-tools valgrind docbook-xsl docbook-xml libunwind-dev ninja-build libcairo2-dev libpam0g-dev libpango1.0-dev libgdk-pixbuf2.0-dev xutils-dev python3-mako libva-dev meson llvm-dev libsensors4-dev libpciaccess-dev libxrandr-dev  llvm mesa-utils-extra mesa-utils glmark2 glmark2-drm glmark2-es2 glmark2-es2-drm

git clone https://gitlab.freedesktop.org/lima/mesa
cd mesa
meson build   --prefix=/usr -Dvulkan-drivers=[] -Dplatforms=drm,x11 -Ddri-drivers=[] \
  -Dgallium-drivers=lima,exynos,sun4i,meson,rockchip

ninja -C build install
reboot
DISPLAY=:0 glxinfo | grep OpenGL


OpenGL vendor string: lima
OpenGL renderer string: Mali400
OpenGL version string: 2.1 Mesa 18.3.0 (git-0a153b2aae)
OpenGL shading language version string: 1.20
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 2.0 Mesa 18.3.0 (git-0a153b2aae)
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 1.0.16
OpenGL ES profile extensions:

17 января   armbian   mesa   OrangePI PC

Сборка OpenCV 4 на Orangepi

OpenCV — библиотека алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым кодом. Реализована на C/C++

тестировал на Armbian_5.69_Orangepipc_Ubuntu_bionic_next_4.19.13
обновим нашу систему

apt update && apt upgrade

установим зависимости и инструменты разработчика, включая CMake

apt-get install cmake pkg-config libjpeg-dev libpng-dev libtiff-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgtk-3-dev libcanberra-gtk* libatlas-base-dev gfortran python-pip python3-dev

Ставим виртуальную среду Python 3 для OpenCV 4

wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
pip install virtualenv virtualenvwrapper
rm -rf ~/get-pip.py ~/.cache/pip

в файл ~ / .profile , добавить строки:

# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

перезагружаем ~ / .profile

source ~/.profile

Создаём виртуальную среду для  OpenCV 4 и дополнительных пакетов

mkvirtualenv cv -p python3

проверяем , что мы находимся в  среде cv , используя команду workon :

workon cv

ставим NumPy

pip install numpy

1G памяти, маловато для сборки.
увеличим swapfile:

fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

загружаем opencv,opencv_contrib и компилируем OpenCV 4

wget -O opencv.tar.gz https://github.com/opencv/opencv/archive/4.0.0.tar.gz
tar -xvzf opencv.tar.gz
mv opencv-4.0.0 opencv

wget -O opencv_contrib.tar.gz https://github.com/opencv/opencv_contrib/archive/4.0.0.tar.gz
tar -xvzf opencv_contrib.tar.gz
mv opencv_contrib-4.0.0 opencv_contrib

cd ~/opencv
mkdir build
cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    -D ENABLE_NEON=ON \
    -D ENABLE_VFPV3=ON \
    -D BUILD_TESTS=OFF \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D INSTALL_PYTHON_EXAMPLES=OFF \
    -D BUILD_EXAMPLES=OFF ..

make -j4

make install
ldconfig

обязательна символьная ссылка для виртуальной среды OpenCV 4

cd ~/.virtualenvs/cv/lib/python3.6/site-packages/
ln -s /usr/local/python/cv2/python-3.6/cv2.cpython-36m-arm-linux-gnueabihf.so cv2.so
cd ~

быстрый тест:

workon cv
python
>>> import cv2
>>> cv2.__version__

выведет

’4.0.0’

>>> exit()

Первая команда активирует нашу виртуальную среду. Затем мы запускаем интерпретатор Python, связанный со средой.
Использованы материалы сайта:
pyimagesearch.com.

14 января   armbian   OpenCV   OrangePI PC

Сборка пакета kodi (kodi-wayland) для Mainline Linux AllWinner H3 на Armbian Bionic

собирал на OrangePiPC, sd карта 4Gb.
будем задействовать аппаратное ускорение H3-GPU + wayland

Тестировал на дату публикации.
Обращаю ваше внимание, все команды я выполняю от root’а на терминале PuTTY

собирается на Armbian Bionic на дату публикации это – Armbian_5.65_Orangepipc_Ubuntu_bionic_next_4.14.78.img Armbian Link.
вывод команды uname -a

Linux orangepipc 4.14.78-sunxi #412 SMP Fri Oct 26 11:37:04 CEST 2018 armv7l armv7l armv7l GNU/Linux

для компиляции модуля mali нужны хидеры ядра, хидеры есть в бета версии armbian,
переключаемся на ночную версию:

sed -i 's/apt.armbian.com/beta.armbian.com/' /etc/apt/sources.list.d/armbian.list
apt update 
apt list --upgradable
apt -y upgrade
reboot

после перезагрузки ставим хидеры ядра:

apt install -y linux-headers-next-sunxi

Если у меня всё работает так как надо и всё учтено, то нужно подробно это оговаривать – все нюансы.
Либо сделать так чтобы нюансов был минимум.

Попытка собрать пакет kodi для Mainline Linux AllWinner H3 на wayland на автомате.

git clone https://github.com/ua3nbw-cf/kodi-build.git
cd kodi-build
./build.sh

или

./kodi_build.sh all

в файле kodi_build.sh можно подредактировать версии пакетов

KODI=18.0b5-Leia
FFMPEG=4.0.3-Leia-Beta5
IPTVSIMPLE=3.5.3-Leia
WAYLAND=1.16.0
WAYLANDPROTOCOLS=1.16
WESTON=4.0.0
LIBDRM=libdrm-2.4.96

по умолчанию на выходе в папке kodi-build/build имеем пакет kodi_18.0b5-Leia_armhf.deb с предустановленным плагином pvr.iptvsimple
пакет после сборки установится автоматически.

Установка пакета на чистую систему аналогична этому посту:
Kodi 18 Mainline Linux AllWinner H3 на wayland .

26 ноября   armbian   Kodi   wayland

Создание пакета deb с использованием fpm

Устанавливать программы через make, в обход системы управления пакетами в дистрибутивах — является дурным тоном.
Установка fpm

apt -y install ruby ruby-dev rubygems build-essential
gem install --no-ri --no-rdoc fpm

Получить полный список опций позволяет команда fpm —help.
• -C: каталог, в который нужно перейти до поиска файлов.
• --prefix: путь к каталогу, в котором будут установлены файлы в выходном пакете.
• -p: имя и путь пакета. Это может переопределить имя результирующего файла.
• -n: имя, которое вы хотите использовать для пакета. Это имя отображается в инструментах упаковки платформы.
• -v: номер версии, которую вы хотите использовать для своего пакета.
• --iteration: информация о релизе пакета. Имя дистрибутива для этого номера может отличаться; обычно это способ отслеживать версию пакета, в отличие от версии приложения.
• --license: лицензионное имя пакета. Включает тип лицензии в метаданных, но не содержит связанный файл лицензии в самом пакете.
• --category: категория, к которой относится этот пакет (можно использовать для организации пакета в репозитории).
• -d: зависимости пакета (можно использовать несколько раз).
• --provides: можно использовать для указания функциональности системы, предоставляемой этим пакетом.
• --conflicts: определяет пакеты, которые несовместимы с вашим пакетом.
• --replaces: используетсядля указания пакетов, которые необходимо удалить при установке этого пакета.
• --config-files: используется для маркировки конфигурационных файлов в пакете. Как правило, менеджеры пакетов оставят такие файлы при удалении пакета.
• --directories: помечает каталог как принадлежащий пакету.
• -a: указывает архитектуру пакета.
• -m: позволяет переопределить поле сопровождающей стороны пакета. По умолчанию здесь будет использоваться username@host.
• -e: вручную просмотреть и отредактировать файл спецификации до создания пакета. Эту опцию можно использовать для корректировки любых значений по умолчанию, которые были использованы в спецификации.
• --description: описание пакета.
• -- after-install, -- before-install, -- after-remove, -- before-remove: файлы сценариев, которые должны запускаться в соответствующее время.

Существует также несколько специфичных опций для разных форматов. Для получения полного списка используйте подкоманду help.

Для примера вот так создаётся пакет kodi для Debian/GNU Linux

make -j4 install DESTDIR=/tmp/18.0b5-Leia
fpm -s dir -t deb -n kodi -v 18.0b5-Leia  -C /tmp/18.0b5-Leia

Создание пакетов в разных форматах с помощью fpm .

26 ноября   armbian   fpm

Сборка Rust на OrangePI (Armbian)

Потребовалось собрать свежий Rust.

Rust (англ. rust — ржавчина, произносится [rʌst] — раст) — мультипарадигмальный компилируемый язык программирования общего назначения, спонсируемый Mozilla.
Ключевые особенности языка: безопасность, скорость и параллелизм.

Это не отосится к сборке Rust на OrangePI, которая занимает более 12 часов.
1G памяти, маловато для сборки.
Используем swap:

fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
swapon --show
free -h

вывод free -h, в процессе сборки:

root@orangepipc:~# free -h
total used free shared buff/cache available
Mem: 1.0Gi 940Mi 13Mi 0.0Ki 46Mi 35Mi
Swap: 1.5Gi 1.1Gi 418Mi

apt-get install cmake pkg-config 

git clone https://github.com/rust-lang/rust.git
cd rust
git submodule update --init --recursive --progress
./x.py build && sudo ./x.py install

За ночь должен собраться.

rustc --version --verbose


rustc 1.32.0-dev
binary: rustc
commit-hash: unknown
commit-date: unknown
host: armv7-unknown-linux-gnueabihf
release: 1.32.0-dev
LLVM version: 8.0

А так, можно установить за пять минут.

wget https://static.rust-lang.org/dist/rust-nightly-arm-unknown-linux-gnueabihf.tar.gz
tar -xvzf rust-nightly-arm-unknown-linux-gnueabihf.tar.gz
cd $HOME/rust-nightly-arm-unknown-linux-gnueabihf
sudo ./install.sh
rustc --version --verbose


rustc 1.32.0-nightly (451987d86 2018-11-01)
binary: rustc
commit-hash: 451987d86c89b38ddd8c4c124f1b9b6d4ded6983
commit-date: 2018-11-01
host: arm-unknown-linux-gnueabihf
release: 1.32.0-nightly
LLVM version: 8.0

2018   armbian   Rust

Kodi 18 Mainline Linux AllWinner H3 на wayland

Тестировал на Armbian Bionic Orangepipc от armbian,
ставим Armbian Link.
меняем текущее ядро на linux-4.14.84-sunxi и ставим хидеры ядра

wget https://apt.armbian.com/pool/main/l/linux-4.14.84-sunxi/linux-image-next-sunxi_5.67_armhf.deb

wget https://apt.armbian.com/pool/main/l/linux-4.14.84-sunxi/linux-dtb-next-sunxi_5.67_armhf.deb

wget https://apt.armbian.com/pool/main/l/linux-4.14.84-sunxi/linux-headers-next-sunxi_5.67_armhf.deb

dpkg -i *-next-sunxi_5.67_armhf.deb
Kodi собран с опциями
-DCORE_PLATFORM_NAME=wayland -DWAYLAND_RENDER_SYSTEM=gles
патчи от jernejsk.
Сборка пакета kodi (kodi-wayland) для Mainline Linux AllWinner H3 на Armbian Bionic .

ставил на weston
Weston — это «эталонный» графический сервер от wayland который служит как пример реализации + для всяких тестов, в реальном DE (gnome, kde) он не используется

Wayland работает непосредственно поверх ядра, и позволяет клиентским приложениям осуществлять рендеринг напрямую без использования промежуточного слоя. В Wayland используется прямой рендеринг через OpenGL или OpenGL ES.

Вы должны понимать, что Weston не предназначен для повседневного использования,
а используется исключительно для тестов

Обращаю ваше внимание, все команды я выполняю от root’а на терминале PuTTY
вывод команды uname -a

Linux orangepipc 4.14.84-sunxi #3 SMP Sat Dec 1 07:18:41 CET 2018 armv7l armv7l armv7l GNU/Linux

собираем модуль mali.ko (просто скопируйте код, и вставьте в терминал )
исходники пропатчены, patch.

wget https://ua3nbw.ru/files/DX910-SW-99002-r9p0-01rel0.tgz
tar -xvf DX910-SW-99002-r9p0-01rel0.tgz
cd $HOME/DX910-SW-99002-r9p0-01rel0/driver/src/devicedrv/mali
export CROSS_COMPILE=arm-linux-gnueabihf-
export KDIR=/lib/modules/$(uname -r)/build

make MALI_PLATFORM_FILES=platform/sunxi/sunxi.c \
    EXTRA_CFLAGS="-DCONFIG_MALI_DVFS \
    -DMALI_FAKE_PLATFORM_DEVICE=1 \
    -DCONFIG_MALI_DMA_BUF_MAP_ON_ATTACH" \
    CONFIG_MALI400=m USING_DVFS=1 

mkdir -p /lib/modules/$(uname -r)/extra
cp -PR mali.ko /lib/modules/$(uname -r)/extra/mali.ko

depmod
modprobe mali

вывод команды ls -l /dev/mali

crw———- 1 root root 10, 57 Oct 28 15:08 /dev/mali

вывод команды lsmod | grep mali

mali 475136 0

ставим блобы (просто скопируйте код, и вставьте в терминал )

cd
wget https://ua3nbw.ru/files/mali-blobs.tgz
tar -xvf mali-blobs.tgz
cd $HOME/mali-blobs
    cp -av include/wayland/* /usr/include
  mkdir -p /usr/lib/pkgconfig
    cp -PRv pkgconfig/*.pc /usr/lib/pkgconfig

  MALI="r6p2/arm/wayland/libMali.so"
  mkdir -p /usr/lib/mali
    cp -v $MALI /usr/lib/mali

    for lib in libEGL.so \
               libEGL.so.1 \
               libEGL.so.1.4 \
               libGLESv2.so \
               libGLESv2.so.2 \
               libGLESv2.so.2.0 \
               libgbm.so \
               libgbm.so.1; do
      ln -sfv libMali.so /usr/lib/mali/${lib}
        
    done

echo "/usr/lib/mali" > /etc/ld.so.conf.d/1-mali.conf
ldconfig

ставим необходимые пакеты

apt install -y xwayland  weston libavahi-client3  libbluray2  libcec4 \
 liblirc-client0 libmicrohttpd12  libnfs11  libpulse0 libpython2.7 \
 libsmbclient libxslt1.1 libass9 libcdio17  libva2 libvpx5 libopencore-amrwb0 \
 libopencore-amrnb0 libtheora0 libvo-amrwbenc0 libx264-152 libx265-146 \
 libxvidcore4 libva-drm2 libvdpau1 libfstrcmp0 libpcrecpp0v5 \
 libtag1v5-vanilla libtinyxml2.6.2v5 libva-x11-2

ставим пакет kodi

wget https://ua3nbw.ru/files/deb/kodi_18.0.3_armhf.deb
dpkg -i kodi_18.0.3_armhf.deb

для автозапуска weston-launch создаём файл

nano /lib/systemd/system/weston-launch.service

копируем и вставляем в nano следующий код.

[Unit]
Description=Weston Wayland compositor startup
RequiresMountsFor=/run

[Service]
User=root
EnvironmentFile=-/etc/default/weston
Environment="XDG_RUNTIME_DIR=/run/user/1000"
Environment="DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/dbus/user_bus_socket"
ExecStartPre=/usr/bin/sudo /bin/mkdir -p /run/user/1000/dbus
ExecStartPre=/usr/bin/sudo /bin/chown -R root:root /run/user/1000/dbus
ExecStartPre=/bin/chmod -R 0700 /run/user/1000
ExecStart=/usr/bin/sudo -E -- /bin/openvt -v -w -s -- su root -l -c "XDG_RUNTIME_DIR=/run/user/1000 /usr/bin/weston-launch -- $OPTARGS 2>~/.weston-errors"

[Install]
WantedBy=multi-user.target

Сохраняем изменения в файле (ctrl + o) и закрываем файл (ctrl + x).
включение и запуск сервиса

systemctl enable weston-launch.service
systemctl start weston-launch.service

вывод команды systemctl status weston-launch.service


● weston-launch.service — Weston Wayland compositor startup
Loaded: loaded (/lib/systemd/system/weston-launch.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2018-10-18 11:48:29 UTC; 2s ago
Process: 1869 ExecStartPre=/bin/chmod -R 0700 /run/user/1000 (code=exited, status=0/SUCCESS)
Process: 1867 ExecStartPre=/usr/bin/sudo /bin/chown -R root:root /run/user/1000/dbus (code=exited, sta
Process: 1865 ExecStartPre=/usr/bin/sudo /bin/mkdir -p /run/user/1000/dbus (code=exited, status=0/SUCC
Main PID: 1870 (sudo)
Tasks: 2 (limit: 2225)
CGroup: /system.slice/weston-launch.service
├─1870 /usr/bin/sudo -E — /bin/openvt -v -w -s — su root -l -c XDG_RUNTIME_DIR=/run/user/10
└─1871 /bin/openvt -v -w -s — su root -l -c XDG_RUNTIME_DIR=/run/user/1000 /usr/bin/weston-l


если

lsmod | grep mali

выводит:
mali 475136 5
идём дальше, драйвер (модуль) mali, успешно загрузился и работает.

в левом углу weston иконка виртуального терминала
запускаем виртуальный терминал и из терминала запускаем kodi

kodi

Кому лень повторять эту ахинею, вот готовый образ для PC. img для OrangePI-PC
pass root:orangepi
user ua3nbw:orangepi
Audio на AV выход:

amixer -c 0 -q set "Line Out"  100%+ unmute
amixer -c 0 -q set "DAC"  100%+ unmute
speaker-test -twav -c2   #тест на аудио выход

Прикрыл комментарии в блоге, атака спамеров, на вопросы могу ответить на форуме orangepi.pp.ua, слежу за  этой темой : mali на mainline ядре
иногда просматриваю Kodi vs mpv Video Player on Armbian

Вы должны понимать, что Weston не предназначен для повседневного использования,
а используется исключительно для тестов, гашение экрана каждые 5 минут
можно отключить добавив параметр idle-time=0 в секцию [core] в файле .config/weston.ini
Автозапуск kodi: в секцию [shell] добавить client=/usr/local/bin/kodi в файле .config/weston.ini
weston.ini man page
Из Weston можно выйти по Ctrl+Alt+Backspace.
Про audio тут отвечал модифицировать .asoundrc

acestream: на данной сборке не проверял.
Инструкция по развертыванию acestream — acestream и  TTV без aceproxy
iptvsimple тут: pvr.iptvsimple

2018   Kodi   Mainline   Mali   OrangePI PC
Ctrl + ↓ Ранее