修改嵌入式linux驅動支持不同的LCD

本文中使用的是周立功EPC-287開發板,其中處理器是Freescale ARM9 i.MX287。廠家提供的linux內核源碼包含了幾種支持的lcd,在內核源碼目錄下通過make ARCH=arm menuconfig查看內核配置項,進入Device Drives-->Graphics support-->MXS Frambuffer driver-->Select i.MXS PANEL LCD VGA LVDS

如下圖所示,已經默認支持四種格式的LCD,屏幕尺寸是4.3寸和7寸。

1.如果要添加自己的LCD,可以先改一下內核目錄下的Kconfig文件,Kconfig在內核源碼目錄/drivers/video/mxs/Kconfig。如果我要添加一個5.6寸的LCD,打開Kconfig文件在 endchoice之前添加如下內容

config MY56LCD
    bool "MY56LCD"
        depends on FB_MXS

重新使用make ARCH=arm menuconfig進入內核配置界面,可以看到剛纔加入的配置項了,選中MY56LCD,如下圖。

2.修改驅動文件

驅動文件在linux-2.6.35.3/drivers/video/mxs/lcd_43wvf1g.c,還有別的.c文件,爲什麼修改lcd_43wvf1g.c這是由Makefile文件決定的,也可以使用別的.c文件,在Makefile中做對應的修改 就行了。打開lcd_43wvf1g.c,添加如下內容

#ifdef CONFIG_MY56LCD'
#define LCM_NAME "MY56LCD"
#define DOTCLK_FREQUENCY_HZ   9000000
#define DOTCLK_H_ACTIVE 640 
#define DOTCLK_H_PULSE_WIDTH  41
#define DOTCLK_HF_PORCH  5
#define DOTCLK_HB_PORCH  5
#define DOTCLK_V_ACTIVE 480
#define DOTCLK_V_PULSE_WIDTH 20
#define DOTCLK_VF_PORCH  5
#define DOTCLK_VB_PORCH  5
#define LCD_PANEL_TYPE   MXS_LCD_PANEL_DOTCLK            // DE模式
#endif

上面定義了LCD的各項參數像分辨率,刷新頻率等,可以根據LCD廠家提供的文檔來確定。

3.編譯內核

編譯內核時如果沒有在頂層Makefile中指定ARCH和CROSS_COMPILE,可以使用下面的命令編譯:

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

如果已經在Makefile中指定了ARCH和CROSS_COMPILE,可以直接make uImage。

編譯完成如果出現提示:

"mkimage" command not found - U-Boot images will not be built

這是應爲沒有安裝u-boot-tools,執行

sudo apt-get install u-boot-tools

安裝完成以後重新執行命令:

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage

可以在arch/arm/boot/目錄下生成uImage文件。

4.燒寫內核

我所使用的開發板支持usb、tftp燒寫內核,tftp速度更快,通常使用tftp燒寫。開發板上電後一直按着空格,等到進入u-boot命令行以後執行

run upkernel

等待燒寫完成,重啓開發板就能看到更新後的效果了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章