Linux 2.6.30.4 内核移植LCD驱动
Linux 2.6.30.4 内核移植LCD驱动
Kernel:2.6.30.4
os:Ubuntu 8.10
gcc:arm-linux-gcc (3.4.4)
cpu:s3c2410
1.编译设置
使用arm-linux-交叉编译工具链
修改根目录下Makefile
193 194行
ARCH ?= arm
CROSS_COMPILE ?=arm-linux-
2.内核移植
nand 分区
修改 arch/arm/plat-s3c24xx/common-smdk.c 中的nand分区
static struct mtd_partition smdk_default_nand_part[] = {
[0] = {
.name = "bootloader ",
.size = 0x00100000,//1M
.offset = 0,
},
[1] = {
.name = "kernel",
.offset = 0x00100000,
.size = 0x00300000,//3M
},
[2] = {
.name = "root",
.offset = 0x00400000,
.size = 0x02800000,//40M
},
[3] = {
.name = "user",
.offset = 0x02d00000,
.size = 0x00f00000,//15M
}
};
此时如果运行
#make s3c2410_defconfig 启用s3c2410默认内核配置
#make menuconfig
修改
boot option
default command line
root=/dev/mtdblock2 init=linuxrc console=ttySAC0,115200
运行
#make zImage
此时的内核就可在板上跑通了。
3.LCD 驱动移植
修改arch/arm/mach-s3c2410/mach-smdk2410.c
static struct s3c2410fb_display s3c2410fb_lcd_display __initdata = {
.width = 320,
.height = 240,
.xres = 320,
.yres = 240,
.bpp = 16,
.lcdcon5 = S3C2410_LCDCON5_FRM565|
S3C2410_LCDCON5_INVVCLK|
S3C2410_LCDCON5_INVVLINE|
S3C2410_LCDCON5_INVVFRAME|
S3C2410_LCDCON5_HWSWP|
(0<<7)|
(0<<6)|
(0<<1),
.type = S3C2410_LCDCON1_TFT,
.pixclock = 270000,
.left_margin = 7,
.right_margin = 8,
.hsync_len = 29,
.upper_margin = 11,
.lower_margin = 14,
.vsync_len = 2,
};
static struct s3c2410fb_mach_info s3c2410fb_lcdcfg __initdata = {
.displays = &s3c2410fb_lcd_display,
.num_displays = 1,
.default_display = 0,
.lpcsel = 0x0,
.gpccon = 0xaa9556a9,
.gpccon_mask =0xfffffff,
.gpcup = 0xffffffff,
.gpcup_mask = 0xffffffff,
.gpdcon = 0xaaaaaaaa,
.gpdcon_mask = 0xfffffff,
.gpdup = 0xffffffff,
.gpdup_mask = 0xffffffff,
};
在static void __init smdk2410_init(void)中加入:
s3c24xx_fb_set_platdata(&s3c2410fb_lcdcfg);
用提供的s3c2410fb.c 替换drivers/video/s3c2410fb.c
选上
Device Drivers ---> Graphics support ---> [*] Bootup logo --->
root@yan-laptop:/home/yan/kernel/linux-2.6.30.4# make menuconfig
make: *** /home/yan/kernel/linux-2.6.30.4/arch/arm: 是一个目录。 停止。
这是因为你在没有修改Makefile之前就执行了make menuconfig
这时就生成一些pc版本的linux的配置导致错误。
解决方法:
执行make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
或者删除源文件,重新解压后修改Makefile然后执行make menuconfig
这个时候可以不执行任何设置,保存即可。
arch/arm/mach-s3c2410/mach-smdk2410.c:65: error: variable `s3c2410fb_lcd_display' has initializer but incomplete type
定义在 ./arch/arm/mach-s3c2410/include/mach/fb.h中
添加 #include <mach/fb.h>
drivers/video/s3c2410fb.c:32:31: asm/arch/regs-lcd.h: 没有该文件或目录
drivers/video/s3c2410fb.c:33:32: asm/arch/regs-gpio.h: 没有该文件或目录
drivers/video/s3c2410fb.c:34:25: asm/arch/fb.h: 没有该文件或目录
修改为 mach/regs-lcd.h
mach/regs-gpio.h
mach/fb.h
drivers/video/s3c2410fb.c:812: error: `OST' undeclared (first use in this function)
在42行 定义 #define OST 0
|
评论暂时关闭