Orange pi PC, AllWinner H3 SoC

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

Ctrl + ↑ Позднее

Кнопки на GPIO Mainline Linux OrangePi

Мы можем использовать GPIO (линии ввода/вывода общего назначения ) и с минимальными ресурсами отслеживать изменения на линии GPIO.
Также мы можем запустить любой скрипт или программу с помощью кнопок подключённых к GPIO.
тестировал на mainline ядре 4.14.15-sunxi

Пример подключения пяти нормально разомкнутых кнопок:

использовал драйвер gpio-keys
ставим хидеры ядра, в терминале:

apt upgrade

armbian-config -> Software -> Headers

по умолчанию в  armbian, модуль gpio-keys не установлен.
ставим модуль gpio-keys :

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

вот фрагмент оверлея gpio-keys.dts из папки gpio-keys

g-keys_up {
					label = "GPIO KEY_UP";
					linux,code = <103>; /* KEY_UP, see /usr/include/linux/input-event-codes.h */
					gpios = <&pio 0 7 1>; /* PA7 GPIO_ACTIVE_LOW */
				};

				g-keys_down {
					label = "GPIO KEY_DOWN";
					linux,code = <108>; /* KEY_DOWN, see /usr/include/linux/input-event-codes.h */
					gpios = <&pio 0 8 1>; /* PA8 GPIO_ACTIVE_LOW */
				};

				g-keys_left {
					label = "GPIO KEY_LEFT";
					linux,code = <105>; /* KEY_LEFT, see /usr/include/linux/input-event-codes.h */
					gpios = <&pio 0 9 1>; /* PA9 GPIO_ACTIVE_LOW */
				};

				g-keys_right {
					label = "GPIO KEY_RIGHT";
					linux,code = <106>; /* KEY_RIGHT, see /usr/include/linux/input-event-codes.h */
					gpios = <&pio 0 10 1>; /* PA10 GPIO_ACTIVE_LOW */
				};
				g-keys_enter {
					label = "GPIO KEY_ENTER";
					linux,code = <28>; /* KEY_ENTER, see /usr/include/linux/input-event-codes.h */
					gpios = <&pio 0 21 1>; /* PA21 GPIO_ACTIVE_LOW */
				};

можно менять linux,code и gpios
компилируем:

armbian-add-overlay gpio-keys.dts
reboot

проверяем:

cat /sys/kernel/debug/gpio
evtest

в моём случае device event number 1 (gpio-keys-user)

готово, кнопки подключённые к GPIO дублируют кнопки обычной клавиатуры.

Компилируем демон, который будет следить за нажатиями

git clone https://github.com/elopez/keybinder.git
cd keybinder
make install

проверяем:

keybinder /dev/input/event1

event1 это мой event номер один, у вас event может быть другой.
жмакаем кнопки которые подключили к GPIO
Идем /etc/ правим keybinder.conf
для примера опять моргаем светодиодами на плате

28,reboot
103,echo heartbeat | sudo tee "/sys/class/leds/orangepi:red:status/trigger"
105,echo none | sudo tee "/sys/class/leds/orangepi:red:status/trigger"
106,echo heartbeat | sudo tee "/sys/class/leds/orangepi:green:pwr/trigger"
108,echo none | sudo tee "/sys/class/leds/orangepi:green:pwr/trigger"

.....................................................................

Для автозапуска после перезагрузки
Идем /etc/ правим rc.local ……………..
до строки exit
добавляем строку

/usr/local/bin/keybinder /dev/input/event1 >/dev/null &

Device Tree Mainline Linux

2018   armbian   Device Tree   GPIO   overlay

Libgpiod “New GPIO Interface for User Space” OrangePI

Новая библиотека для работы с GPIO, обеспечивает работу со всеми выделенными выводами SOC и добавляет несколько новых функций, не присутствующих в устаревшем интерфейсе sysfs.
Также возможна паралельная работа с GPIOs.

тема sgjava на форуме armbian
ставим хидеры ядра:
в терминале: armbian-config -> Software -> Headers

sudo apt-get install libtool pkg-config 
git clone https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git 
cd libgpiod 
mkdir -p include/linux 
cp /usr/src/linux-headers-$(uname -r)/include/linux/compiler_types.h include/linux/.
 
./autogen.sh --enable-tools=yes --prefix=/usr/local CFLAGS="-I/usr/src/linux-headers-$(uname -r)/include/uapi -Iinclude" 

make 
sudo make install 
sudo ldconfig

README
cnx-software

Linphone version: 3.12 на OrangePi

Linphone (англ. Linux Phone) — кроссплатформенный программный клиент IP-телефонии в стандарте SIP с открытым исходным кодом, распространяемый по лицензии GNU GPL. Программа Linphone предназначена для организации аудио и видео-вызовов, а также обмена текстовыми сообщениями посредством Интернета.

Консольные приложения linphonec и linphonecsh version: 3.12.0
linphonec — версия программы для работы из командной строки.
linphonecsh — консольная программа для управления работающей в фоновом режиме программой linphonec
Сборка:
git clone https://github.com/ua3nbw-cf/linphone_arm.git
cd linphone_arm
./compil.sh

Проверено на:

Armbian_5.35_Orangepipc_Ubuntu_xenial_default_3.4.113
Armbian_5.37_Orangepipc_Debian_stretch_next_4.14.12

Автомаунт флешек с помощью pmount в Debian(stretch)

Для debian(stretch) в репозитарии нет пакета usbmount для автоматического монтирования внешних накопителей usb
Решение для автоматического монтирования внешних накопителей usb с помощью pmount:

apt-get install pmount

Create file /etc/udev/rules.d/usbstick.rules
Insert:

ACTION=="add", KERNEL=="sd[a-z][0-9]", TAG+="systemd", ENV{SYSTEMD_WANTS}="usbstick-handler@%k"

Create file /lib/systemd/system/usbstick-handler@.service
Insert:

[Unit]
Description=Mount USB sticks
BindsTo=dev-%i.device
After=dev-%i.device

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/bin/automount %I
ExecStop=/usr/bin/pumount /dev/%I

Create file /usr/local/bin/automount
Insert:

#!/bin/bash

PART=$1
FS_LABEL=`lsblk -o name,label | grep ${PART} | awk '{print $2}'`

if [ -z ${FS_LABEL} ]
then
    /usr/bin/pmount --umask 000 --noatime -w --sync /dev/${PART} /media/${PART}
else
    /usr/bin/pmount --umask 000 --noatime -w --sync /dev/${PART} /media/${FS_LABEL}_${PART}
fi
sudo chmod +x /usr/local/bin/automount
reboot

The mount points/folders names will be in the format of /media/PartitionLabel_sdxy. In case a partition has no label, it will just be /media/sdxy.
for example:

/media/My_sdb5

Auto mount USB stick on plug-in without UUID

2018   armbian   pmount   stretch

Device Tree Mainline Linux

Дерево устройств (ДУ) представляет собой структуру данных для описания оборудования. Mainline Linux использует его для активации и настройки драйверов, доступных в ядре.
В Linux есть механизм для определения подключенных устройств – Device Tree. Это список всех устройств подключенных к компьютеру. Ядро подгружает его при старте и настраивает все устройства согласно настройкам в файле.

«Оверлеями» называются частичные, «опциональные» ДУ.
Оверлей состоит из нескольких фрагментов, каждый из которых нацелен на какой-то конкретный нод (и его суб-ноды). Хотя эта концепция выглядит довольно просто, сам синтаксис на первый взгляд может показаться довольно странным.
Вот оверлей включающий пины (PA11,PA12) GPIO при начале загрузки,
использовал драйвер gpio-leds,
создаём файл you-overlay.dts и вставляем код:

/dts-v1/;
/plugin/;

/ {
	compatible = "allwinner,sun8i-h3";

	fragment@0 {
		target = <&pio>;
		__overlay__ {
			gpio_pin: gpio_pin {
				pins = "PA11","PA12";
				function = "gpio_out";
			};
		};
	};

	fragment@1 {
		target-path = "/";
		__overlay__ {
			gpiopull: gpiopull {
				compatible = "gpio-leds";
				pinctrl-names = "default";
				pinctrl-0 = <&gpio_pin>;
				status = "okay";
				gpio_out_11 {
					label = "GPIO PIN_11";
					gpios = <&pio 0 11 0>;  /* PA11 GPIO_ACTIVE_LOW */
				};
				gpio_out_12 {
					label = "GPIO PIN_12";
					gpios = <&pio 0 12 1>;  /* PA12 GPIO_ACTIVE_HI */
				};

			};
		};
	};
};

ставим хидеры ядра,
как поставить описал в начале этого поста: Кнопки на GPIO Mainline Linux OrangePi

Компилируем:

armbian-add-overlay you-overlay.dts
reboot

проверка:

cat /sys/kernel/debug/gpio

если установлен WiringOtherPi ввести команду: gpio readall:

Raspberry Pi:Настройка/Деревья устройств, оверлеи и параметры

I2S slave на mainline ядре OrangePi

Для качественного аудио интерфейса требуется перевести I2S в слэйв-режим и подать сформированные на базе внешнего, стабильного клока, сигналы BCLK и LRCLK.

BCLK (Bit Serial Clock) — тактовые импульсы, по срезам которых происходит распознавание нужных пакетов данных.
LRCK (Left/Right Clock) — сигнал разделения левого и правого каналов – по нему ЦАП распознает, когда данные обрабатывать в левом, а когда в правом канале.
DATA — поток данных левого и правого каналов – то, что потом волшебным образом радует наш слух.
При использовании цифрового транспорта на базе OrangePi с подключением к ЦАП по I2S в слэйв-режиме, качество этого самого транспорта перестаёт иметь определяющее значение для конечного звука и дальше всё зависит от реализации самого ЦАП, усилителя, АС.
Используется патч драйвера I2S автор – Nikkov тема на веге и плата формирователя :
Цифровой транспорт с открытым кодом на NanoPI-Neo*
схема подключения к гребёнке :

собирал armbian на Win10 с VirtualBox + Ubuntu 16.04 x64 Developer-Guide_Build-Preparation

копируем файл:
sunxi-opipc-patch-I2S.patch в директорию /build/patch/kernel/sunxi-next

./compile.sh BOARD=orangepipc BRANCH=next RELEASE=jessie BUILD_DESKTOP=no KERNEL_ONLY=on KERNEL_CONFIGURE=yes

make linux-menuconfig (by buildroot)

Device Drivers
<*> -->Sound card support
<*>  -->Advanced Linux Sound Archtecture
<*>   -->ALSA for Soc audio support
          -->Allwinner Soc Audio support
             <*> Allwinner A10 Codec Support
             <*> Allwinner SUN8I audio codec
             <*> Allwinner sun8i Codec Analog Controls Suppor  
             <*> Allwinner A10 I2S Support
             <M> Allwinner A10 SPDIF Support
             <*> Allwinner sun8i I2S Support

Вот собранный имидж для OrangepiPC Armbian_5.35_Orangepipc_Debian_jessie_next_4.13.16.7z
На Opi:

armbian-config --> System --> Hardware

cat /proc/asound/cards

0 [Codec          ]: H3_Audio_Codec - H3 Audio Codec
                      H3 Audio Codec
 1 [sndsun8ii2sdac ]: snd-sun8i-i2s-d - snd-sun8i-i2s-dac
                      snd-sun8i-i2s-dac
 2 [allwinnerhdmi  ]: allwinner_hdmi - allwinner,hdmi
                      allwinner,hdmi
2017   armbian   I2S   OrangePI PC

I2S Аудио на mainline ядре OrangePi

Включение I2S аудио на armbian для Allwinner H2 & H3 на mainline ядре 4.13.

собирал armbian на Win10 с VirtualBox + Ubuntu 16.04 x64 Developer-Guide_Build-Preparation

./compile.sh BOARD=orangepipc BRANCH=next RELEASE=jessie BUILD_DESKTOP=no KERNEL_ONLY=on KERNEL_CONFIGURE=yes

make linux-menuconfig (by buildroot)

Device Drivers
<*>-->Sound card support
<*> -->Advanced Linux Sound Archtecture
<*>  -->ALSA for Soc audio support
        -->Allwinner Soc Audio support
             <*> Allwinner A10 Codec Support
             <*> Allwinner SUN8I audio codec
             <*> Allwinner sun8i Codec Analog Controls Suppor  
             <*> Allwinner A10 I2S Support
             <M> Allwinner A10 SPDIF Support

На Opi: cat /proc/asound/cards

0 [Codec          ]: H3_Audio_Codec - H3 Audio Codec
                      H3 Audio Codec
 1 [allwinnerhdmi  ]: allwinner_hdmi - allwinner,hdmi
                      allwinner,hdmi

Включение “Line Out”  – линейный выход на Opi (по умолчанию выключен)

amixer -c 0 -q set "Line Out"  100%+ unmute
amixer -c 0 -q set "DAC"  100%+ unmute
speaker-test -twav -c2

ставим headers(нужный пакет ищем после сборки имиджа в build/output/debs)
в моём случае:

dpkg -i linux-headers-next-sunxi_5.35_armhf.deb

Get the source & Build:

git clone https://github.com/ua3nbw-cf/ak4554.git
cd ak4554
make all install
armbian-add-overlay sun8i-h3-I2S.dts
reboot

в файле /boot/armbianEnv.txt появится строка:

user_overlays=sun8i-h3-I2S
проверка:

root@orangepipc:~# cat /proc/asound/cards
 0 [Codec          ]: H3_Audio_Codec - H3 Audio Codec
                      H3 Audio Codec
 1 [i2S            ]: i2S - i2S
                      i2S
 2 [allwinnerhdmi  ]: allwinner_hdmi - allwinner,hdmi
                      allwinner,hdmi
root@orangepipc:~# speaker-test -twav -c2 -Dhw:1
root@orangepipc:~# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Codec [H3 Audio Codec], device 0: CDC PCM Codec-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: i2S [i2S], device 0: 1c22000.i2s-ak4554-hifi ak4554-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: allwinnerhdmi [allwinner,hdmi], device 0: 1c22800.i2s-i2s-hifi i2s-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Ну и запись по I2S

root@orangepipc:~# arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: Codec [H3 Audio Codec], device 0: CDC PCM Codec-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: i2S [i2S], device 0: 1c22000.i2s-ak4554-hifi ak4554-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0
2017   armbian   I2S   OrangePI PC

Real Time Kernel and LinuxCNC на Orangepi

Real Time Kernel – система должна гарантировать время реакции ,чтобы уменьшить задержки, количество процессов необходимо свести к минимуму. Для этого нужно не только убрать все лишние программы и отключить все неиспользуемые демоны, но и пересобрать ядро, оставив лишь действительно необходимый функционал.
LinuxCNC – универсальная программа, которая может управлять фрезерно-гравировальным станком, лазерной и плазменной резкой, а так же любыми другими станками.

собирал armbian на Win10 с VirtualBox + Ubuntu 16.04 x64 Developer-Guide_Build-Preparation

RT патч для версии ядра 4.13 RT патч

Собранный имидж с RT патчем для OrangePi-PC Armbian_5.34_Orangepipc_Debian_jessie_next_4.13.8-rt1_desktop

Сборка LinuxCNC на этом имидже :

sudo apt install cython uuid-runtime libtool  libgl1-mesa-dev libglu1-mesa-dev libudev-dev intltool python-pip libjansson-dev liburiparser-dev libwebsockets-dev uuid-dev libavahi-client-dev libprotobuf-dev protobuf-compiler libmodbus-dev libglib2.0-dev libgtk2.0-dev tcl-dev tk-dev libreadline-gplv2-dev gettext python-tk -y libboost-python-dev libboost-serialization-dev libboost-thread-dev bwidget libtk-img tclx  libxaw7-dev libc6  libgcc1   libudev1  libuuid1  libzmq3  yapps2-runtime

собираем от user (не от root`a)

git clone git://github.com/linuxcnc/linuxcnc.git linuxcnc-dev
cd linuxcnc-dev/src
./autogen.sh 
./configure --with-realtime=uspace
make
sudo make setuid

запуск теста:

~/linuxcnc-dev/scripts/latency-test

Тема на форуме cnc-club.ru LinuxCNC + Orange Pi

OrangePi, CoovaChilli and Freeradius for a Wifi Hotspot with captive portal

Как работает Captive Portal
Все пользователи, которые хотят подключиться к публичной Wi-Fi-сети и выйти в интернет, вначале проходят через шлюз, который представляет собой комп с несколькими сетевыми интерфейсами. Шлюз действует как маршрутизатор и брандмауэр, а для возможности авторизации пользователя при помощи браузера он содержит еще и веб-сервер. Для аутентификации клиентов может использоваться внутренняя база данных или внешний RADIUS-сервер. Все пакеты от «неавторизованных» пользователей помечаются на брандмауэре, и посетитель переправляется на специальную веб-страницу (Captive Portal), где он может ознакомиться с условиями подключения и ввести логин/пароль (либо код доступа). После аутентификации пользователя производится идентификация компьютера, за которым он работает, его МАС- и IP-адреса заносятся в белый список брандмауэра. В самом простом случае пользователь может вообще не проходить аутентификацию, Captive Portal автоматически получает IP- и MAC-адреса компьютера, которые сразу подставляются в правилах брандмауэра. В последующем все пакеты проходят через маршрутизатор без ограничений. Дополнительно, в зависимости от роли, могут устанавливаться ограничения по скорости, времени, трафику или посещаемым ресурсам.

Скрипт для автоматической установки ChoovaChilli , RADIUS, LAMP и точки доступа WIFI

wget https://raw.githubusercontent.com/ua3nbw/opihotspot/master/opihotspot_debian.sh
chmod +x opihotspot_debian.sh
./opihotspot_debian.sh

Тестировал на Armbian_5.25_Orangepipc_Debian_jessie_default_3.4.113 и на Armbian_5.33_Orangepipc_Debian_jessie_next_4.13.4
скрипт в процессе установки может потребовать перезагрузить систему, лог можно наблюдать открыв в другом терминале :

sudo tail -f /var/log/opihotspot.log

phpmyadmin поднимется по адресу : http://Ваш_ip_адрес//phpmyadmin
логин: root
пароль: orangepi
веб интерфейс для FreeRadius поднимется по адресу : http://Ваш_ip_адрес/daloradius
логин: administrator
пароль: radius
для тестов заведён пользователь: test

после подключения к точке доступа: SSID=OPIhotspot
Username: test Password: test

Кусок блокнота(10)

Посмотреть занимаемое папками место в Linux можно…

Введя всего одну команду

du -sh /путь к нужной папке/*

Например:

du -sh /* — покажет размер всех папок внутри корневой

Найти 10 самых больших фалов, начиная с ‘/’ (корня)

find / -mount -type f -ls 2> /dev/null | sort -rnk7 | head -10 | awk '{printf "%10d MB\t%s\n",($7/1024)/1024,$NF}'

Слова насилуют разум, мешая рассуждению, увлекая людей бесчисленными противоречиями и неверными заключениями.
Бэкон


Как загрузить файл на удаленный FTP из командной строки
Проще всего с помощью curl:

curl -T my-local-file.txt ftp://ftp.example.com --user user:secret

Эта команда загрузит файл в корневую директорию на удаленном FTP сервере.


OpenDNS – альтернатива гугловским DNS серверам
Все мы привыкли к гугловским DNS – 8.8.8.8 и 8.8.4.4. Легко запомнить и использовать.
Есть альтернатива – OpenDNS. Это проект, ориентированный на секьюрити. Более подробно о нём можно прочитать на официальном сайте . Здесь же оставлю адреса DNS-серверов для быстрого “вспоминания”:
208.67.222.222
208.67.220.220


Как сделать PDF документ из файлов картинок .jpg в Linux
Утилита convert содержится в пакете ImageMagick. Если его еще нет в системе, то устанавливаем.
Для Debian/Ubuntu:

apt install imagemagick
convert *.jpg document.pdf

Ждем некоторое время пока команда выполнится. Всё, PDF документ готов.


Сегодня Фредди Меркьюри исполнился бы 71 год. Живое радио Фредди Меркьюри


Ctrl + ↓ Ранее