Linux驱动修炼之道-framebuffer(中)

努力成为linux kernel hacker的人李万鹏原创作品,为梦而战。转载请标明出处

http://blog.csdn.net/woshixingaaa/archive/2011/05/29/6452689.aspx

下面详细分析一下framebuffer的驱动源码,framebuffer作为一个平台驱动注册进内核:

在arch/arm/plat-s3c24xx/devs.c中定义了framebuffer的平台设备:

devs.c中的这个函数把s3c2410fb_mach_info存放到s3c_device_lcd.dev.platform_data,probe函数中会用到的。

这个函数是在arch/arm/mach-s3c2440/mach-smdk2440.c中的smdk2440_machine_init中调用的,所以在系统启动后会自动调用。

s3c2410fb_display表示屏的显示参数,这个结构体在我们移植LCD驱动的时候需要根据我们屏的参数重新设置。

将s3c2410fb_display结构体存于s3c2410fb_mach_info的displays域。

下面来看看当lcd驱动和设备匹配成功后会调用的探测函数:

这里调用了s3c24xxfb_probe(pdev, DRV_S3C2410),进行了一层封装,因为这样这部分代码可以与s3c2412进行复用。

总结一下探测函数完成的任务:
1)申请fb_info结构体的内存空间,初始化fb_info结构中固定和可变的内存参数,即填充fb_info中的fb_var_screeninfo var和struct fb_fix_screeninfo fix成员。
2)申请帧缓冲设备的显示缓冲区空间
3)注册帧缓冲设备

中断处理函数:

填充调色板:

申请帧缓冲设备fb_info的缓冲区空间:

初始化相关寄存器:

设置fb_info中的可变参数:

Linux驱动修炼之道-framebuffer(中)_第1张图片

Linux驱动修炼之道-framebuffer(中)_第2张图片

注册帧缓冲设备:

设置参数,根据可变参数设置固定参数:

激活设置:

显示空白:blank_mode有5中模式,是一个枚举,定义在include/linux/fb.h中:

设置颜色表:

修改调色板:

你可能感兴趣的:(linux,Blog,三星)