Modyfikowanie parametrów bufora ramki (/ dev / graphics / fb0) przy użyciu ładowalnego modułu jądra
Problem: Muszę skonfigurować różne wyświetlacze LCD, które będą używane przez platformę Android. Prawie we wszystkich przypadkach nie ma żadnych specyfikacji elektrycznych dostępnych dla wyświetlaczy LCD będących przedmiotem zainteresowania. Ale dzięki doświadczeniu i inżynierii odwrotnej parametry można odgadnąć dość dobrze. Próbuję użyć Loadable Kernel Modules, aby dostroić parametry wyświetlania (inne sugestie są również mile widziane). Poniżej znajdują się odpowiednie informacje.
HW: Atmel SAMA5D31-EK (procesor ARM 5)
POŁUDNIOWY ZACHÓD: Andriod Linux (Target), Ubuntu (Host System), Sourcery CodeBench (Cross Compiler) Fragmenty kodu z pliku board-dt.c
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;
.........
}
Dodałem ten kod, więc moduł ładowalnego jądra ma dostęp do struktury lcdc_data
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);
Kiedy wykonuję ładowalny moduł jądra, nie zauważam żadnych zmian na wyświetlaczu. Podejrzewam, że zmieniam zmienną (pamięć), ale rejestry nie zostały naruszone.
Pytanie: Czego mi brakuje? Czytałem o wykonywaniu wywołań do platform_driver_register () i platform_driver_unregister ().
Z góry dziękuję za pomoc.