`
helloyesyes
  • 浏览: 1306570 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

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中的可变参数:

注册帧缓冲设备:

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

激活设置:

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

设置颜色表:

修改调色板:

分享到:
评论

相关推荐

    Linux常见驱动源码分析(kernel hacker修炼之道全集)--李万鹏

    Linux驱动修炼之道-framebuffer(中).pdf Linux驱动修炼之道-framebuffer(下).pdf Linux驱动修炼之道-framebuffer(上).pdf Linux驱动修炼之道-DMA框架源码分析(下).pdf Linux驱动修炼之道-DMA框架...

    Linux设备驱动之Framebuffer分析

    在Linux内核中,Framebuffer(帧缓冲)驱动作为显示驱动的标准之一,具有重要的地位。它将显示设备抽象为帧缓冲区,用户通过内存映射到进程地址空间后,可以直接进行读写操作,而且写操作可以在屏幕上即时显示出来。...

    LCD-framebuffer代码分析

    在Linux系统中,framebuffer驱动程序通常作为内核模块存在。它包含了初始化、配置、映射内存以及更新LCD屏幕等关键功能。例如,8th_LCD-framebuffer系统可能包含以下部分: 1. **驱动注册**:驱动程序通过`register...

    Linux设备驱动之Framebuffer分析.pdf

    Linux设备驱动之Framebuffer分析.pdf

    Linux设备驱动之Framebuffer分析[归纳].pdf

    总的来说,Framebuffer驱动在Linux中扮演着连接用户空间和显示硬件的角色,提供了一套标准的接口,简化了图形输出的编程。理解和利用好Framebuffer驱动及其相关结构体,能帮助开发者更有效地编写和调试LCD设备驱动...

    linux framebuffer打开图片

    linux framebuffer编程,显示BMP图片

    linux下用framebuffer显示BMP文件的C源代码

    在Linux中,framebuffer设备通常位于`/dev/fb0`,`/dev/fb1`等,这些设备节点提供对硬件图形缓冲区的直接访问。要使用framebuffer,我们需要打开设备文件,并获取其相关配置,例如宽度、高度、颜色深度等。 接下来...

    linux2.6.30.4_framebuffer移植LCD驱动

    Framebuffer 驱动机制是 Linux 内核中对基于 framebuffer 的 LCD 驱动支持非常完善的机制。Framebuffer 驱动机制可以将 LCD 显示屏作为一个 framebuffer 设备,实现图形化的显示。 4、驱动移植: 驱动移植是指将 ...

    linux内核驱动详解1

    | |-- FRAMEBUFFER应用程序范例 | | `-- fb_display | | |-- fb_display.c | | |-- fb_display.h | | |-- Makefile | | |-- README | | `-- test.c | `-- S3C2410 LCD驱动 | |-- s3c2410fb.c | `-- s3c2410fb.h |-- ...

    Linux 设备驱动开发详解 代码

    Linux 设备驱动开发详解 linuxdriver_code_tool |-- 03 | `-- 2.6内核升级工具 | |-- device-mapper-1.00.19-2.i386.rpm | |-- lvm2-2.00.25-1.01.i386.rpm | |-- mkinitrd-4.2.0.3.tar.tar | |-- module-init-tools...

    linux下USB摄像头采集及通过framebuffer显示

    在 Linux 系统中,Framebuffer 可以被视为一个特殊的设备文件(通常位于 `/dev/fb0`),通过对此文件的读写操作,可以直接访问并修改显示缓冲区的内容,从而实现图像的显示。Framebuffer 的使用非常灵活,不仅可以...

    Linux FrameBuffer驱动设计文档

    文档中提到了在开始接触Linux并着手FrameBuffer驱动开发之前,需要掌握的基础知识主要包括以下几个方面: ##### 1. ARM平台知识与汇编语言基础 - **ARM架构**:理解ARM处理器的基本架构特点及其指令集。 - **汇编...

    图像显示之Linux Framebuffer.pdf

    在 Linux Framebuffer 中,register_framebuffer() 函数是底层硬件驱动注册函数,unregister_framebuffer() 函数是底层硬件驱动注销函数。Linux Framebuffer 也是一个字符设备(主设备号是 29),在内核中使用 ...

    基于ARM9&Linux的液晶驱动终端设计--【千锋培训】

    工作流程中,系统启动时,ARM9从NOR Flash加载Linux内核和根文件系统到SDRAM,然后启动内核并挂载文件系统,之后运行应用程序,接受并处理串口命令,通过Framebuffer驱动将图形界面数据传输给LCD控制器。 2. 硬件...

    在树莓派下framebuffer+spi驱动

    在这个场景中,我们关注的是如何利用framebuffer和SPI(Serial Peripheral Interface)驱动来控制屏幕显示。树莓派是一个基于ARM架构的微型电脑,它具有丰富的GPIO(General Purpose Input/Output)引脚,可以连接...

    framebuffer驱动全篇

    Framebuffer驱动全篇主要涉及的是Linux系统中对显卡驱动的实现,特别是通过Framebuffer设备来抽象显卡硬件,使得应用程序可以更容易地访问和控制显示硬件,而无需了解底层硬件细节。Framebuffer设备是一种特殊的字符...

    6410-linux驱动程序的位置

    ### 6410-Linux驱动程序的位置及详细介绍 #### 一、概述 本文档旨在为Mini6410和Tiny6410开发板的用户介绍Linux系统中各种驱动程序的具体位置及其所对应的设备名。这两款开发板在硬件资源分配上保持了一致性,因此...

    luvcview-framebuffer

    之前论坛上一个仁兄把luvcview中的sdl去除了,得到luvcview简单版并可以交叉编译。可以运行但是不能再lcd上显示。luvcview-framebuffer 在那位兄弟的基础上加了framebuffer的操作,并把摄像头原始YUYV的数据转换成...

Global site tag (gtag.js) - Google Analytics