本文中使用的是周立功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
等待燒寫完成,重啓開發板就能看到更新後的效果了。