本文中使用的是周立功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
等待烧写完成,重启开发板就能看到更新后的效果了。