Diverse Tipps und Tricks für Linux ARM boards

WSPRLINUX mit SDR Receiver:

dieser Tipp kommt von ON4CDJ:

für SDR Empfänger benutzt man gerne snd-alop von Linrad. Damit wird eine virtuelle Soundkarte, ein sogenanntes Loopback Device erzeugt welches aus den IQ Signalen des SDR ein normales NF Signal erzeugt wie es andere Programme üblicherweise brauchen.

Damit wsprlinux auf dieses Loopback Device zugreifen kann, muss man eine Option eingeben damit wsprlinux das Device finden kann.

wsprlinux greift nicht direkt auf die Soundkarte zu sondern nutzt das Linux Tool: arecord. Man kann zunächst per Hand in der Kommandozeile ausprobieren wie man mit arecord auf das Loopback Device zugreifen kann. Danach überträgt man die gefundenenen Optionen ins Setupfenster von wsprlinux.

Diese gesuchte Option wird in aller Regel so aussehen: -Dplughw:2,1  wobei die 2 und 1 von der Anzahl der Soundkarten abhängen welche man installiert hat, hier muss man evt noch genauer nachsehen.

In wsprlinux geht man ins Setup Fenster und trägt in die Eingabezeile "Sound Recording Options" diese Option ein, also   -Dplughw:2,1 (oder entsprechend).

Jetzt bekommt wsprlinux die NF und kann mit dem SDR Empfänger betrieben werden.

 

SD Image verkleinern:

WARNUNG:

1)  Folgende Arbeiten NUR ausführen wenn eine Sicherungskopie vorhanden ist !

2) Partitionsbezeichnungen prüfen, ansonsten könnte man sich Daten im PC überschreiben !

Packen eines Images von SD-Karte zum Up-/Download ins Internet:

hat man ein fertiges und gut funktionierendes Image auf seiner SD Karte, so möchte man dieses vielleicht auch anderen zukommen lassen.

Ist die SD Karte z.B. 16GB groß, so ist der Transfer via Internet nicht mehr möglich. Man muss das Image komprimieren. Allerdings wird man feststellen, dass es sich nicht so einfach komprimieren lässt. Der Platzgewinn mit z.B. Zip ist gering und es bleibt viel zu groß zur Übertragung. Das liegt daran, dass scheinbar unbenutzte Teile der SD Karte mit Datenmüll voll sind, welcher sich schlecht komprimieren lässt. Die folgende Vorgehensweise zeigt wie man das Image auf die kleinst mögliche Größe schrumpfen kann, ins Internet hochlädt, und wie jemand anderes das Image wieder auf seine SD Kartengröße expandieren kann.

Zunächst bootet man die SD Karte auf dem kleinen ARM Computer, dann:

Direkt am laufenden System am ARM Board:

Schritt 1: eigenen Datenmüll löschen

im Laufe der Zeit sammelt sich so einiges an. Als erstes muss man die SD Karte durchsehen und alle unbenutzten Dateien löschen. Diese befinden sich praktisch immer im Verzeichnis /home/benutzer, und hier muss man aufräumen.

Schritt 2: persönliche Daten entfernen

möglicherweise hat man mit WLAN gearbeitet, das WLAN Passwort will man nicht ins Internet hoch laden, daher sollte man alle WLAN Verbindungen löschen. Hatte man einen Internetbrowser benutzt, löscht man auch damit den Browsercache, Verlauf, Passwörter usw.

Schritt 3: feststellen des benötigen Speicherplatzes

Bezeichnung der SD Karte und Partitionen:

Die übliche Bezeichnung der SD Karte und Partitionen auf den kleinen ARM boards ist:

/dev/mmcblk0 ... SD Karte 0
/dev/mmcblk1 ... SD Karte 1 usw.
in der Regel hat die SD Karte die Nummer 0. Nur wenn noch ein anderes Speichermedium steckt, so kann sie eine andere Nummer bekommen.

/dev/mmcblk0p1 ... SD Karte 0, Partition 1 : diese Partition ist klein und enthält den Bootloader und Teile des Betriebssystems

/dev/mmcblk0p2 ... SD Karte 0, Partition 2 : diese Partition enthält das komplette Filesystem, und hier beginnen wir mit unseren Arbeiten zur Komprimierung.

mit dem Konsolenkommando:  df  -h  lassen wir die Belegung der Partitionen ausdrucken und achten dabei vor allem auf /dev/mmcblk0p1. Das ist in der Regel unsere Systempartition welche wir verkleinern müssen.
Beispiel:

Filesystem            Size    Used    Avail ...
/dev/mmcblk0p1   15G    5.1G    8.9G

wir sehen dass von der 15GB großen Partition nur 5.1GB tatsächlich benutzt werden. Dieses Werte brauchen wir in den folgenden Schritten.

 

Im Linux PC:

die nächsten Schritte müssen im PC gemacht werden (oder auf einem anderen ARM System, da die SD Karte für die folgenden Arbeiten nicht in Benutzung sein darf. Man steckt die Karte also mit einem Kartenlesen in seinen (Linux) PC und fährt mit dem folgenden Schritt fort:

Bezeichnung der SD Karte und Partitionen:

im PC sehen die Bezeichnungen anders aus, nicht so wie vorher am ARM System gezeigt.

Steckt man die Karte in den Linux-PC, so wird sie normalerweise sofort automatisch eingebunden. Wir schauen dann mit  df  -h  nach welche Bezeichnung sie hat. Die obige Karte wird dann so aussehen:
/dev/sdf1 ... SD Karte sdf, Partition 1
/dev/sdf2 ... SD Karte sdf, Partition 2

(anstelle 'f' kann auch irgendein anderer Buchstabe dort stehen. Diesen bitte genau aufschreiben und niemals verwechseln !!! Die anderen Buchstaben gehören den Festplatten des PCs und diese will man ja nicht verändern).

jetzt muss man die automatische Einbindung entfernen. Entweder im Dateimanager oder in der Konsole mit  umount  /dev/sdf1 und umount  /dev/sdf2

 

Schritt 4: Dateisystem prüfen, nullen und verkleinern

zunächst können die Daten beliebig in der Partition verteilt sein. Um einen möglichst großen Platz frei zu räumen, müssen alle Daten ganz nach vorne verschoben werden damit hinten alles frei wird.

In Schritt 3 haben wir festgestellt welchen Platz unsere Daten benötigen. Wir schrumpfen die Partition 2 also auf diesen Platz (+ etwas Reserve). Das geht mit dem Konsolenkommando (ich gehe davon aus, dass die Partition mit einem Linux Dateisystem ext2, ext3 oder ext4  formatiert ist, was in der Regel auch der Fall ist):

e2fsck  /dev/sdf2    (Prüfen des Dateisystems)

zerofree  /dev/sdf2    (nullen unbenutzter Sektoren. Dieses Tool muss in der Regel erst installiert werden).

resize2fs   -p   /dev/sdf2   5.5G    (Verkleinern auf 5,5 GB)

mit diesem Kommando packen wir alle Daten auf Partition 2 in einen 5.5GB großen Bereich. Da unsere Daten 5.1GB groß sind, sollte das klappen und wir haben noch 400MB Reserve.

 

Schritt 5: Partition verkleinern

dieser Schritt ist optional und ist nur erforderlich wenn das Image auf eine kleinere SD Karte geschrieben werden soll.

im letzten Schritt haben wir die Daten auf die ersten 5.5GB zusammengeschoben und den Platz hinten frei gemacht. Dadurch sind jetzt die Voraussetzungen erfüllt um die Partition ebenfalls zu verkleinern:

fdisk  /dev/sdf

aktuelle Größen anzeigen

mit 'p' zeigen wir die aktuelle Größe der Partitionen an. Hier steht z.B.:

Device Boot     Start         End             Blocks             Id             System
/dev/sdf1         3072         266239        131584           6              FAT16
/dev/sdf2         266240    31116287    15425024      83            Linux

wir möchten die 2te Partition verkleinern, also das Ende dieser Partition ändern. Den Start dürfen wir NICHT ändern, daher schreiben wir uns den Startblock auf, hier im Beispiel: 266240

Partition löschen:

delete mit Kommando: d
Partitionsnummer: 2

Partition neu anlegen:

neu mit Kommando: 'n'
eine primäre Partition mit Eingabe: 'p'
Partitionsnummer wieder: 2

und jetzt wichtig !!!
Start (first cylinder): gleiche Zahl wie vorher eingeben, im Beispiel also die 266240
End (last cylinder):  +5600M

Mit dieser Eingabe '+5600M' sagen wir, dass die Partition 5,6GB groß sein soll. Damit passt unser vorher auf 5,5GB geschrumpftes Dateisystem drauf.

Speichern und fdisk verlassen:

Speichern: 'w'
Verlassen: 'q'

 

Schritt 6: Imagedatei erstellen

nachdem wir jetzt alles gemacht haben um das Image so klein wie möglich zu halten können wir die Imagedatei erstellen:

dd  bs=1M  count=5900 if=/dev/sdf  of=test.img

zuvor haben wir die Partition 2 auf 5,6GB verkleinert. Die Partition 1 ist beispielsweise 130MB groß. Zusammen macht das 5,73GB. Wir geben etwas Reserve zu und erstellen eine Imagedatei mit 5,9 GB Größe.

Schritt 7: Imagedatei komprimieren

dazu gibt es viele Möglichkeiten. Ich benutze gzip:

gzip test.img

nun haben wir die fertige Datei  test.img.gz  und können diese hochladen oder was auch immer damit machen. Haben wir alle Schritte ausgeführt, dann wird das Image jetzt deutlich verkleinert sein.

 

Odroid C2 (und andere auf Basis von Ubuntu): Auto-Login

will man sich automatisch, also ohne Angabe von user und passwort einloggen, sodass der grafische Desktop sofort startet, so muss man (als root) folgende Datei ergänzen:

/usr/share/lightdm/lightdm.conf.d/60-lightdm-gtk-greeter.conf

An das Ende dieser Datei schreibt man mit einem Texteditor eine neue Zeile mit folgendem Inhalt dazu:

autologin-user=odroid

 

Odroid Autostart

will man ein Programm gleich nach dem booten automatisch starten lassen, so ist das schwieriger als man denkt, denn leider ist die Vorgehensweise stark systemabhängig. Was auf einem Gerät funktioniert, kann am anderen nicht laufen.

Ich habe daher hier die Systemvoraussetzungen genau dokumentiert:

Odroid mit Ubuntu Mate:

Starten eines Programms als normaler User (z.B. "odroid"):

dazu benötigt man eine *.desktop Datei im Verzeichnis /home/odroid/.config/autostart. Dieses Verzeichnis existiert nicht standardmäßig, man muss es also anlegen. Die Vorgehensweise ist wie folgt:

1) cd /home/odroid/.config

2) mkdir autostart

3) jetzt wird die Autostartdatei angelegt, in diesem Beispiel starte ich x11vnc. Dazu muss in /home/odroid/.config/autostart eine neue Datei angelegt werden, mit der Dateiendung .desktop, also z.B.: x11vnc.desktop. Man öffnet mit einem Editor so eine Datei und fügt dann folgenden Inhalt ein:

[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=x11vnc
Comment=start x11vnc
Exec=x11vnc
Hidden=false
NoDisplay=false
Terminal=false

Das wichtige ist: Exec=x11vnc , hier wird die ausführbare Datei angegeben welche automatisch gestartet werden soll.

4) die soeben angelegte .desktop Datei muss ausführbar sein. Daher gibt man ein:  chmod 755 x11vnc.desktop

wichtig zu wissen ist, mit obiger Vorgehensweise startet man das gewünschte Programm (in dem Fall x11vnc) also normaler User (also nicht als root), was bei x11vnc wichtig ist.

Will man ein Programm als root starten, so geht das anders:

Programme die als root gestartet werden sollen, sind zu fast 100% Programme ohne GUI, sie laufen also ohne Benutzeroberfläche.

Es gibt verschiedene Methoden für den Autostart die hauptsächlich davon abhängen "wann" man starten will. In vielen Fällen ist ein Eintrag in rc.local die einfachste Lösung.

in diesem Beispiel möchte ich das Programm WebWSPR starten. Dieses hat den Dateipfad/-namen /home/odroid/wspr2/wsprtk, muss als root laufen und benötigt keine Benutzeroberfläche.

1) Erstellen eines Scripts, welches das gewünschte Programm startet:

Scriptname: /home/odroid/wspr2/startwspr

Inhalt:
cd /home/odroid/wspr2
./wsprtk 

2) Eintrag dieses Scripts in rc.local: dort schreibt man gleich oben (unter dem /bin/bash): /home/odroid/wspr2/startwspr

nicht vergessen das Script ausführbar zu machen:  chmod 755  /home/odroid/wspr2/startwspr

Wenn man jetzt neu bootet wird das Programm ausgeführt. Falls es nicht läuft, so gab es einen Fehler beim Programmstart, in dem Fall ist es nützlich wenn das aufzurufende Programm eine Logdatei schreibt wo man nachsehen kann was los war.