Samstag, 16. Februar 2013

PogoPlug LED mit OpenWRT AA - funktioniert nur "fast"

Nachdem nun so einiges auf meinen PogoPlugs läuft, widme ich mich den Details...



Sobald man OpenWRT Attitude Adjustment auf dem Gerät installiert hat, fällt auf, dass an Stelle der ehemals grünen LED nun das orangene Lämpchen leuchtet. Der Kernel richtet offensichtlich alles ordentlich ein:

[   21.187053] Registered led device: plug:red:misc
[   21.187192] Registered led device: plug:green:health

Eine Steuerung ist allenfalls für die rote LED möglich (und auch das nur indem die grüne LED angesprochen wird):

echo default-on > /sys/class/leds/plug\:green\:health/trigger

Das Kommando

echo none > /sys/class/leds/plug\:green\:health/trigger
echo default-on > /sys/class/leds/plug\:red\:misc/trigger

führt dazu, dass alles dunkel bleibt.

Die Ursache dieses Verhalten liegt in der OpenWRT BuildRoot, die in der vorliegenden Version kein Profile Target für die Kirkwood Plattform enthält. Das bedeutet, sämtliche Kernel werden mit den standard SheevaPlug (Kirkwood Referenz Plattform) Einstellungen gebaut.
Während der Pogoplug problemlos mit dem Standardprofil funktioniert, sind es eben Kleinigkeiten wie die LED-Ansteuerung, die nicht funktionieren.

Ein kurzer Blick ins Kernel-Verzeichnis zeigt, dass im 3.3er Kernel sehr wohl noch die unterschiedlichen Profile vorhanden sind:

/* 
 *  linux-3.3.8/arch/arm/mach/kirkwood/sheevaplug-setup.c
 */
static struct gpio_led sheevaplug_led_pins[] = {
        {
                .name                   = "plug:red:misc",
                .default_trigger        = "none",
                .gpio                   = 46,
                .active_low             = 1,
        },
        {
                .name                   = "plug:green:health",
                .default_trigger        = "default-on",
                .gpio                   = 49,
                .active_low             = 1,
        },
};

/*
 * linux-3.3.8/arch/arm/mach/kirkwood/dockstar-setup.c
 */
static struct gpio_led dockstar_led_pins[] = {
        {
                .name                   = "dockstar:green:health",
                .default_trigger        = "default-on",
                .gpio                   = 46,
                .active_low             = 1,
        },
        {
                .name                   = "dockstar:orange:misc",
                .default_trigger        = "none",
                .gpio                   = 47,
                .active_low             = 1,
        },
};

Man müsste "nur" die BuildRoot entsprechend anpassen (am weitesten kompatibel ist der PogoPlug E02 mit dem Seagate DockStar). Eine Anleitung dazu findet sich z.B. im OpenWRT Forum.

Mal sehen, ob ich demnächst Zeit finde, um einen Patch zu basteln... bis dahin bleibt meine LED erstmal aus:

#/etc/config/system
#

config led green
        option  sysfs           plug:green:health
        option  trigger         none

config led red
        option  sysfs           plug:red.misc
        option  trigger         none