Krumeltee

-> Elektronik, Mikrocontroller und Retro-Computing <-

Archive for the ‘Linux’ Category

Intel i3/i5/i7 BIOS-Takt-Limit

Posted by krumeltee - 9. Juli 2014

Viele neue Laptops mit Intel-i3/5/7-CPU wollen ihr Netzteil identifizieren. Wenn ein Ersatz-Netzteil angeschlossen wird, welches dies nicht zulaesst, wird der Takt begrenzt.

Diese Grenze ist normalerweise nur eine „Empfehlung“ des BIOS an das Betriebssystem. In meinem Fall, mit einem i5, loest sich das so:

 

echo "1" > /sys/module/processor/parameters/ignore_ppc
echo "2400000" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo "2400000" > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
echo "2400000" > /sys/devices/system/cpu/cpu2/cpufreq/scaling_max_freq
echo "2400000" > /sys/devices/system/cpu/cpu3/cpufreq/scaling_max_freq
cpufreq-set -g performance -c 0
cpufreq-set -g performance -c 1
cpufreq-set -g performance -c 2
cpufreq-set -g performance -c 3
cpufreq-set -f 2.40GHz -c 0
cpufreq-set -f 2.40GHz -c 1
cpufreq-set -f 2.40GHz -c 2
cpufreq-set -f 2.40GHz -c 3

Posted in Linux | Leave a Comment »

Dual IR 1A Webradio

Posted by krumeltee - 14. Juni 2014

Dieser Artikel ist noch NICHT fertig!

Da er aber nun schon mehrere Wochen als Entwurf so da liegt, veröffentliche ich ihn jetzt unter Vorbehalt.

 

Seit einiger Zeit gibt es dieses Webradio relativ günstig zu kaufen. Es enthält ein MSE005 – Board mit einem Agic SOC (NUC930 ARMv5) von Magic Systech. Das Webradio kommt mit folgenden Merkmalen:

  • Zwei Audioausgänge, Kopfhörer und Line-Out
  • Zwei USB-Ports, einer intern mit aufgelötetem USB-WLAN-Stick, einer mit Buchse
  • RT3070 USB WLAN Stick, intern aufgelötet
  • IR-Empfänger
  • 128×64 STN Display (weiss/blau)

Fotos

Hier zwei Fotos vom Innenleben.

Foto 1 Foto 2

Zugang per Telnet

Ein Telnet-Server läuft auf Port 23 auf dem Board. Zugangsdaten sind root/password. Sobald das Board mit dem WLAN verbunden ist, reicht ein  $ telnet <ip/hostname>.

Display

Das verbaute Display trägt die Bezeichnung FGC12864A. Dazu konnte ich nichts genaues finden. Jedoch scheint es einige Übereinstimmungen mit anderen Displays zu geben. Der Controller ist ein ST7567. Das Display wird vom SOC per SPI angesprochen. Ein Kernel-Treiber „ST7567“ läuft auf dem Board. Hier ein paar Code-Beispiele:

Hier zwei paar Datenblätter:

Speicher

Das Board hat 16MB RAM und 128MB Flash Speicher. Der Flash Speicher ist per /dev/mtdblock0 mit jffs2 Dateisystem erreichbar.

IR-Empfänger

Der IR-Empfänger ist ein TL1838. Dieser ist baugleich mit diversen anderen xx1838-Typen. Hier zwei Datenblätter:

Betriebsspannung: 2,7V – 5,5V, Arbeitsfrequenz: 38kHz.

Fernbedienung

Auf dem Board läuft ein SC6122-Treiber. Dieser Chip ist ein IR-Sende-Controller. Wahrscheinlich steckt dann eben dieser oder ein kompatibler in der Fernbedienung. SC6122 Datenblatt.

WLAN-USB-Stick

Der verbaute WLAN-Stick ist ein BL-RT3070-7A. Hier z.B. zu kaufen. Einige Angaben des Herstellers:

  • IEEE 802.11B/G/N
  • USB1.1/USB2.0
  • 2,4GHZ
  • Infrastructure/AD-Hoc
  • Transferraten: 135/54/48//36/24/18/12/9/6/1Mbit/s
  • Reichweite: Indoor 100m / Outdoor 300m
  • 3,3V Versorgungsspannung

Der RT3070-Chip kann unter Linux anscheinend auch mit hostapd zum Access-Point gemacht werden.

Audio-Ausgänge

Das Radio hat zwei Ausgänge, einen Line-Out zum Anschluss an einen Verstärker/Aktiv-Boxen und einen Kopfhörer-Anschluss. Dieser wird von einem PT2308-Treiber versorgt. PT2308 Datenblatt.

Die beiden Ausgänge sind an der Soundkarte leider nur einer.

I2C-Bus

Auf dem Trägerboard sitzt ein PT2259 Chip, der die Lautstärkeregelung übernimmt. dieser wird per I2C angesteuert. Die Pins 4 und 5 sind SDA und SCL.

Sie Datenblatt zum PT2259.

Stromversorgung

Das komplette Radio an sich wird mit 6V/800mA versorgt. Auf dem Board befindet sich ein LM2940CT-5.0, dieser entspricht einem einfachen 7805, jedoch die „Low-Drop-Version“ davon. Bei 1A ist dieser bereits ausgereizt. Auf dem Radio-Board ist ausserdem kein Kühlkörper für den Regler montiert, dieser ist mit Schraube+Mutter an der Platine befestigt. Daher sollte man für weitere Hardware-Basteleien eine andere Stromversorgung vorsehen. Ein LM2596-Schaltregler mit einem maximalen Ausgangsstrom von 3A wäre dafür z.B. interessant.

USB

Das Board hat zwei USB-Anschlüsse. Der eine ist intern und mit einem USB-WLAN-Stick fest verlötet belegt. Der andere ist mit einer Buchse nach draussen geführt. Das gibt einige Möglichkeiten für Erweiterungen der Hardware:

  • USB-Hub
  • RS232-Wandler
  • WLAN-/Surf-Sticks, Netzwerkkarten 10/100 RJ45, …
  • DVB-T für Radio-Empfang, Streaming, …
  • USB-Speicher
  • …..

Weitere Radios mit dem selben Board

Posted in ARM, ARMv5, Embedded Linux, Linux | Leave a Comment »

Cross-Compiling für Android – Toolchain

Posted by krumeltee - 11. Februar 2014

Um Programme, wie wir sie von Linux oder anderen Betriebssystemen her kennen auf einem Android-Gerät laufen zu lassen, brauchen wir einen Cross-Compiler. Der Cross-Compiler compiliert auf dem PC Programme für die ARM-Architektur des jeweiligen Android-Gerätes.

Android gibt es auch noch für andere Plattformen als ARM, aber die sind recht selten und ich gehe daher nicht darauf ein. Das erstellen der Cross-Toolchain (Compiler, Binutils, …) ist für andere Archtitekturen teilweise sehr unterschiedlich, das Compilieren an sich, bis auf die anderen Target-Optionen nicht.

Neben einem Cross-Compiler benötigt man noch „adb“, die „Android Debug Bridge“. Dieses Programm lässt einen recht einfach seine Binaries und weitere Dateien auf das Handy schieben, ausführen und eine Shell öffnen. Zwinged ist dies nicht, man kann auch den Umweg über Massenspeicher, MTP, WLAN, … gehen und mit einem Terminal-Programm auf dem Handy arbeiten, mit der adb ist es aber um einiges komfortabler.

  • Der Cross-Compiler

Ich verwende die „Sourcery CodeBench Lite Edition„-Toolchain welche einen C/C++-Compiler, Assembler, Linker und Debugger enthält. Ebenso enthalten ist die Standard-C-Library inkl. der Header- und Development-Dateien.

Die Toolchain alleine braucht etwa 350MB Platz. Compiliert man aber z.B. den Kernel hat man schonmal 600MB-1000MB nur an Quelldateien + den Tarball oder die git/svn-Informationen, beim Compilieren für jede benutzte C-Datei noch eine Objekt-Datei…. Da sammelt sich schnell viel Datenmüll an. Man braucht zum sauber Arbeiten mindestens 5-8GB freien Speicher, ich empfehle aber mindestens 15-20GB.

Ich setze vorraus, dass man hierfür mit Linux arbeitet. Auf Windows gestaltet sich das ganze ein wenig anders, was aber hauptsächlich nur an anderen Verzeichnis-Namen und einer anderen Shell liegt. Theorethisch klappt es sowohl mit Linux als auch mit Windows mit dieser Toolchain. Getestet habe ich dies hier mit Gentoo und Debian, auf anderen (aktuellen) Distributionen sollte es genauso sein.

Ich verwende die „G++ Lite 2010.09-110“ Toolchain für Linux. Bei der Auswahl der Pakete wähle ich den Installer, nicht das blosse tar-Paket.

Installationziel der Toolchain wird /opt/arm-linux-gcc/ sein, daher braucht man root-Rechte beim Ausführen des Installers.

$ chmod +x apm-2010.09-110-powerpc-apm-linux-gnu.bin
$ su -c './apm-2010.09-110-powerpc-apm-linux-gnu.bin -i console'

oder für die, die sudo verwenden:

$ sudo ./apm-2010.09-110-powerpc-apm-linux-gnu.bin -i console

Nun wird man durch die Lizenzbedingungen geführt, die man mit „Y“ bestätigt und wählt „1“ für „Typical“, bestätigt.

Jetzt gibt man den Zielpfad an: „/opt/arm-linux-gcc“. Die Frage, ob Links (symlinks) angelegt werden sollen, beantwortet man mit „nein“, da man sich sonst das System damit „zumüllt“. Es reicht vollkommen aus, den Cross-Compiler später mit in den Pfad aufzunehmen.

Hat man nun den Cross Compiler installiert, muss man ihn in seinen Pfad mit aufnehmen. Will man dauerhaft Zugriff auf diesen ARM-Cross-Compiler haben, schreibt man in die ~/.bashrc folgendes:

export PATH=$PATH:/opt/arm-linux-gcc/bin/

Wenn man den Zugriff nicht dauerhaft haben will, sondern jedesmal, bevor man loslegt den Pfad von Hand angeben will, man man genau dieses auf der Konsole. Jetzt einmal die Shell neu öffnen oder kurz von Hand „export ….“ eingeben und der Cross-Compiler steht.

Posted in Android, ARM, C, Linux | Leave a Comment »

Backup mit rsync und ssh — ohne rsyncd

Posted by krumeltee - 9. Juli 2013

Wer auf einem entfernten System keinen rsync-Daemon installieren will – aus was für Gründen auch immer – der kann auch einen sshd dafür hernehmen.

Rsync kann lokal kopien erstellen. Dieses feature wird ganz einfach genutzt, indem man das „lokal“ über SSH von einem entfernten Rechner hernimmt.

Eine einfaches Beispiel wäre das:

rsync -avzbe ssh root@192.168.37.33:/ /backup/ --exclude=/proc --exclude=/sys --exclude=/dev

Hierbei wird alles ausser /proc, /sys und /dev vom entfernten System „192.168.37.33“ nach /backup/ gesynct. Diese Ordner sollten auch ausgelassen werden,

da diese nicht statisch sind und die Dateisysteme darin vom Kernel verwaltet werden, man braucht davon kein Backup.

Solch eine Befehlszeile kann man z.B. jede Nacht in einem cronjon laufen lassen. Die Ausgabe einfach per „>“ umleiten und man hat eine Dateiliste, der geänderten Dateien.

Die Bandbreite lässt sich mit „–bwlimit=…..“ begrenzen.

Posted in Embedded Linux, Linux | Leave a Comment »

Binär-Images in C Programme einbinden – bin2header

Posted by krumeltee - 27. April 2013

Immer wieder steht man vor dem Problem, dass man Daten in einem Programm haben will, diese aber nicht in zig einzelnen Dateien mit dem Programm verteilen will.

Eine Möglichkeit, die man dann hat, ist, die Daten in ein Array zu konvertieren. Zum Beispiel ein Bild, was als Fensterlogo angezeigt werden soll.

Das Programm muss die Bilddatei sowieso öffnen und in eine Struktur, einen Datentyp oder ein Array laden. Also gleich ein Array vom Typ byte nehmen und die Daten zur compile-Zeit fest ins Programm einbinden.

Dazu habe ich mir ein kleines Tool geschrieben, hier zu finden:
https://github.com/spacerace/bin2header

Posted in C, Codeschnipsel, Linux | Leave a Comment »

Galaxy S2 USB-OTG (host-mode), Audio-Out und mehr

Posted by krumeltee - 11. April 2013

Das S2 hat noch mehr Möglichkeiten als nur eine USB-Verbindung am USB-Port.

Nachtrag: am Ende des Artikels habe ich ein Update angefügt. WICHTIG!

Dazu bietet der Micro-USB-Anschluss einen sogenannten ID-Pin, Pin 4. Dieser Pin ist bei normalen USB-Verbindungskabeln unbeschalten.

Es gibt fertige USB-OTG Adapter. Dabei muss man aber aufpassen, bei den meisten ist dieser Pin ebenfalls unbeschalten.

Will man den OTG Mode, muss man diesen Pin über einen Widerstand von 124kOhm mit GND verbinden.

Am einfachsten scheint es, ein normales USB-Verbindungskabel zu zerschneiden.

Am Ende mit dem Stecker lötet man eine Buchse an, den Micro-USB-Stecker schneidet man auf und lötet einen Widerstand ein.

Angehangen ein Schaltplan mit mehreren Beispiel-Möglichkeiten.

image

Nachtrag
Beim Testen und herumprobieren hat sich herausgestellt, dass eine direktverbindung vom ID-Pin nach Masse reicht. Ausserdem scheint der Dorimanx-Kernel am Besten USB-OTG zu unzerstützen, in Verbindung mit dem JB Stock ROM.

Posted in Android, Embedded Linux, Hardware Hacks, Linux | Leave a Comment »

Arcadyan (Vodafone / Arcor) EasyBox A-600

Posted by krumeltee - 23. März 2013

Beschreibung:

Diesmal zerlegt wurde eine Arcadyan EasyBox A-600 mit der genauen Modell-Bezeichnung ARV4520KW-B-LF-LVD. Diese Box ist meiner Internet-Recherche nach (fast) Baugleich zum SpeedPort W700V der Telekom.

Ein paar Infos hierzu findet ihr unter diesen Links:

http://www.dslteam.de/forum/showthread.php?t=130386

Ein „lustiger“ Bug bei dieser Box ist das verkorkste Patent auf die Berechnung der standart-WPA2-Keys. Siehe http://www.wotan.cc/ .

Hardware:

  • Infineon PSB50505 E V1.3 MIPS CPU, wahrscheinlich getaktet mit 235MHz, AMAZON M Familie
  • 32MB SDRAM (2x ISSI IS42S16800A-7TL)
  • 32MB FLASH (1x 29LV320)
  • Infineon ADM6996I 6-Port 10/100 Switch, 4 Ports extern verfügbar
  • Atheros AR2413A WLAN Chipset

Linux darauf, UART, …

Die Chancen stehen recht gut, einen 2.4er oder sogar einen 2.6er Kernel für diesen Chip hinzubiegen, zu allererst muss aber der Zugang zum Flash per seriellem Bootloader oder JTAG gefunden werden. Da ich mich bisher soweit noch nicht mit der Box beschäftigt habe, kann ich dazu noch nicht viel sagen. Den UART werde ich die Tage noch raussuchen und vielleicht wisst ihr ja noch mehr, dann schreibt mir bitte!

Sollte sich da was machen lassen, werde ich mich dahinterklemmen 🙂

Fotos

PEB3332 HT VOIP Prozessor

PEB3332 HT VOIP Prozessor

CPU, RAM und Flash

CPU, RAM und Flash

Atheros AR2413 Wireless Chipset

Atheros AR2413 Wireless Chipset

PCB Übersicht

PCB Übersicht

PCB Übersicht

PCB Übersicht

PCB Übersicht

PCB Übersicht

Chip

Chip

LAN Übertrager

LAN Übertrager

Arcadyan A600 PCB overview

Arcadyan A600 PCB overview

Posted in Embedded Linux, Hardware Hacks, Linux, MIPS, WLAN Linux | Leave a Comment »

MAX127 am AVR32 unter Linux

Posted by krumeltee - 15. August 2011

Hier eine kleine C-Lib, welche einen MAX127 unter Linux auf dem AVR32 auslies.

Der Code ist mehr oder weniger mein AVR-Code für den MAX127, einfach nur auf Linux angepasst.

Hier findet ihr die Quellcodes.

Der Code sollte auch mit meinem „RAM-I2C-Interface“ an jedem PC laufen.

Posted in AVR32, C, Embedded Linux, I2C, Linux, mini2440 | Leave a Comment »