Inhaltsverzeichnis
P4D
Hardware
- Humingboard i2eX
- CPU: i.MX6 Dual 1GHz
- GPU: GC2000 OpenGL ES1.1,2.0
- RAM: 64bit 1Gb
- NIC: 10/100/1000Mbps
- 1x HDMI 1080p mit CEC
- 1x Coax SPDIF
- 2x USB2.0
- 1x microSD
- 1x mini PCI-E
- 1x mSata
- 1x Standard micro USB 5V DC
- + sonstige Schnittstellen (SPI, … )
Aktuell
- µSD: SanDisk 32GB SD-Karte
- SSD: 512GB mSATA Cruical M550
- WiFi: USB RTL8192EU
- OneWire: DS18B20
Software
- Arch Linux ARM
SD-Karte vorbereiten
# dd if=/dev/zero of=/dev/sdX bs=1M count=4 # fdisk /dev/sdX Welcome to fdisk (util-linux 2.36.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0xca7b0c11. Command (m for help): p Disk /dev/sde: 29,72 GiB, 31914983424 bytes, 62333952 sectors Disk model: STORAGE DEVICE Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xca7b0c11 Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (1-4, default 1): First sector (2048-62333951, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-62333951, default 62333951): Created a new partition 1 of type 'Linux' and of size 29,7 GiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. # mkfs.ext4 -L P4D /dev/sdX1 # mkdir /mnt/p4d # mount /dev/sdX1 /mnt/p4d # cd /tmp # wget http://archlinuxarm.org/os/ArchLinuxARM-armv7-latest.tar.gz # wget http://archlinuxarm.org/armv7h/alarm/uboot-cubox-i-2017.01-1-armv7h.pkg.tar.xz # tar -xpf ArchLinuxARM-armv7-latest.tar.gz -C /mnt/p4d && sync # tar -xpf uboot-cubox-i-2017.01-1-armv7h.pkg.tar.xz -C /mnt/p4d/ boot/{boot.scr,SPL,u-boot.img} && sync # dd if=/mnt/p4d/boot/SPL of=/dev/sdX bs=1K seek=1 # dd if=/mnt/p4d/boot/u-boot.img of=/dev/sdX bs=1K seek=69 # sync # umount /mnt/p4d
System von der SD-Karte booten und als Benutzer alarm per ssh einloggen
- Benutzer: alarm Passwort: alarm
- Benutzer: root Passwort: root
zum Benutzer root wechseln
$ su
neue Passwörter für root und den Benutzer alarm setzen
# passwd # passwd alarm
System aktualisieren
# pacman-key --init # pacman-key --populate archlinuxarm # pacman -Syu
Script zum Durchführen eines Chroot installieren
# pacman -S arch-install-scripts wget
Das aktualisierte System neustart
# reboot
wieder per ssh einloggen, mit den neu gesetzen Passwörtern
Arch Linux ARM auf die mSATA/SSD installieren
SSD vorbereiten
# fdisk /dev/sda Welcome to fdisk (util-linux 2.36.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): o Created a new DOS disklabel with disk identifier 0x9ad9c45c. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (1-4, default 1): First sector (2048-1000215215, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-1000215215, default 1000215215): Created a new partition 1 of type 'Linux' and of size 476.9 GiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
Dateisystem ext4 anlegen
# mkfs.ext4 -L MSATA /dev/sda1 mke2fs 1.46.2 (28-Feb-2021) Discarding device blocks: done Creating filesystem with 125026646 4k blocks and 31260672 inodes Filesystem UUID: 17288d69-bf81-4e28-9750-346c1c9fae4a Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 102400000 Allocating group tables: done Writing inode tables: done Creating journal (262144 blocks): done Writing superblocks and filesystem accounting information: done
ArchLinmuxARM-Image herunterladen
# cd /tmp # wget http://archlinuxarm.org/os/ArchLinuxARM-armv7-latest.tar.gz
Partition auf der SSD unter /mnt einhängen
# mount /dev/sda1 /mnt
ArchLinuxARM-Image auf die mSATA kopieren
# tar -xpf ArchLinuxARM-armv7-latest.tar.gz -C /mnt/ && sync
Chroot in das Neu-Installierte System durchführen
# arch-chroot /mnt/
neue Passwörter für root und den Benutzer alarm setzen
# passwd # passwd alarm
System aktualisieren
# pacman-key --init # pacman-key --populate archlinuxarm # pacman -Syu
die richtige Zeitzone setzen
# ln -sf /usr/share/zoneinfo/Europe/Berlin /etc/localtime
deutsches Tastaturlayout auf der Konsole einstellen
# echo KEYMAP=de-latin1 > /etc/vconsole.conf
die zu erzeugende Lokalisierungen (Systemsprache und Formatierung) festlegen
# nano /etc/locale.gen
/etc/locale.gen
de_DE.UTF-8 UTF-8 de_DE ISO-8859-1 de_DE@euro ISO-8859-15
die Lokalisierung erzeugen
# locale-gen
Lokalisierung auf de_DE.UTF8 setzen
# echo LANG=de_DE.UTF8 > /etc/locale.conf
Hostname setzen
# echo p4d > /etc/hostname
Aktuelleres U-Boot installieren
mit der verfügbaren Version, kann das System nicht von der mSATA booten
# pacman -S arch-install-scripts base-devel bc git htop pacman-contrib python swig wget
von base-devel alles installieren
# su alarm $ mkdir ~/workspace && cd ~/workspace $ git clone https://github.com/archlinuxarm/PKGBUILDs.git $ cd PKGBUILDs $ git checkout -b i2ex $ cd alarm/uboot-cubox-i $ sed -i 's/pkgver=2017.01/pkgver=2021.01/' PKGBUILD $ makepkg --skipchecksums $ exit # pacman -U uboot-cubox-i-2021.01-1-armv7h.pkg.tar.xz
U-Boot auf die SD-Karte spielen
# dd if=/boot/SPL of=/dev/mmcblk1 bs=1K seek=1 # dd if=/boot/u-boot.img of=/dev/mmcblk1 bs=1K seek=69
chroot wieder verlassen
# exit
System zwingen von der mSATA zu booten
dafür muss die Datei boot.scr im Verzeichnis /boot umbenannt werden
hiermit sucht das neuere U-Boot auch auf der mSATA nach der Datei boot.scr und startet von dieser
# mv /boot/boot.scr /boot/boot.org # reboot
wieder per ssh einloggen, mit den neu gesetzen Passwörtern
Kontrollieren, ob von der mSATA gebootet wurde
# df -h
Ausgabe
Filesystem Size Used Avail Use% Mounted on dev 459M 0 459M 0% /dev run 495M 828K 494M 1% /run /dev/sda1 469G 2.2G 443G 1% / <= sda = SSD tmpfs 495M 0 495M 0% /dev/shm tmpfs 495M 0 495M 0% /tmp
p4d installieren
# pacman -S jansson libwebsockets mariadb # su alarm $ mkdir -p /home/alarm/workspace/linux-p4d && cd /home/alarm/workspace/linux-p4d $ nano PKGBUILD
/home/alarm/workspace/linux-p4d/PKGBUILD
# Maintainer: milaw.biz
pkgname="linux-p4d"
pkgver=0.7.6
pkgrel=1
pkgdesc="fetching data from the S 3200 and store it in a MySQL database"
arch=('any')
url="https://github.com/horchi/linux-p4d"
license=('GPL')
depends=(
'curl'
'jansson'
'libwebsockets'
'libxml2'
'mariadb'
'openssl')
makedepends=(
'git'
'sed')
provides=('linux-p4d')
source=("linux-p4d::git+https://github.com/horchi/linux-p4d.git#tag=$pkgver")
md5sums=("SKIP")
prepare() {
cd $srcdir/$pkgname
sed -i 's/WEBOWNER = www-data/WEBOWNER = http/g' Make.config
sed -i 's/DEBUG = 1/DEBUG = 0/g' Make.config
sed -i 's/# LIBS += $(shell pkg-config --libs libwebsockets)/LIBS += $(shell pkg-config --libs libwebsockets)/g' Make.config
sed -i 's/LIBS += $(shell pkg-config --libs-only-L libwebsockets)/#LIBS += $(shell pkg-config --libs-only-L libwebsockets)/g' Make.config
sed -i 's/LIBS += -l:libwebsockets.a/#LIBS += -l:libwebsockets.a/g' Make.config
}
build() {
cd $srcdir/$pkgname
make
}
package() {
cd $srcdir/$pkgname
make DESTDIR="$pkgdir" install
}
linux-p4d bauen und installieren
$ makepkg $ exit # pacman -U linux-p4d-0.7.6-1-any.pkg.tar.xz
MariaDB einrichten
# mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql # systemctl start mariadb # mysql -u root -Dmysql -p Enter password: Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 10.5.9-MariaDB Arch Linux Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [mysql]> CREATE DATABASE p4 charset utf8; Query OK, 1 row affected (0.001 sec) MariaDB [mysql]> CREATE USER 'p4'@'localhost' IDENTIFIED BY 'p4'; Query OK, 0 rows affected (0.008 sec) MariaDB [mysql]> GRANT ALL PRIVILEGES ON p4.* TO 'p4'@'localhost' IDENTIFIED BY 'p4'; Query OK, 0 rows affected (0.006 sec) MariaDB [mysql]> flush privileges; Query OK, 0 rows affected (0.003 sec) MariaDB [mysql]> exit Bye
SQL-Dumps wiederherstellen (Optional)
Dumps aus der SQL-Datenbank (mittels dem Befehl p4d-backup erzeugt) liegen hier im Verzeichnis p4-dumps
# su alarm $ find /home/alarm/p4-dumps -name "*.sql.gz" -type f -exec zcat {} \; | mysql -u p4 -pp4 -Dp4
P4D starten
# systemctl start p4d
MariaDB und P4D beim Systemstart mitstarten
# systemctl enable mariadb # systemctl enable p4d
OneWire
DS18B20 am GPIO1 angeschlossen
$ mkdir -p workspace/w1-gpio-cl && cd workspace/w1-gpio-cl $ nano PKGBUILD
/home/alarm/workspace/w1-gpio-cl/PKGBUILD
# Maintainer: milaw.biz
_pkgbase=w1-gpio-cl
pkgname=${_pkgbase}-dkms
pkgver=1.2.1
pkgrel=1
_commit=32e1bc8
pkgdesc="Command line configured gpio w1 bus master driver"
arch=('armv6' 'armv7h')
url=https://github.com/pstolarz/w1-gpio-cl
license=('GPL')
depends=('dkms')
makedepends=(
'bc'
'bison'
'flex'
'openssl'
'git'
'make')
source=("w1-gpio-cl::git+https://github.com/pstolarz/w1-gpio-cl.git#commit=$_commit")
md5sums=('SKIP')
package() {
# Install dkms.conf
install -dm755 "${pkgdir}/usr/src/${_pkgbase}-${pkgver}"
cat > "${pkgdir}/usr/src/${_pkgbase}-${pkgver}/dkms.conf" << EOF
PACKAGE_NAME="${_pkgbase}"
PACKAGE_VERSION="${pkgver}"
MAKE[0]="make"
CLEAN="make clean"
BUILT_MODULE_NAME[0]="${_pkgbase}"
DEST_MODULE_LOCATION[0]="/kernel/drivers/w1"
AUTOINSTALL="yes"
EOF
# Copy sources (including Makefile)
cp -r ${_pkgbase}/* "${pkgdir}"/usr/src/${_pkgbase}-${pkgver}/
}
$ makepkg $ su # pacman -U w1-gpio-cl-dkms-1.2.1-1-armv7h.pkg.tar.xz
Modul laden
# modprobe w1-gpio-cl m1="gdt:1"
Temperatur auslesen
# cat /sys/bus/w1/devices/28-{ID}/temperature
Ausgabe
19375bedeutet 19,375°C
Modul automatisch laden
# nano /etc/modules-load.d/w1-gpio-cl.conf
/etc/modules-load.d/w1-gpio-cl.conf
w1-gpio-cl
# nano /etc/modprobe.d/w1-gpio-cl.conf
/etc/modprobe.d/w1-gpio-cl.conf
options w1-gpio-cl m1="gdt:1"
Netzwerk
- LAN - Schnittstelle
eth0 - WLAN - Schnittstelle
wlan0
benötigte Software installieren
# pacman -S ifplugd wpa_supplicant
WLAN einrichten
# nano /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
/etc/wpa_supplicant/wpa_supplicant-wlan0.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=wheel
update_config=1
network={
ssid="SSID"
psk="KEY"
scan_ssid=1
proto=RSN
key_mgmt=WPA-PSK
group=CCMP TKIP
pairwise=CCMP TKIP
priority=5
}
Metric für eth0 und wlan0 festlegen
# nano /etc/systemd/network/eth0.network
/etc/systemd/network/eth0.network
[Match] Name=eth0 [Network] DHCP=yes DNSSEC=no [DHCP] RouteMetric=10
# nano /etc/systemd/network/wlan0.network
/etc/systemd/network/wlan0.network
[Match] Name=wlan0 [Network] DHCP=yes [DHCP] RouteMetric=20
Dienste beim Systemstart mitstarten
# systemctl enable ifplugd@eth0.service # systemctl enable wpa_supplicant@wlan0.service