Cubieboard2 huis

IP: 192.168.5.248 CPU: 2x1GHz, RAM: 1GB, LAN: 1Gb

Functies:

  • Data schijf voor video
  • MQTT server
  • I/O board uitlezen met GPIO_mqtt.py via MQTT

Aangesloten:

  • Wordt gevoed via Cubie 12V-5V converter naar USB
  • 120GB SSD schijf via SATA
  • JeeLink 868MHz met JeeLink_mqtt.py
  • UPS

Verouderd: Cubieboard2 interfaces Om GPIO uit te lezen van de Cubieboard, is gebruik gemaakt van WiringPi. Deze heb ik aangepast voor de Cubieboard2. Maar dit is niet meer nodig, het wordt nu gedaan met een een generieke wiringPi-python module en MQTT.

Cubieboard debian installeren op Cubieboard2

Keuze van Debian distro

Als eerste, waarom de Debian versie van Igor.

Opmerkingen bij Cubian is:

  • dat de documentatie goed is: github.com/cubieplayer/Cubian en bij Domotiga.nl
  • de installatie scripts goed zijn (om naar SATA over te schakelen bv)
  • Er zit een fout bij Cubian update
  • Cubian is Debian V7-Wheezy en kan niet naar V8-Jessie geüpgraded worden. De packages voor Cubian staan op: http://packages.cubian.org/dists/
  • Upgraden naar Jessie geeft compatibiliteitsproblemen met de Kernel en udev. Udev mist bepaalde opties in de kernel.

Opmerkingen bij igorpecovnik’s CTDebian_2.4_wheezy is:

  • Er is een Jessie (Debian V8) versie van.
  • De ontwikkeling lijkt door te gaan, van Cubian lijkt het stil te staan.
  • de installatie scripts goed zijn (om naar SATA over te schakelen bv)
  • Linux update proces is beter Na eerst ontwikkeling gedaan te hebben met Cubian, ben ik later overschakeld naar Debian van Igor

Hardware Specs CubieBoard2

Power connector: 4.0mm (external diameter) x 1.7mm barrel, Adapter: 5V-2A (1A zonder SATA)

  • AllWinnerTech SOC A20?ARM Cortex?-A7 Dual-Core ARM Mali400 MP2 Complies with OpenGL ES 2.0/1.1
  • 1GB DDR3 480MHz
  • 3.4GB internal NAND flash, up to 64GB on SD slot, up to 2T on 2.5 SATA disk
  • 5VDC input 2A or USB otg input
  • 1x 10100 ethernet, support usb wifi
  • 2x USB 2.0 HOST, 1x mini USB 2.0 OTG, 1x micro sd
  • 1x HDMI 1080P display output
  • 1x IR, 1x line in, 1x line out
  • 96 extend pin interface, including I2C, SPI, RGB/LVDS, CSI/TS, FM-IN, ADC, CVBS, VGA, SPDIF-OUT, R-TP, and more

Status huidige Cubieboard installatie

De file N:\Projecten\HuisAutomatisering\Backup\Cubieboard2\Firmware\Cubieboard-installed 30-12-2018-sdcard-boot-only.img bevat een volledig geconfigureerde server. Hier zit in:

  • Alle verhuisde services naar RPi-HomeLogic server zijn uitgeschakeld: jeelink, upsread, telegram/home_logic
  • Als de SATA drive problemen geeft, wordt er toch doorgestart (fstab: /dev/sda1: defaults,nofail)
  • Het VGA scherm is weer leesbaar op resolutie: 1280x1024 ipv 1920x1080
  • CB2-Live wordt met de SATA disk gebruikt als fileserver
  • Reserve serverboard is ingezet, omdat in de oude een stukje plastic zit/zat waardoor de powerplug er niet in kon.
  • Check_MK client is toegevoegd

SD kaart volume vergroten na wegschrijven image

https://elinux.org/Beagleboard:Expanding_File_System_Partition_On_A_microSD

sudo fdisk /dev/mmcblk0
   #Verwijder oude partitie en maak een nieuwe grote aan: p, d, n, p, 3x<enter>
   #Bekijk nieuwe partitie: p
   #Schrijf deze weg: w
   #Bij foutmelding als de / was gemount,
sudo reboot

#Na reboot
resize2fs /dev/mmcblk0p1

Installatie van Debian

Hieronder staan de installatie stappen voor een schoon systeem.

Stap 1: Downloaden

->Downloaden van image op www.armbian.com/cubieboard-2 (oude link: www.igorpecovnik.com) Ik gebruik nu Cubieboard2_Debian_3.8_wheezy_3.4.107

Stap 2: Image naar uSD kaart schrijven

De bijgeleverd imagewriter.exe werkt niet (ziet de SD kaart niet), dus gebruik ik Win32DiskImager ->Schrijf de Cubieboard2_Debian_3.8_wheezy_3.4.107.raw file naar de SD disk met Win32DiskImager

Stap 3: Inloggen via SSH

->De image start standaard op met DHCP, dus het IP nr opzoeken met Advanced IP Scanner ->Login met Putty op dit IP nr met user root wachtwoord 1234 ->Het wachtwoord moet direct gewijzigd worden

Stap 4: Configureren

Installeren van vim

apt-get install vim

Wijzig IP adres van DHCP naar statisch

# vi /etc/network/interfaces

auto eth0
iface eth0 inet static
address 192.168.5.246
netmask 255.255.255.0
gateway 192.168.5.1

# service networking restart

Login weer in met Putty op het nieuwe IP adres

Public key toevoegen aan .ssh om automatisch in te loggen Zie handleiding in Evernote: SSH / Putty autologin en KeePass

Aliassen toevoegen Zet in /root/bash.bashrc:

# vi /etc/bash.bashrc

alias pg='ps -ef|grep'
alias vi='vim'
alias ll='ls -l --color'
alias ls='ls --color'

Board ID tonen bij SSH login Foutje in het setten van de armhwinfo. Er wordt Micro getoond ipv Cubieboard2 Dit is te wijzigen in:

# vi [/etc/init.d/armhwinfo](file:///C:/Users/Arjan/Dropbox/ZimNotes/etc/init.d/armhwinfo)

Op regel 69
elif [ "$MEMTOTAL" = 1 ]; then
ID=$HOSTNAME #AW!! was "Micro"
else
ID="Cubieboard"

VGA activeren Bron: github.com/cubieplayer/Cubian/wiki/VGA-output

Default wordt de /boot/bin/cubieboard2.bin file gepakt bij installatie. Deze wordt dan /boot/script.bin, wijzig deze file als volgt:

# cp script.bin script.bin.org

# bin2fex script.bin script.fex

# vi script.fex

[disp_init]
disp_init_enable = 1
disp_mode = 0
screen0_output_type = 4
screen0_output_mode = 4
screen1_output_type = 2
screen1_output_mode = 14
fb0_framebuffer_num = 2
fb0_format = 10
fb0_pixel_sequence = 0
fb0_scaler_mode_enable = 1
fb1_framebuffer_num = 2
fb1_format = 10
fb1_pixel_sequence = 0
fb1_scaler_mode_enable = 1

# fex2bin /boot/script.fex /boot/script.bin


->Wijzig scherm resolutie in /boot/boot.cmd

# vi /boot/boot.cmd

setenv bootargs console=tty1 root=/dev/mmcblk0p1 rootwait rootfstype=ext4 sunxi_ve_mem_reserve=0 sunxi_g2d_mem_reserve=0 sunxi_no_mali_mem_reserve sunxi_fb_mem_reserve=16 hdmi.audio=EDID:0 disp.screen0_output_mode=EDID:1280x768p60 panic=10 consoleblank=0 enforcing=0 loglevel=1

Met Systemd:
setenv bootargs ¨init=/bin/systemd console=tty1 root=/dev/mmcblk0p1 rootwait rootfstype=ext4 sunxi_ve_mem_reserve=0 sunxi_g2d_mem_reserve=0 sunxi_no_mali_mem_reserve sunxi_fb_mem_reserve=16 hdmi.audio=EDID:0 disp.screen0_output_mode=EDID:1280x768p60 panic=10 consoleblank=0 enforcing=0 loglevel=1¨

En converteer deze daarna naar /boot/boot.scr

# cd /boot

# mkimage -C none -A arm -T script -d boot.cmd boot.scr

I2C bus activeren (/dev/i2c-1 activeren)

# vi /boot/script.fex
[twi1_para]
twi1_used = 1
twi1_scl = port:PB18<2><default><default><default>
twi1_sda = port:PB19<2><default><default><default>

# fex2bin /boot/script.fex /boot/script.bin
# apt-get install i2c-tools
# i2cdetect -y -r 1

Gebruik van HDD, SSD of uSD

Resizen naar grotere SD kaart van 2GB backup img naar grotere SD kaart

$ fdisk /dev/mmcblk0
d ENTER # delete
1 ENTER # partition 1 which is the only one
n ENTER # create new
p ENTER # primary
ENTER # default number is 1
ENTER # default start
ENTER # default end
w ENTER # write to disk

$ reboot

En na de reboot

$ resize2fs /dev/mmcblk0p1

HDD/SSD initialiseren

In het geval dat de SSD schijf nog niet geïnitialiseerd is.

Bereken grootte swap SSD: Totaal: 234441647 sectoren Swap voor 1GB geheugen: 1048576 sectoren Datapartitie: 234441647-1048576=233393071

Bereken grootte swap HDD 1TB: Totaal: 1953525168 Swap voor 1GB geheugen: 1048576 sectoren Datapartitie: 1953525168-1048576=1952476592

Grootte uSD Sandisk 64GB Totaal: 63864569856 sectoren 1% kleiner voor het geval dat de kaart naar een iets kleinere kaart gecloned wordt. Nieuw: 63225924157 sectoren

# fdisk /dev/sda

Aanmaken data partitie

- n - new
- p - primary partition
- 1 - partition nr
- default first sector
- 233393071

Aanmaken swap

- n - new
- p - primary partition
- 2 - partition nr
- default first sector
- default last sector (voor swap)
- t - partition type
- 2 - partition nr
- 82 - Linux swap

Controleren en wegschrijven van partities:

- p - check de partitie tabel
- w - schrijf het weg
# mkfs.ext4 /dev/sda1
# mkswap /dev/sda2
# swapon /dev/sda2

Check resultaat met:

# free 

Stap 5: Installeren van Debian in NAND & SATA

Met onderstaande instructies wordt het volgende gedaan en bereikt: 1-uSD installatie naar NAND 2-uSD installatie naar SATA 3-Configuratie, zodat eerst via NAND1 gestart wordt en daarna naar SATA

Hiermee is de uSD kaart niet meer nodig. Als er via uSD opgestart wordt, dan staat /boot op de uSD kaart. Als er via NAND opgestart wordt, dan staat /boot in de NAND

Kortom wat er bereikt wordt is dat er via NAND1 (/boot) opgestart wordt en daarna wordt ipv NAND2 de SATA (sda1) opgestart. Met het uitschakelen van de uSD kaart, wordt voorkomen dat door veroudering en stof de uSD connector problemen geeft en het board niet meer opstart.

1-uSD installatie naar NAND Eerste keer draaien van install script naar NAND

./nand-sata-install

Let op! Het script doet geen fdisk van /dev/nand. Als dit nodig is, maak dan 2 partities in /dev/nand

  • /dev/nand1: Primair: +64M
  • /dev/nand2: Primair: rest

->uSD kaart eruit halen

Voor de tweede keer draaien van install script naar NAND

./nand-sata-install

2-uSD installatie naar SATA Daarna zelfde script draaien voor de SATA disk, maar eerst een bestand verwijderen, anders wordt er weer een automatische NAND installatie gedaan:

# rm /root/test_textbox
# rm /root/nand_mbr.backup

Nu maar 1 maar draaien van install script naar SATA

./nand-sata-install

->uSD kaart eruit halen

3-Configuratie, zodat eerst via NAND1 gestart wordt en daarna naar SATA Na de reboot is het board opgestart via NAND

# mkdir -p /root/sdcard
# mount /dev/mmcblk0p1 /root/sdcard/
# mkdir -p /root/nand
# mkdir -p /root/nand2
# mount /dev/nand1 /root/nand/
# mount /dev/nand2 /root/nand2/

Wijzig nu de uEnv.txt file, om via de NAND de SATA schijf te booten

# vi /root/nand/uEnv.txt
#nand_root=/dev/nand2 rootwait

Herstart nu het board

reboot

Let op! Hierna werkt de uSD kaart niet meer stand-alone. Deze zal zoeken naar de SATA drive.

Nand directory in /root

# vi /etc/fstab
...
/dev/nand1 /root/nand vfat    defaults  0       0 

Diverse setttings

Als SATA een SSD disk is

Controleer wat de gebruikte scheduler is:

# cat /sys/block/sda/queue/scheduler
[noop] deadline cfq

Anders wijzig de /etc/sysfs.conf and set block/sda/queue/scheduler van cfq naar noop

Disable Bluetooth en Wifi drivers

Disable startup of bluetooth

update-rc.d bluetooth remove

Comment out the following kernel modules, to prevent loading when starting up:

# vi /etc/modules
hci_uart
gpio_sunxi
#bt_gpio   -> bluetooth
#wifi_gpio -> wifi
#rfcomm   -> bluetooth
#hidp        ->bluetooth
lirc_gpio
sunxi_lirc
#bcmdhd   -> wifi
sunxi_ss 

Systemwide Crontab

vi /etc/crontab
    # m h dom mon dow user  command
    17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
    25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
    47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
    52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
    #
    54 *    * * *   linaro  /home/linaro/scripts/periodically/duckdns.sh  > /dev/null 2>&1
    0  7    * * *   linaro  /home/linaro/scripts/periodically/motionVideoBackup.sh  > /dev/null 2>&1

systemctl restart cron.service

Boot medium weergeven bij inloggen

Voor NAND voeg toe aan einde:

# vi /root/nand2/etc/bash.bashrc
echo Started via NAND

Voor SATA  voeg toe aan einde:

# vi /etc/bash.bashrc
echo Started via SATA

Alter/Downclock CPU frequency

Eventueel is de CPU frequency in te stellen

vi /etc/init.d/cpufrequtils

change MAX_SPEED=“1200000” to MAX_SPEED=“960000”

service cpufrequtils restart

OnBoardLeds: http://linux-sunxi.org/Cubieboard/Programming/StatusLEDs 1-Wire: http://linux-sunxi.org/1-Wire I2C: http://linux-sunxi.org/I2Cdev

In /root/nand of /dev/nand1 staat de script.bin, waarin de definities staan. Script.bin is binair, maar kan als volgt gelezen worden als script.fex file:

# bin2fex script.bin script.fex
# fex2bin script.fex script.bin

[gpio_para]
gpio_used = 1
gpio_num = 2
gpio_pin_1 = port:PH20<1><default><default><1>
gpio_pin_2 = port:PH21<1><default><default><1>

Onboard led configuration (script.bin/script.fex)

Original configuration

Green led -> always on Blue led -> board heartbeat

[leds_para]
leds_used = 1
leds_num = 2
leds_pin_1 = port:PH20<1><default><default><0>
leds_name_1 = "green:ph20:led1"
leds_default_1 = 1
leds_pin_2 = port:PH21<1><default><default><0>
leds_name_2 = "blue:ph21:led2"
leds_default_2 = 0
leds_trigger_2 = "heartbeat"

Changed configuration

Green led -> “disk-activity” (SATA and/or USB disk) Blue led -> board heartbeat

[leds_para]
leds_used = 1
leds_num = 2
leds_pin_1 = port:PH20<1><default><default><0>
leds_name_1 = "green:ph20:led1"
leds_default_1 = 0
leds_trigger_1 = "disk-activity"
leds_pin_2 = port:PH21<1><default><default><0>
leds_name_2 = "blue:ph21:led2"
leds_default_2 = 0
leds_trigger_2 = "heartbeat"

Wijzig hostname

# vi /etc/hostname
cb2-live

# vi /etc/hosts

127.0.0.1   localhost cb2-live
::1         localhost cb2-live ip6-localhost ip6-loopback
192.168.5.248   domoticz
192.168.5.249   rpi-video1
192.168.5.250   rpi-video2

Linaro gebruiker

# adduser linaro
# adduser linaro sudo
# visudo
...Aan het einde
*linaro ALL=(ALL) NOPASSWD: ALL*

Locales

dpkg-reconfigure locales
Selecteer nl_NL.UTF8
En als default: en_US.UTF-8

Tijdzone

# dpkg-reconfigure tzdata

Samba drive

Installeer samba:

# apt-get install samba

Maak linaro gebruiker aan voor Samba

# smbpasswd -a linaro

Geef toegang als linaro en root

# vi /etc/samba/smb.conf

[global]
#dos charset = UTF-8
dos charset = CP850

# unix charset = ISO-8859-1

server string = Cubieboard2
workgroup = WORKGROUP

# log level = 10

load printers = No
show add printer wizard = no
load printers = no
printcap name = /dev/null
printing = bsd
disable spoolss = yes
dns proxy = No
#config file = /etc/samba/smb.conf
winbind enable local accounts = no
mangled names=no

[linaro]
path = /home/linaro

# force group = users

valid users = linaro, root
force user = linaro
create mask = 0770
directory mask = 0770
force create mode = 0770
read only = No
case sensitive = No

Cubieboard2 Scripts

git clone ssh://root@192.168.5.244/volume1/git/cubieboard2-scripts.git
cd cubieboard2-scripts/
find . -type f -name "*.sh" -exec chmod +x {} \;
find . -type f -name "*.py" -exec chmod +x {} \;

NFS

Server

apt-get install nfs-kernel-server nfs-common
sudo vi /etc/exports
    /home/linaro/hdd/motion 192.168.5.249(rw,sync,no_root_squash,no_subtree_check)
    /home/linaro/hdd/motion 192.168.5.250(rw,sync,no_root_squash,no_subtree_check)
    /home/linaro/hdd/       192.168.5.248(rw,sync,no_root_squash,no_subtree_check)
    /home/linaro/hdd/       192.168.5.249(rw,sync,no_root_squash,no_subtree_check)
    /home/linaro/hdd/       192.168.5.250(rw,sync,no_root_squash,no_subtree_check)

/etc/init.d/nfs-kernel-server restart

Client

apt-get install nfs-common

Tijdelijk mounten van een directory, login als user pi: mkdir scripts sudo mount -t nfs cb2-live:/home/linaro/scripts /home/pi/scripts

Om altijd gebruik te kunnen maken van de directory, leg deze vast in fstab: sudo vi /etc/fstab cb2-live:/home/linaro/scripts /home/pi/scripts nfs auto 0 0

SSD fstrim

Bij gebruik van een SSD disk moet in Debian Jessie wekelijks een fstrim commando uitgevoerd worden

sudo vi /etc/cron.weekly/fstrim
    #!/bin/sh
    fstrim /home/linaro/hdd
sudo chmod +x /etc/cron.weekly/fstrim

Hier staat de pySUNXI install beschrijving

Cubieboard dist-upgrade van Debian Wheezy naar Jessie

Bronnen:

linaro@cb2-live:~$ sudo dpkg -r ramlog
(Reading database ... 48367 files and directories currently installed.)
Removing ramlog ...
[....] Disabling ramlog...insserv: script ramlog.uninst: service ramlog already provided!
. ok
# sudo bash
# cd /etc/apt
# cp sources.list sources.list.bak

# apt-get update
# apt-get upgrade
# apt-get dist-upgrade

# vi /etc/apt/sources.list
deb http://ftp.de.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.de.debian.org/debian/ jessie main contrib non-free

deb http://httpredir.debian.org/debian jessie-updates main contrib non-free
deb-src http://httpredir.debian.org/debian jessie-updates main contrib non-free

deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free

# apt-get update
# apt-get upgrade
# apt-get dist-upgrade
# reboot

Check the update

cat /etc/os-release

Installing Systemd

sudo apt-get install systemd systemd-sysv 

Cubieboard2 GPIO met Python

Bron: http://docs.cubieboard.org/tutorials/common/using_python_program_control_gpios

Installeren Login als linaro:

# sudo apt-get update
# sudo apt-get install python-dev
# wget <http://dl.cubieboard.org/software/libs/pySUNXI-0.1.12.tar.gz>
# tar zxf pySUNXI-0.1.12.tar.gz
# cd pySUNXI-0.1.12
# sudo python setup.py install

Test programma

    #!/usr/bin/env python
    
    import SUNXI_GPIO as GPIO
    import time
    
    TERRAS_DEUR = GPIO.PD1 #Pin97
    
    GPIO.init()
    GPIO.setcfg(TERRAS_DEUR, GPIO.IN)
    
    while True:
       #GPIO.output(RED_LED, GPIO.HIGH)
       #time.sleep(1)
       #GPIO.output(RED_LED, GPIO.LOW)
       #time.sleep(1)
    
       x = GPIO.input(TERRAS_DEUR)    # Terrasdeur
       if x==0:
          print "Terrasdeur: dicht"
       else:
          print "Terrasdeur: open"
       time.sleep(1)

Uitlezen CPU temp

Bron: https://domotiga.nl/boards/3/topics/5285

CPU temp zit op zowel:

  • cat /sys/class/i2c-dev/i2c-0/device/0-0034/temp1_input
  • cat /sys/devices/platform/sunxi-i2c.0/i2c-0/0-0034/temp1_input

En geeft bij beide terug: 34600

Uitlezen met Python van de waarde:

    def getCpuTemperature():
        with open('/sys/class/i2c-dev/i2c-0/device/0-0034/temp1_input') as f:
            for line in f:
                return (float(line.rstrip('\n'))/1000)
    
    print getCpuTemperature()

Cubieboard2 watchdog

Nodig is /dev/watchdog Bij mij was deze er al, anders doe:

#sudo modprobe sunxi_wdt

Daarna als root:

# apt-get install watchdog
# service watchdog start

Configuratie in /etc/watchdog.conf:

watchdog-timeout=20

Om watchdog te testen, genereer een kernel panic:

echo c | sudo tee /proc/sysrq-trigger