SlideShare a Scribd company logo
Tel:010-68492999      Fax: 010-68492337     www.zylogic.com.cn


               uClinux 下如何写 framebuffer 设备驱动


  下面的内容主要是关于 framebuffer 的一些知识, 主要是根据我们实际开发过
程中的一些体会,其中难免错漏之处, 欢迎指正。

什么是 framebuffer 设备
  framebuffer 是一种能够提取图形的硬件设备,是用户进入图形界面很好的接
口。有了 framebuffer,用户的应用程序不需要对底层的驱动的深入了解就能够做
出很好的图形。
  对 于 用 户 而 言 , 它 和 /dev 下 面 的 其 他 设 备 没 有 什 么 区 别 , 用 户 可 以 把
framebuffer 看成一块内存,既可以向这块内存中写入数据,也可以从这块内存中
读取数据。
  第一个被注册的 framebuffer 的 minor 等于 0,第二个被注册的 framebuffer
的 minor 等于 1,以此类推。

framebuffer 内部结构
  数据结构:framebuffer 设备很大程度上依靠了下面四个数据结构。这三个结构
在 fb.h 中声明。
  Struct fb_var_screeninfo
  Struct fb_fix_screeninfo
  Struct fb_info
  第一个结构是用来描述图形卡的特性的。通常是被用户设置的。
  第二个结构定义了图形卡的硬件特性, 是不能改变的,用户选定了哪一个图形
卡,那么它的硬件特性也就定下来了。
  第三个结构定义了当前图形卡 framebuffer 设备的独立状态,一个图形卡可能
有两个 framebuffer, 在这种情况下,就需要两个 fb_info 结构。这个结构是唯一
在内核空间可见的。



     #1460, New Century Hotel Office Building. No.6 Southern Road Capital Gym. Beijing 100044
          北京首都体育馆南路六号新世纪饭店写字楼 1460 室 邮编:100044
Tel:010-68492999      Fax: 010-68492337     www.zylogic.com.cn


设计自己的 framebuffer 设备驱动
   用户首先需要添加下面的代码到 fbmem.c
       static struct {
                    const char *name;
                    int (*init)(void);
                    int (*setup)(char*);
   } fb_drivers[] __initdata = {
   #ifdef CONFIG_FB_YOURCARD
                    { "driver_name", xxxfb_init, xxxfb_setup },
   #endif


   其 次 在 xxfb.c 中 根 据 自 己 的 需 要 重 新 分 配 显 存 大 小 。 例 如 : #define
VIDEOMEMSIZE     (1*1024*1024) /* 1 MB */
   再次根据自己的硬件设备修改相应的 var 信息。主要修改 xxfb_set_var(struct
fb_var_screeninfo *var, int con, struct fb_info *info)函数。

如何添加 framebuffer 设备驱动
   首先在 config.in 文件中添加一行代表用户自己驱动的选项。具体做法请参考
config.in 的帮助文档。
   在 make menuconfig 的时候首先进入 Character devices,选中里面的 Virtual
terminal 和 Support for console on virtual terminal.
   退到上一层界面我们就可以看到 Console device 的选项,进入后将光标落在
Framebuffer Support 上,按回车键进入,在里面选择自己所需要的 framebuffer
设备即可。自己所添加的设备驱动的类型(如果在 uclinux 下,应该以*选中,而不
是 M 选中),在编译的时候就会产生相应的 o 文件。
   在 Advanced low level 中可以配置 bpp packed pixel support,然后选中 Select
compiled-in fonts 即可。


      #1460, New Century Hotel Office Building. No.6 Southern Road Capital Gym. Beijing 100044
           北京首都体育馆南路六号新世纪饭店写字楼 1460 室 邮编:100044
Tel:010-68492999      Fax: 010-68492337     www.zylogic.com.cn

  等操作系统运行以后就会在/dev 下面看到 fb 这个设备。它的 major 应该是 29,
第一个设备的 minor 应该是 0。



如何使用 framebuffer 设备
  我们可以在几个支持图形显示的平台上开发一些图形界面。例如 microwindows,
minigui,Qtembed,等等。在这里我们就不详细介绍具体做法,感兴趣的朋友可以
到我们网站上下载。
  这里我们假设用户已经通过 tftp 或者 mount 命令将测试例子 demo 传到
/var/test 目录下。在/test 目录下启动后台服务程序./nano-X &,这时可以看到屏
幕有一个闪动,然后会变为黑色,接着就可以运行测试程序了,执行./demo 即可。




    #1460, New Century Hotel Office Building. No.6 Southern Road Capital Gym. Beijing 100044
         北京首都体育馆南路六号新世纪饭店写字楼 1460 室 邮编:100044

More Related Content

DOCX
Linux實務 第6組-xbmc結合各式server教學文件
PDF
一小時學不會的 Vim
PDF
S3C44B0 User Guide
PDF
S3C44B0 User Guide
DOC
Kick start无人值守批量安装linux
PDF
Windows Mobile 多媒體應用程式開發
PDF
[嵌入式系統] 嵌入式系統進階
PPT
Linux系统工程师教程
Linux實務 第6組-xbmc結合各式server教學文件
一小時學不會的 Vim
S3C44B0 User Guide
S3C44B0 User Guide
Kick start无人值守批量安装linux
Windows Mobile 多媒體應用程式開發
[嵌入式系統] 嵌入式系統進階
Linux系统工程师教程

Similar to Framebuffer (20)

PPT
Windows Mobile 多媒體應用程式開發
PPT
TI702_Android_MID
PDF
系統程式 -- 第 11 章
PPT
MySQL新技术探索与实践
PPT
How to write Platform Devices and Drivers with FPGA via GPMC
PPT
部門會議 950619 Leon的錦囊妙計
PPT
0118 Windows Server 2008 的伺服器核心 (Server Core)
PPTX
广告投放代码和创意代码持续优化
PDF
Mini6410+++º +¦ß-20101121
PDF
Mini6410+++º +¦ß-20101121
DOC
尚观Linux研究室 linux驱动程序全解析
DOC
Nagios的安装部署和与cacti的整合(linuxtone)
PPT
Introduction To Direct Show
PPT
Introduction To Direct Show
PPTX
VCACICM6_M05_Blueprints_and_Catalog Services.pptx
PPTX
常用开发工具介绍
PDF
Build Your Own Android Toolchain from scratch
PDF
Ezilla
PPT
Vcon90 Final
PPT
第11讲 管理Cisco互联网络
Windows Mobile 多媒體應用程式開發
TI702_Android_MID
系統程式 -- 第 11 章
MySQL新技术探索与实践
How to write Platform Devices and Drivers with FPGA via GPMC
部門會議 950619 Leon的錦囊妙計
0118 Windows Server 2008 的伺服器核心 (Server Core)
广告投放代码和创意代码持续优化
Mini6410+++º +¦ß-20101121
Mini6410+++º +¦ß-20101121
尚观Linux研究室 linux驱动程序全解析
Nagios的安装部署和与cacti的整合(linuxtone)
Introduction To Direct Show
Introduction To Direct Show
VCACICM6_M05_Blueprints_and_Catalog Services.pptx
常用开发工具介绍
Build Your Own Android Toolchain from scratch
Ezilla
Vcon90 Final
第11讲 管理Cisco互联网络
Ad

Recently uploaded (20)

PPTX
3分钟读懂肯塔基大学毕业证UK毕业证学历认证
PPTX
3分钟读懂伦敦大学学院毕业证UCL毕业证学历认证
PPTX
3分钟读懂滑铁卢大学毕业证Waterloo毕业证学历认证
PPTX
3分钟读懂贵湖大学毕业证U of G毕业证学历认证
PPTX
3分钟读懂曼彻斯特大学毕业证UoM毕业证学历认证
PPTX
3分钟读懂福特汉姆大学毕业证Fordham毕业证学历认证
PPTX
3分钟读懂贝尔法斯特女王大学毕业证QUB毕业证学历认证
PPTX
3分钟读懂渥太华大学毕业证UO毕业证学历认证
PPTX
3分钟读懂伦敦南岸大学毕业证LSBU毕业证学历认证
PPTX
3分钟读懂加州大学欧文分校毕业证UCI毕业证学历认证
PPTX
3分钟读懂诺里奇艺术大学毕业证NUA毕业证学历认证
PPTX
3分钟读懂皇家艺术学院毕业证RCA毕业证学历认证
PPTX
A Digital Transformation Methodology.pptx
PPTX
ONU and OLT from Baudcom Jenny training PPT
PPTX
3分钟读懂圣安德鲁斯大学毕业证StAnd毕业证学历认证
PDF
想要安全提高成绩?我们的黑客技术采用深度伪装和多层加密手段,确保你的信息安全无忧。价格公道,流程简单,同时提供全面的信息保护和事后痕迹清理,让你轻松提升G...
PPTX
3分钟读懂索尔福德大学毕业证Salford毕业证学历认证
PPTX
《HSK标准教程4下》第15课课件new.pptx HSK chapter 15 pptx
PPTX
3分钟读懂利物浦约翰摩尔大学毕业证LJMU毕业证学历认证
PDF
黑客出手,分数我有!安全可靠的技术支持,让你的GPA瞬间提升,留学之路更加顺畅!【微信:viphuzhao】
3分钟读懂肯塔基大学毕业证UK毕业证学历认证
3分钟读懂伦敦大学学院毕业证UCL毕业证学历认证
3分钟读懂滑铁卢大学毕业证Waterloo毕业证学历认证
3分钟读懂贵湖大学毕业证U of G毕业证学历认证
3分钟读懂曼彻斯特大学毕业证UoM毕业证学历认证
3分钟读懂福特汉姆大学毕业证Fordham毕业证学历认证
3分钟读懂贝尔法斯特女王大学毕业证QUB毕业证学历认证
3分钟读懂渥太华大学毕业证UO毕业证学历认证
3分钟读懂伦敦南岸大学毕业证LSBU毕业证学历认证
3分钟读懂加州大学欧文分校毕业证UCI毕业证学历认证
3分钟读懂诺里奇艺术大学毕业证NUA毕业证学历认证
3分钟读懂皇家艺术学院毕业证RCA毕业证学历认证
A Digital Transformation Methodology.pptx
ONU and OLT from Baudcom Jenny training PPT
3分钟读懂圣安德鲁斯大学毕业证StAnd毕业证学历认证
想要安全提高成绩?我们的黑客技术采用深度伪装和多层加密手段,确保你的信息安全无忧。价格公道,流程简单,同时提供全面的信息保护和事后痕迹清理,让你轻松提升G...
3分钟读懂索尔福德大学毕业证Salford毕业证学历认证
《HSK标准教程4下》第15课课件new.pptx HSK chapter 15 pptx
3分钟读懂利物浦约翰摩尔大学毕业证LJMU毕业证学历认证
黑客出手,分数我有!安全可靠的技术支持,让你的GPA瞬间提升,留学之路更加顺畅!【微信:viphuzhao】
Ad

Framebuffer

  • 1. Tel:010-68492999 Fax: 010-68492337 www.zylogic.com.cn uClinux 下如何写 framebuffer 设备驱动 下面的内容主要是关于 framebuffer 的一些知识, 主要是根据我们实际开发过 程中的一些体会,其中难免错漏之处, 欢迎指正。 什么是 framebuffer 设备 framebuffer 是一种能够提取图形的硬件设备,是用户进入图形界面很好的接 口。有了 framebuffer,用户的应用程序不需要对底层的驱动的深入了解就能够做 出很好的图形。 对 于 用 户 而 言 , 它 和 /dev 下 面 的 其 他 设 备 没 有 什 么 区 别 , 用 户 可 以 把 framebuffer 看成一块内存,既可以向这块内存中写入数据,也可以从这块内存中 读取数据。 第一个被注册的 framebuffer 的 minor 等于 0,第二个被注册的 framebuffer 的 minor 等于 1,以此类推。 framebuffer 内部结构 数据结构:framebuffer 设备很大程度上依靠了下面四个数据结构。这三个结构 在 fb.h 中声明。 Struct fb_var_screeninfo Struct fb_fix_screeninfo Struct fb_info 第一个结构是用来描述图形卡的特性的。通常是被用户设置的。 第二个结构定义了图形卡的硬件特性, 是不能改变的,用户选定了哪一个图形 卡,那么它的硬件特性也就定下来了。 第三个结构定义了当前图形卡 framebuffer 设备的独立状态,一个图形卡可能 有两个 framebuffer, 在这种情况下,就需要两个 fb_info 结构。这个结构是唯一 在内核空间可见的。 #1460, New Century Hotel Office Building. No.6 Southern Road Capital Gym. Beijing 100044 北京首都体育馆南路六号新世纪饭店写字楼 1460 室 邮编:100044
  • 2. Tel:010-68492999 Fax: 010-68492337 www.zylogic.com.cn 设计自己的 framebuffer 设备驱动 用户首先需要添加下面的代码到 fbmem.c static struct { const char *name; int (*init)(void); int (*setup)(char*); } fb_drivers[] __initdata = { #ifdef CONFIG_FB_YOURCARD { "driver_name", xxxfb_init, xxxfb_setup }, #endif 其 次 在 xxfb.c 中 根 据 自 己 的 需 要 重 新 分 配 显 存 大 小 。 例 如 : #define VIDEOMEMSIZE (1*1024*1024) /* 1 MB */ 再次根据自己的硬件设备修改相应的 var 信息。主要修改 xxfb_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info)函数。 如何添加 framebuffer 设备驱动 首先在 config.in 文件中添加一行代表用户自己驱动的选项。具体做法请参考 config.in 的帮助文档。 在 make menuconfig 的时候首先进入 Character devices,选中里面的 Virtual terminal 和 Support for console on virtual terminal. 退到上一层界面我们就可以看到 Console device 的选项,进入后将光标落在 Framebuffer Support 上,按回车键进入,在里面选择自己所需要的 framebuffer 设备即可。自己所添加的设备驱动的类型(如果在 uclinux 下,应该以*选中,而不 是 M 选中),在编译的时候就会产生相应的 o 文件。 在 Advanced low level 中可以配置 bpp packed pixel support,然后选中 Select compiled-in fonts 即可。 #1460, New Century Hotel Office Building. No.6 Southern Road Capital Gym. Beijing 100044 北京首都体育馆南路六号新世纪饭店写字楼 1460 室 邮编:100044
  • 3. Tel:010-68492999 Fax: 010-68492337 www.zylogic.com.cn 等操作系统运行以后就会在/dev 下面看到 fb 这个设备。它的 major 应该是 29, 第一个设备的 minor 应该是 0。 如何使用 framebuffer 设备 我们可以在几个支持图形显示的平台上开发一些图形界面。例如 microwindows, minigui,Qtembed,等等。在这里我们就不详细介绍具体做法,感兴趣的朋友可以 到我们网站上下载。 这里我们假设用户已经通过 tftp 或者 mount 命令将测试例子 demo 传到 /var/test 目录下。在/test 目录下启动后台服务程序./nano-X &,这时可以看到屏 幕有一个闪动,然后会变为黑色,接着就可以运行测试程序了,执行./demo 即可。 #1460, New Century Hotel Office Building. No.6 Southern Road Capital Gym. Beijing 100044 北京首都体育馆南路六号新世纪饭店写字楼 1460 室 邮编:100044