嵌入式Linux之我行——S3C2440上LCD驱动(FrameBuffer)实例开发讲解(二)
嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤。一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便。如有错误之处,谢请指正。
?? 开发环境
主 ?机:VMWare--Fedora 9
开发板:Mini2440--64MB Nand, Kernel:
编译器:arm-linux-gcc-4.3.2
上接: \n _blankS3C2440 \n _blank上 \n _blankLCD \n _blank驱动 \n _blank(FrameBuffer) \n _blank实例开发详解(一)
四、帧缓冲(FrameBuffer)设备驱动实例代码:
①、建立驱动文件:my2440_lcd.c,依就是驱动程序的最基本结构:FrameBuffer驱动的初始化和卸载部分及其他,如下:
#include #include #include #include #include #include #include #include #include #include
#include #include #include #include #include #include #include #include #include
/*FrameBuffer设备名称*/static char?driver_name[] = "my2440_lcd";/*定义一个结构体用来维护驱动程序中各函数中用到的变量??先别看结构体要定义这些成员,到各函数使用的地方就明白了*/struct my2440fb_var{????int lcd_irq_no;?????????? /*保存LCD中断号*/????struct clk *lcd_clock;????/*保存从平台时钟队列中获取的LCD时钟*/????struct resource *lcd_mem;?/*LCD的IO空间*/????void __iomem *lcd_base;???/*LCD的IO空间映射到虚拟地址*/????struct device *dev;????struct s3c2410fb_hw?regs;?/*表示5个LCD配置寄存器,s3c2410fb_hw定义在mach-s3c2410/include/mach/fb.h中*/????/*定义一个数组来充当调色板。????据数据手册描述,TFT屏色位模式为8BPP时,调色板(颜色表)的长度为256,调色板起始地址为0x4D000400*/????u32????palette_buffer[256];?
????u32?pseudo_pal[16];???????unsigned int palette_ready;?/*标识调色板是否准备好了*/};/*用做清空调色板(颜色表)*/#define PALETTE_BUFF_CLEAR (0????/*LCD平台驱动结构体,平台驱动结构体定义在platform_device.h中,该结构体成员接口函数在第②步中实现*/static struct platform_driver lcd_fb_driver = {????.probe?????= lcd_fb_probe,?????????????? /*FrameBuffer设备探测*/????.remove????= __devexit_p(lcd_fb_remove),?/*FrameBuffer设备移除*/????.suspend???= lcd_fb_suspend,???????????? /*FrameBuffer设备挂起*/????.resume????= lcd_fb_resume,??????????????/*FrameBuffer设备恢复*/????.driver???