预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共30页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Linux的LCD驱动源码分析及移植(三部曲)第一部分:基于ARM9处理器的linux-2.6.32.2操作系统内核移植手记part5.1(LCD驱动源码分析及移植之platformdevice)1.与LCD控制器硬件相关的寄存器内容请参照三星S3C2440A技术手册中的第15章。2.LCDController的平台设备定义如下(文件位于linux/arch/arm/plat-s3c24xx/devs.c):/*LCDController*/staticstructresources3c_lcd_resource[]={[0]={.start=S3C24XX_PA_LCD,.end=S3C24XX_PA_LCD+S3C24XX_SZ_LCD-1,.flags=IORESOURCE_MEM,},[1]={.start=IRQ_LCD,.end=IRQ_LCD,.flags=IORESOURCE_IRQ,}};staticu64s3c_device_lcd_dmamask=0xffffffffUL;structplatform_devices3c_device_lcd={.name="s3c2410-lcd",.id=-1,.num_resources=ARRAY_SIZE(s3c_lcd_resource),.resource=s3c_lcd_resource,.dev={.dma_mask=&s3c_device_lcd_dmamask,.coherent_dma_mask=0xffffffffUL}};EXPORT_SYMBOL(s3c_device_lcd);平台设备的结构体定义为s3c_device_lcd,该设备在平台总线中的名字取为s3c2410-lcd,该平台设备申请的两个板级资源为以S3C24XX_PA_LCD为起始的IORESOURCE_MEM资源和一个定义为IRQ_LCD的IORESOURCE_IRQ资源。其中,#defineS3C24XX_PA_LCDS3C2410_PA_LCD/*LCDcontroller*/#defineS3C2410_PA_LCD(0x4D000000)#defineS3C24XX_SZ_LCDSZ_1M0x4D000000为LCDCON1寄存器的地址。3.LCDController的平台设备的注册如下(文件位于linux/arch/arm/mach-s3c2440/mach-smdk2440.c):staticstructplatform_device*smdk2440_devices[]__initdata={&s3c_device_usb,&s3c_device_lcd,&s3c_device_wdt,&s3c_device_i2c0,&s3c_device_iis,&s3c_device_rtc,};以上第4行代码将lcd平台设备注册进内核。4.在系统初始化时将smdk2440_fb_info结构体添加进平台设备的私有结构中。具体流程如下:4.1MACHINE_START(S3C2440,"SMDK2440")/*Maintainer:BenDooks<ben@fluff.org>*/.phys_io=S3C2410_PA_UART,.io_pg_offst=(((u32)S3C24XX_VA_UART)>>18)&0xfffc,.boot_params=S3C2410_SDRAM_PA+0x100,.init_irq=s3c24xx_init_irq,.map_io=smdk2440_map_io,.init_machine=smdk2440_machine_init,.timer=&s3c24xx_timer,MACHINE_END启动S3C2440机器,系统将通过“.init_machine=smdk2440_machine_init,”调用smdk2440_machine_init()函数。4.2staticvoid__initsmdk2440_machine_init(void){s3c24xx_fb_set_platdata(&smdk2440_fb_info);s3c_i2c0_set_platdata(NULL);platform_add_devices(smdk2440_devices,ARRAY_SIZE(smdk2440_devices));smdk_machine_init();}在smdk2440_machine_init函数中,通过“s3c24xx_fb_set_platdata(&smdk2440_fb_info);”将smdk2440_fb_info添加进平台设备的私有结构中。4.3void__inits3c24xx_fb_set_platda