59 заметок с тегом

OrangePI PC

I2S Аудио на mainline ядре Allwinner H2 & H3

Включение 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

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
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
root@orangepipc:~#
22 ноября   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 патчем 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

22 октября   armbian   LinuxCNC   OrangePI PC   Real Time Kernel

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

6 октября   Apache   armbian   ChoovaChilli   MySQL   OrangePI PC   PHP   Radius

Кусок блокнота(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 год. Живое радио Фредди Меркьюри


5 сентября   armbian   OrangePI PC   блокнот

Принцип «бритвы Оккама» . Подключаем вентилятор

То есть из нескольких решений выбирай простейшее.
Для включения вентилятора можно использовать полевик или биполярник:
Подключаем вентилятор к GPIO с сервисами блекджеком
Работа с gpio,регулировка оборотов вентилятора.

По выше приведенным ссылкам, требуется паяльник , чтоб подключить транзистор для управления вентилятором. Если включили паяльник, то можно добавить p-n-p транзистор и терморезистор.
Нам не нужны OPi GPIO и ковыряние в *.fex
Предлагаю подключение вентилятора

терморезистор 4-10k (использовал встроенный от аккумулятора шуруповерта ), mosfet любой, p-n-p транзистор и диод любой
терморезистор приклеиваем к процессору или к радиатору (если есть )

Для тестирования запустим Stress Tests with cpuburn-a7

git clone https://github.com/ssvb/cpuburn-arm.git
cd cpuburn-arm
gcc -o cpuburn-a7 cpuburn-a7.S
./cpuburn-a7

в другом терминале:

armbianmonitor -m

Возникает закономерный вопрос, а, собственно, почему надо делать именно так, а не иначе? Да, «бритва» Оккама позволяет экономить усилия, но разве она гарантирует верный результат? Грубо говоря, вам, что надо: проще или правильней?
В  неявном виде «бритва» Оккама отрицается в действительно серьезной науке.
Но, «не следует множить сущее без необходимости»
(либо «не следует привлекать новые сущности без крайней на то необходимости»). Этот принцип формирует принцип бережливости, или закон экономии.

2017   armbian   OrangePI PC

Управление LMS on the OrangePI при помощи энкодера

Дополнение для Logitech Media Server (LMS) on the OrangePI PC

Регулирует громкость и при нажатии кнопки энкодера включает паузу.
Энкодер с кнопкой удалось подключить без использования подтягивающих резисторов, работает на прерываниях очень стабильно, cpu вообще не грузит, загрузка памяти 0.1%, наводки на монтаж отсутствуют.
Проверял с проводами к энкодеру в 20 см.

Тестировал на ARMBIAN 5.31 stable Debian GNU/Linux 8 (jessie) 3.4.113-sun8i

root@orangepipc:~# uname -a
Linux orangepipc 3.4.113-sun8i #18 SMP PREEMPT Thu Jun 15 02:16:06 CEST 2017 armv7l GNU/Linux

Используем библиотеку WiringOtherPi
ставим WiringOtherPi :

git clone https://github.com/lanefu/WiringOtherPi.git
cd WiringOtherPi
sudo ./build
cd ..

в основе код drogonа, автора Wiring Pi с форума https://www.raspberrypi.org/forums/viewtopic.php?f=33&t=125225

#include <stdio.h>
#include <errno.h>
#include <wiringPi.h>

#define   PIN_A   8
#define   PIN_B   9
#define BUTTON_PIN 7

#define   DEBOUNCE   5

static volatile int counter ;
// -------------------------------------------------------------------------
// the event counter
volatile int eventCounter = 0;

void myInterrupt(void) {
  eventCounter++;
}

// -------------------------------------------------------------------------
void encoder (void)
{
  static unsigned int debounce = 0 ;

// If PIN_A is high then ignore it
//   This may be due to bouncing, or a bug/feature of the edge detect

  if (digitalRead (PIN_A) == HIGH) return ;

// Ignore multiple interrupts inside our debounce time

  if (millis () < debounce) return ;
  if (digitalRead (PIN_B) == LOW)   // Anti-clockwise
    --counter ;
  else
    ++counter ;
  debounce = millis () + DEBOUNCE ;
}

int main ()
{
  int last ;
  last = counter = 0 ;
  wiringPiSetup () ;
    pinMode(PIN_A, INPUT);
    pinMode(PIN_B, INPUT);
    pullUpDnControl(PIN_A, PUD_UP);
    pullUpDnControl(PIN_B, PUD_UP);
// -------------------------------------------------------------------------
  pinMode(BUTTON_PIN, INPUT);
  pullUpDnControl (BUTTON_PIN, PUD_UP) ;
  wiringPiISR (BUTTON_PIN, INT_EDGE_FALLING, myInterrupt) ;
 // -------------------------------------------------------------------------

  wiringPiISR (PIN_A, INT_EDGE_FALLING, encoder) ;

  printf ("\nRunning... \n") ;

  for (;;)
  {
// -------------------------------------------------------------------------
    if (eventCounter != 0) system("curl http://192.168.0.3:9000/status.html?p0=pause");
    eventCounter = 0;
// -------------------------------------------------------------------------
    if (counter != last)
    {
    if (counter > last) system("curl  'http://192.168.0.3:9000/status.html?p0=mixer&p1=volume&p2=%2B5'");
    if (counter < last) system("curl  'http://192.168.0.3:9000/status.html?p0=mixer&p1=volume&p2=-5'");
    last = counter ;
    }
// -------------------------------------------------------------------------
    delay( 100 ); // wait 0.1 second
// -------------------------------------------------------------------------
    
  }

  return 0 ;
}

Для компиляции этого кода скачаем исходник:

wget https://raw.githubusercontent.com/ua3nbw-cf/gpiokey/master/encoder.c

меняем в коде 192.168.0.3 на свой IP адрес и компилируем:

gcc -o encoder encoder.c -lpthread -lwiringPi -lwiringPiDev

запуск

./encoder
2017   armbian   GPIO   Logitech Media Server   OrangePI PC

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

but standart online resize work.

first create backup image then:

sudo cfdisk /dev/mmcblk0

delete partition and re-create (this can be risky, parttition mist start from same sector — in this case 2048), save and then:

sudo resize2fs /dev/mmcblk0p1

if resize2fs can’t resize, reboot and run resize2fs again

then you can check disk at next boot:

sudo touch /forcefsck

Чтобы сделать из netcat http сервер для одного файла:
на клиенте достаточно в браузере набрать http://Ваш_IP:8080

#!/bin/bash
while true
do 
  (echo -e "HTTP/1.1 200 OK\nContent-Type: text/plain\nContent-Length: $(wc -c < Auto_IPTV.m3u)\n\n"; cat Auto_IPTV.m3u) | nc -l -p 8080 > /dev/null
done

Для просмотра информации о погоде в текущем городе или с указанием города (и
при необходимости страны через запятую) для просмотра информации в другом городе:

curl wttr.in

Парсинг csv на bash

#!/bin/bash
URLS=""
HREF=""
INPUT=1.csv
OLDIFS="$IFS"
ICON="fa fa-bullhorn"
IFS=';'
rm build/1.list
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
while read NAME PERIOD PRICE_1 TSENA colummnt BEGINBLOCK ENDBLOCK
do
	echo "Наименование : $NAME "
	echo "Длительность : $PERIOD часов"
	echo "Цена1 : $PRICE_1 рублей"
	echo "Цена2 : $TSENA"
	echo "Ячейка : $colummnt"
	echo "Начало_блока : $BEGINBLOCK"
	echo "Конец_блока : $ENDBLOCK"
done < $INPUT
IFS=$OLDIFS
leafpad build/1.list
2017   armbian   OrangePI PC   блокнот

LMS on the OrangePI (Armbian Ubuntu xenial)

Logitech Media Server (LMS) Ставил на Armbian_5.25_Orangepipc_Ubuntu_xenial_default_3.4.113_desktop

apt-get update && apt-get upgrade -y

Ночные сборки Logitech Media Server: Debian Installer Package (ARM)
http://downloads.slimdevices.com/nightly/?ver=7.9

latest_lms=$(wget -q -O - "http://www.mysqueezebox.com/update/?version=7.9.1&revision=1&geturl=1&os=deb")
mkdir -p /tmp/sources && cd /tmp/sources
wget $latest_lms
lms_deb=$(echo $latest_lms|cut -d "/" -f8)
dpkg -i $lms_deb
service logitechmediaserver stop
wget http://ua3nbw.ru/files/deb/CPAN.tar.gz
tar -xzvf CPAN.tar.gz -C /usr/share/squeezeboxserver

в файл /etc/rc.local вставляем строку:


chown -R squeezeboxserver:nogroup /var/log/squeezeboxserver


запуск сервера:

chown -R squeezeboxserver:nogroup /var/log/squeezeboxserver
service logitechmediaserver start

рулим сервером: http://Ip_вашей_OrPI:9000/
squeezelite для Ubuntu
Аудио плеер squeezelite с дополнительными опциями.: LINUX ALSA EVENTFD RESAMPLE FFMPEG VISEXPORT IR GPIO DSD LINKALL

поддержка ffmpeg, lirc, DSD over PCM (DoP).
встроена опция -S Absolute path to script to launch on power commands from LMS
для вкл/выкл плеера в LMS. Что-бы включать выключать усилитель мощности.
по умолчанию используется 28 нога гребёнки.

wget http://ua3nbw.ru/files/deb/squeezelite_ubuntu.tar.gz
tar xzvf squeezelite_ubuntu.tar.gz
mv squeezelite /usr/bin
mv gpiopower.sh /usr/local/bin
apt install libflac8 libmad0 libvorbisfile3 libfaad2 libmpg123-0 libavcodec-ffmpeg56 libavformat-ffmpeg56

запуск плеера с опцией S

squeezelite -o hw:CARD=audiocodec,DEV=0 -S /usr/local/bin/gpiopower.sh

редактируя скрипт gpiopower.sh , можно менять GPIO_OUT.
логическая единица на этом gpio — сигнал выключения усилителя.

2017   armbian   Logitech Media Server   OrangePI PC

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

Мультик по телнету

apt install telnet
telnet towel.blinkenlights.nl

Дата сборки имиджа вашего armbian

cat /etc/armbian.txt  | grep Build

данная команда выводит в консоль загрузку процессора, памяти, pid, и название десяти самых потребляющих ресурсы процессов

echo '%CPU %MEM   PID COMMAND' && ps hgaxo %cpu,%mem,pid,comm | sort -nrk1 | head -n 10

Чиним sources.list в любой Ubuntu

1.Заходим на сайт repogen.simplylinux.ch;
2.Выбираем страну (надо только для выбора сервера, поэтому можно и не выбирать);
3.Выбираем свой дистрибутив (а вот это надо);
4.Ставим галочки на все, что хотим. Тут рекомендую загалить все, что не «3rd Parties Repos»;
5.Посмотреть на список «3rd Parties Repos», и выбрать свои любимые софтины;
6.Нажать на пимпу «Generate List».

Вам будет сгенерирован файл sources.list для вашего дистриба со всеми необходимыми репами.
для дистрибутивов Debian https://debgen.simplylinux.ch/


If someone also does not want to create a secondary account just paste this in the console.
more information at /etc/profile.d/check_first_login.sh

rm -f "$HOME/.not_logged_in_yet"

.» Чем больше у меня проблем, тем лучше мои песни «
— Фредди Меркьюри

Свежие посты сместили «живое радио» Фредди Меркьюри

2017   armbian   OrangePI PC   блокнот

Kodi 18 alpha and mpv with Hardware Decoding

Проектом MPV ведётся разработка открытого видеоплеера, построенного на основе ответвления от кодовой базы MPlayer2.
Тестировал на OrangePi PC с armbian «Ubuntu Xenial Legacy 3.4.113 Desktop», карта 4Gb.
прямая ссылка на имидж armbian для OrangePi PC https://dl.armbian.com/orangepipc/Ubuntu_xenial_default_desktop.7z
после установки системы проверим встроенный плеер mpv, в  PyTTY вводим:

DISPLAY=:0 mpv --vo=vdpau --hwdec=vdpau --hwdec-codecs=all --fs  http://ow.ly/10tB0C

Наблюдаем на мониторе, что Big Buck Bunny бегает шустро и в другом терминале htop не зашкаливает нагрузка на ядра процессора, значит Hardware Decoding работает и можно прикрутить MPV в качестве внешнего плеера к Kodi.

apt-get update && apt-get upgrade -y
apt install libpcrecpp0v5 libtag1v5-vanilla libtinyxml2.6.2v5 libmicrohttpd10 libssh-4 libva-drm1

Ставим драйвер mali с поддержкой фреймбуфера

wget http://ua3nbw.ru/files/deb/libmali_f.tar.gz
tar -xzvf libmali_f.tar.gz -C /

и пакет Kodi 18 alfa, с предыдущего поста Kodi 18 alfa на OrangePI PC 

wget http://ua3nbw.ru/files/deb/kodi_201704072156-git-1_armhf.deb
dpkg -i kodi_201704072156-git-1_armhf.deb
reboot

тут интересный момент, даже два, у меня иногда OrangePiPC в этот момент команду reboot воспринимает, как poweroff.
очевидное решение передёрнуть питание и второй момент — коди не запускается, если не инсталлировать какой-нибудь пакет, ну эти пакеты нам необходимы:

apt -y install mesa-utils libx11-dev libxext-dev xutils-dev libdrm-dev x11proto-xf86dri-dev libxfixes-dev libcurl3 x11proto-dri2-dev xorg-dev xutils-dev libltdl-dev libtool

ну и запуск kodi:

DISPLAY=:0 kodi

Выходим из kodi: в терминале CTR+C
Быстрая проверка :

DISPLAY=:0 kodi http://ow.ly/10tB0C

Смотрим загрузку CPU и растущую температуру и жмакаем CTR+C, а то перегреется.

Тут про подключение внешнего плеера : External players
для теста создаю файл playercorefactory.xml в /root/.kodi/userdata :

<playercorefactory>
 <players>
  <player name="mpv" type="ExternalPlayer" video="true">
   <filename>mpv</filename>
   <args>--vo=vdpau --hwdec=vdpau --hwdec-codecs=all --fs --sub-auto=all</args>
   <hidexbmc>false</hidexbmc>
   <hideconsole>false</hideconsole>
   <warpcursor>none</warpcursor>
  </player>
 </players>
 <rules action="prepend">
  <rule video="true" player="mpv"/>
 </rules>
</playercorefactory>

перезагружаем kodi и

DISPLAY=:0 kodi http://ow.ly/10tB0C

ну и утки взлетают (файл можно найти в инете)
Ducks.Take.Off.1080p.QHD.CRF25.x264-CtrlHD.mkv

Profit!
Запуск kodi из терминала:

DISPLAY=:0 kodi

Да, коди запускает видео with Hardware Decoding на внешнем плеере, но рулить внешним плеером, пока не удаётся (фокус не передаётся на внешний плеер ), выслушаю ваши мнения в комментариях , возможно решение на поверхности. Спасибо.

2017   armbian   MPV   OrangePI PC
Ctrl + ↓ Ранее