Und wieder ein neues Spielzeug - Radxa Rock
Geschrieben von MMind am Freitag, 22. November 2013 in Geräte, Rockchip
Entwicklungsplatinen sind ja momentan groß in Mode. Der RaspberryPi ist ja ein sehr großer Erfolg geworden, mit inzwischen mehr als 2 Millionen verkauften Boards. Während die Development-Boards der Hersteller früher Unsummen kosteten, gibt es inzwischen für so ziemlich jeden ARM-SoC erschwingliche Entwickler-Platinen. Neben dem RaspberryPI sind dies zum Beispiel die Beagle- bzw. Pandaboards für OMAP 3 und 4, die ODROID-Boards für Samsungs Exynos SoCs oder auch die Cubieboards für Allwinner-SoCs.
Vom Hersteller der Cubieboards kommt nun auch ein neuer Boardtyp, diesmal basierend auf dem RK3188 von Rockchip. Das Board nennt sich »Radxa Rock« und soll demnächst allgemein verfügbar sein. Es gab eine Vorserie der Boards von 100 Stück und als Maintainer des Mainline-Kernel-Supports für Rockchip SoCs kam auch ich in den Genuss eines dieser Sample.

Die Ausstattungseite enthält keine allzugroßen Überraschungen bereit. 2GB Arbeitsspeicher, ein Flash-Chip, USB- und Netzworkports und die obligatorischen Buchsenleisten, an denen eine Menge PINs für eigene Verbindungen genutzt werden können. Ein interessantes Gimmik ist der Infrarotempfänger, auch wenn Infrarot heutzutage warscheinlich nicht mehr so oft verwendet wird.
Mit dem Mainline-Support für das Radxa Rock war ich auch schnell genug. Die Patches für die grundlegende Unterstützung haben es im aktuell laufenden Merge-Window in den Mainline-Kernel geschafft und werden damit Teil von Linux-3.13.
SMP - Erste Schritte
Geschrieben von MMind am Sonntag, 9. Juni 2013 in Rockchip
Meinen Basteleien an dem Rockchip-Soc bringen mich abermals mit neuen Bereichen in Kontakt. Ein sehr wichtiger Bereich ist dabei SMP. SMP steht für »symmetric multi-processing« und erlaubt es dem z.B dem Linux-Kernel, laufende Prozesse dynamisch auf alle verfügbaren Prozessoren zu verteilen. Bisher hatte ich ja immer nur mit Ein-Kern-Prozessoren zu tun, sodass ich hier mal eben wieder Neuland betreten habe.
Theorie
Beim Systemstart ist dabei immer nur eine CPU aktiv, d.h. wenn der Linux-Kernel startet arbeitet dieser immer nur auf einem Prozessor. Um alle Kerne zu nutzen, müssen diese separat vom Kernel gebootet werden. Dies geschieht durch verschiedene Funktionen die in einem struct smp_operations zusammengefasst werden.
Die erste Funktion ist »smp_init_cpus«, die eigentlich die Anzahl der vorhandenen Prozessoren bzw. Kerne ermitteln soll. Auf neueren Devicetree-basierenden Plattformen ist dies jedoch nicht mehr nötig, da die Informationen über die verfügbaren CPUs aus dem Devicetree selbst bezogen werden können, weswegen die Funktion auf der Rockchip-Platform nicht nötig ist.
Danach folgt »smp_prepare_cpus«, dessen wichtigste Aufgabe es ist die Cache-Kohärenz zu aktivieren, da jeder Core seinen eigenen Cache besitzt, Inhalte für den gleichen Wert zwischen Caches aber nicht differieren dürfen. In Cortex-A9 Prozessoren, wie dem RK3066, ist dafür die sogenannte Snoop-Control-Unit zuständig, die sogenanntes Bus-Snooping nutzt um Cache-Änderungen zu verfolgen.
Die letzte Funktion ist dann »smp_boot_secondary«, deren Aufgabe es nun ist, die jeweilige CPU in ihrem Argument zu starten. Die Prozedur zum starten eines Kerns ist für jede Plattform unterschiedlich. Bei den Rockchip-SoCs können die Kerne über die PMU aktiviert und deaktiviert werden. Wenn ein Kern startet versucht er ein Programm im prozessoreigenen SRAM zu starten, dass die Initialisierung übernimmt. Deswegen muss dieses (Assembler-)Programm vor Aktivierung des Kerns in das SRAM kopiert werden.
Wenn das alles funktioniert, kann das gestartete System dann über 2 Kerne verfügen.
Ich will Ergebnisse sehen
Da der heutige Tag sehr erfolgreich war, gibt es in der /proc/cpuinfo meines Tablets nun folgendes zu sehen:
processor : 0 model name : ARMv7 Processor rev 0 (v7l) BogoMIPS : 1196.85 Features : swp half thumb fastmult vfp edsp neon vfpv3 tls CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x3 CPU part : 0xc09 CPU revision : 0 processor : 1 model name : ARMv7 Processor rev 0 (v7l) BogoMIPS : 1196.85 Features : swp half thumb fastmult vfp edsp neon vfpv3 tls CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x3 CPU part : 0xc09 CPU revision : 0 Hardware : Rockchip Cortex-A9 (Device Tree) Revision : 0000 Serial : 0000000000000000
Und noch ein neuer Spielplatz
Geschrieben von MMind am Mittwoch, 29. Mai 2013 in Rockchip
Die letzten Wochen war ich mit einem ganz besonderen neuen Spielzeug beschäftigt — einem Tablet basierend auf dem RK3066-SoC von Rockchip. Grundlage des RK3066 ist eine Dual-Core Cortex-A9 ARM-CPU die mit bis zu 1,6 GHz läuft und durch die üblichen Komponenten (I2C, SPI, etc) ergänzt wird.
Ist-Zustand
Rockchip-Geräte sind anscheinend recht weit verbreitet, da die SoCs recht günstig zu haben sind. Die Kernel-Quellen zu einigen dieser Geräte sind verfügbar, entsprechen aber leider dem Erwartungsbild für Hersteller-Kernel-Quellen — d.h. in keiner Weise mainline-Kernel-tauglich.
Um Rockchip-basierende Geräte hat sich auch eine kleine »Community« gebildet, die aber auch nur an diesen verfügbaren Kernelquellen herumbastelt. Im mainline-Kernel sind Rockchip-SoCs darum ein unbeschriebenes Blatt — genauso wie ich es mag.
Deshalb konnte ich während der letzten Wochen mal versuchen auch im Low-Level-Bereich der SoC-Unterstützung Erfahrungen zu sammeln.
Erste Patchserie
Wie es scheint hatten die Rockchip-Designer keine Lust alle Komponenten neu zu entwickeln, sondern waren für viele von diesen bei Anbietern von standardisierten Komponenten einkaufen. So kommen z.B. mindestens die seriellen Ports, Timer, USB-OTG, MMC- und SPI-Controller aus der Designware-Reihe von Synopsys.
Montag war es dann soweit und ich konnte die erste Patchserie and die entsprechenden Mailinglisten senden. Der größte Posten dabei war der Pinctrl-Treiber, der für die Verwaltung der Pins und GPIOs des Chips verantwortlich ist. Unerwarteterweise gab es keine sehr großen Kritiken, sondern eigentlich nur kleinere Verbesserungsvorschläge.
Es gab aber auch erweiterte Hausaufgaben. Im mainline-Kernel ist es nicht erlaubt, nur an seinen eigenen Sandkasten zu denken, und der Pinctrl-Treiber kam anscheinend genau zu dem Zeitpunkt, an dem eine Verallgemeinerung von oftmals genutzten Funktionen an der Zeit war. D.h. ich habe diese Aufgabe geerbt, um dann meinen Treiber mit diesen Neuerungen platzieren zu können.
Trotz dessen sollte 3.11 mit einem Quentchen Glück noch zu schaffen sein — sonst dann erst 3.12.
Seite 1 von 1, insgesamt 3 Einträge