Ändern von Framebuffer-Parametern (/ dev / graphics / fb0) mithilfe eines ladbaren Kernel-Moduls

Problem: Ich muss verschiedene LCD-Anzeigen konfigurieren, die von Android Platform verwendet werden. In fast allen Fällen sind keine elektrischen Spezifikationen für interessierende LCD-Anzeigen frei verfügbar. Durch Erfahrung und Reverse Engineering lassen sich die Parameter jedoch recht gut erraten. Ich versuche, Loadable Kernel Modules zur Feinabstimmung der Anzeigeparameter zu verwenden (auch andere Vorschläge sind willkommen). Hier finden Sie die relevanten Informationen.

HW: Atmel SAMA5D31-EK (ARM 5 Prozessor)

SW: Andriod Linux (Ziel), Ubuntu (Host-System), Sourcery CodeBench (Cross Compiler) Code-Snippets aus der board-dt.c-Datei

static struct fb_videomode at91_tft_vga_modes[] = {
..... 
.xres =435;
.yres =235;
....
}
static struct fb_monspecs at91fb_default_monspecs = {
.........
.modedb = at91_tft_vga_modes,
......
}
static struct atmel_lcd_fb_info __initdata ek_lcdc_data = {
..........
.default_monspecs = & at91fb_default_monspecs;
.........
}

Ich habe diesen Code hinzugefügt, damit das Loadable Kernel Module Zugriff auf die Struktur lcdc_data hat

extern void set_fb_video(struct fb_videomode *mg_set_tft_vga_modes)
{
   ek_lcdc_data.default_monspecs->modedb->xres = mg_set_tft_vga_modes->xres;
}
EXPORT_SYMBOL(set_fb_video);

Wenn ich das ladbare Kernelmodul ausführe, bemerke ich keine Änderung in der Anzeige. Ich vermute, obwohl ich die Variable (Speicher) ändere, aber Register nicht betroffen sind.

Frage: Was vermisse ich? Ich habe gelesen, wie man platform_driver_register () und platform_driver_unregister () aufruft.

Danke im Voraus für Ihre Hilfe.

Antworten auf die Frage(0)

Ihre Antwort auf die Frage