微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式Linux之我行——S3C2440上LCD驱动(FrameBuffer)实例开发讲解

嵌入式Linux之我行——S3C2440上LCD驱动(FrameBuffer)实例开发讲解

时间:11-20 来源:互联网 点击:

//S3C2440初始化函数
staticvoid__init smdk2440_machine_init(void)
{

//调用该函数将上面定义的LCD硬件信息保存到平台数据中
s3c24xx_fb_set_platdata(&smdk2440_fb_info);

s3c_i2c0_set_platdata(NULL);

platform_add_devices(smdk2440_devices,ARRAY_SIZE(smdk2440_devices));
smdk_machine_init();
}

s3c24xx_fb_set_platdata定义在plat-s3c24xx/devs.c中:

void__init s3c24xx_fb_set_platdata(structs3c2410fb_mach_info*pd)
{
structs3c2410fb_mach_info*npd;

npd=kmalloc(sizeof(*npd),GFP_KERNEL);
if(npd){
memcpy(npd,pd,sizeof(*npd));

//这里就是将内核中定义的s3c2410fb_mach_info结构体数据保存到LCD平台数据中,所以在写驱动的时候就可以直接在平台数据中获取s3c2410fb_mach_info结构体的数据(即LCD各种参数信息)进行操作
s3c_device_lcd.dev.platform_data=npd;
}else{
printk(KERN_ERR"no memory for LCD platform data\n");
}
}

这里再讲一个小知识:不知大家有没有留意,在平台设备驱动中,platform_data可以保存各自平台设备实例的数据,但这些数据的类型都是不同的,为什么都可以保存?这就要看看platform_data的定义,定义在/linux/device.h中,void *platform_data是一个void类型的指针,在Linux中void可保存任何数据类型。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top