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

  • 1
  • 2
  • 3
  • 4
  • 下一页

相关内容