导航:首页 > 编程语言 > linuxframebuffer编程

linuxframebuffer编程

发布时间:2025-07-10 02:41:23

‘壹’ 怎么用命令对framebuffer清屏

framebuffer 通过dd 进行清屏操作

/dev/graphics/fb0 /dev/zero

linux的fb设备文件一般是 /dev/fb0,

执行dd if=/dev/zero of=/dev/graphics/fb0 bs=1280 count=720 实现清屏

也可以通过fbset对framebuffer来进行设置

内核当中的一种驱动程序接口。这种接口将显示设备抽象为帧缓冲区。用户可以将它看成是显示内存的一个映像,将其映射到进程地址空间之后,

就可以直接进行读写操作,而写操作可以立即反应在屏幕上。该驱动程序的设备文件一般是 /dev/fb0、/dev/fb1 等等。

比如,假设现在的显示模式是 1024x768-8 位色,则可以通过如下的命令清空屏幕:

$ dd if=/dev/zero of=/dev/fb0 bs=1024 count=768

有一些特殊的设备文件。例如/dev/zero文件代表一个永远输出 0的设备文件,使用它作输入可以得到全为空的文件。

因此可用来创建新文件和以覆盖的方式清除旧文件。

下面使用dd命令将从zero设备中创建一个10K大小(bs决定每次读写1024字节,count定义读写次数为10次),但内容全为0的文件。

# dd if=/dev/zero of=file count=10 bs=1024

10+0 records

in

10+0 records out

10240 bytes transferred in 0.001408 secs

(7267903 b ytes/sec)

‘贰’ framebuffer驱动程序 如何调用硬件加速

首先不太清楚你说的framebuffer驱动程序具体指的是什么。
一般意义的framebuffer驱动指的是管理framebuffer。首先framebuffer上的内容如何刷新到显示器上,这是display驱动完成的的。(Display的是图形驱动的一个固定术语,用来描述如何把framebuffer上的内容显示到显示器上的这一过程)。现代图形系统,一般至少会有一个实际的framebuffer,这个上面的内容最终会显示出去。同时会有若干off-screen的framebuffer。这些off-screen framebuffer是用来给应用程序画图。当完成画图之后,再把这些图形整合到实际的framebuffer上。有时候为了性能,可能不止一个实际的framebuffer,多个存在,但是一个周期只能显示一个framebuffer。这其中就涉及图像内容的拷贝,缩放,翻转,透明化等一系列操作。这些操作,如果GPU支持硬件加速的话,理论上就可以在驱动程序里实现。方法无非是在驱动程序里操作GPU的寄存器,设置好操作类型,提供好缓存,然后做好同步工作,让硬件来完成上述的图形操作。至于如何调用,驱动程序肯定会有接口出来的。这个和驱动程序设计有关。微软,linux这样的操作系统也有标准的硬件加速接口,驱动程序只要去实现了,应用程序就可以使用。

‘叁’ 怎么修改android 启动过程中的第二个开机画面

第一个开机画面是在内核启动的过程中出现的,它是一个静态的画面。第二个开机画面是在init进程启动的过程中出现的,它也是一个静态的画面。第三个开机画面是在系统服务启动的过程中出现的,它是一个动态的画面。无论是哪一个画面,它们都是在一个称为帧缓冲区(frame buffer,简称fb)的硬件设备上进行渲染的。接下来,我们就分别分析这三个画面是如何在fb上显示的。
1. 第一个开机画面的显示过程
Android系统的第一个开机画面其实是Linux内核的启动画面。在默认情况下,这个画面是不会出现的,除非我们在编译内核的时候,启用以下两个编译选项:
CONFIG_FRAMEBUFFER_CONSOLE
CONFIG_LOGO
第一个编译选项表示内核支持帧缓冲区控制台,它对应的配置菜单项为:Device Drivers ---> Graphics support ---> Console display driver support ---> Framebuffer Console support。第二个编译选项表示内核在启动的过程中,需要显示LOGO,它对应的配置菜单项为:Device Drivers ---> Graphics support ---> Bootup logo。配置Android内核编译选项可以参考在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)一文。
帧缓冲区硬件设备在内核中有一个对应的驱动程序模块fbmem,它实现在文件kernel/goldfish/drivers/video/fbmem.c中,它的初始化函数如下所示:

/**
* fbmem_init - init frame buffer subsystem
*
* Initialize the frame buffer subsystem.
*
* NOTE: This function is _only_ to be called by drivers/char/mem.c.
*
*/

static int __init
fbmem_init(void)
{
proc_create("fb", 0, NULL, &fb_proc_fops);

if (register_chrdev(FB_MAJOR,"fb",&fb_fops))
printk("unable to get major %d for fb devs\n", FB_MAJOR);

fb_class = class_create(THIS_MODULE, "graphics");
if (IS_ERR(fb_class)) {
printk(KERN_WARNING "Unable to create fb class; errno = %ld\n", PTR_ERR(fb_class));
fb_class = NULL;
}
return 0;
}
这个函数首先调用函数proc_create在/proc目录下创建了一个fb文件,接着又调用函数register_chrdev来注册了一个名称为fb的字符设备,最后调用函数class_create在/sys/class目录下创建了一个graphics目录,用来描述内核的图形系统。

模块fbmem除了会执行上述初始化工作之外,还会导出一个函数register_framebuffer:

EXPORT_SYMBOL(register_framebuffer);
这个函数在内核的启动过程会被调用,以便用来执行注册帧缓冲区硬件设备的操作,它的实现如下所示:

/**
* register_framebuffer - registers a frame buffer device
* @fb_info: frame buffer info structure
*
* Registers a frame buffer device @fb_info.
*
* Returns negative errno on error, or zero for success.
*
*/

int
register_framebuffer(struct fb_info *fb_info)
{
int i;
struct fb_event event;
......

if (num_registered_fb == FB_MAX)
return -ENXIO;

......

num_registered_fb++;
for (i = 0 ; i < FB_MAX; i++)
if (!registered_fb[i])
break;
fb_info->node = i;
mutex_init(&fb_info->lock);
fb_info->dev = device_create(fb_class, fb_info->device,
MKDEV(FB_MAJOR, i), NULL, "fb%d", i);
if (IS_ERR(fb_info->dev)) {
/* Not fatal */
printk(KERN_WARNING "Unable to create device for framebuffer %d; errno = %ld\n", i, PTR_ERR(fb_info->dev));
fb_info->dev = NULL;
} else
fb_init_device(fb_info);

......

registered_fb[i] = fb_info;

event.info = fb_info;
fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event);
return 0;
}
由于系统中可能会存在多个帧缓冲区硬件设备,因此,fbmem模块使用一个数组registered_fb保存所有已经注册了的帧缓冲区硬件设备,其中,每一个帧缓冲区硬件都是使用一个结构体fb_info来描述的。

‘肆’ 精通嵌入式Linux编程图书目录

第1章 概论

1.1 嵌入式系统的基本概念

1.2 嵌入式系统的特征

1.3 选择Linux构建嵌入式系统

1.4 GUI在嵌入式Linux系统中的地位及要求

1.5 用户界面概况

1.5.1 用户界面的历史

1.5.2 图形用户界面的特征

1.5.3 图形用户界面系统的结构模型

1.5.4 用户界面的发展:GUI+新人机交互技术

1.6 Linux图形环境及桌面平台简介

1.7 各种嵌入式 Linux上的图形库与GUI系统介绍

1.7.1 Qt/Embedded

1.7.2 MicroWindows/NanoX

1.7.3 MiniGUI

1.7.4 OpenGUI

1.7.5 GTK+

1.8 Linux系统中的多语言问题

1.9 一个嵌入式LinuxGUI系统开发的实例

1.9.1 开发GUI系统主要考虑的问题

1.9.2 后续讲解的实例

第2章 Linux基本编程知识

2.1 编译器的使用

2.2 函数库的使用

2.3 Makefile

2.4 GDB

2.5 建立交叉编译环境

第3章 Linux高级程序设计简介

3.1 Linux IPC介绍

3.1.1 信号

3.1.2 管道

3.1.3 消息队列

3.1.4 信号量

3.1.5 共享内存

3.1.6 Domain Socket

3.2 Linux多线程编程介绍

3.2.1 创建线程

3.2.2 线程的退出与取消

3.2.3 线程退出时的同步问题

3.2.4 线程清理函数

3.2.5 线程取消状态

3.2.6 线程同步

3.2.7 第三方函数库

3.3 FrameBuffer编程简介

第4章 基本体系结构

4.1 基础知识

4.1.1 嵌入式Linux的GUI到底有什么用

4.1.2 如何定义基本体系结构

4.1.3 为什么用客户机/服务器结构

4.1.4 为什么要多进程

4.1.5 为什么要多线程

4.2 体系结构综述

4.2.1 客户机与服务器之间的通信通道

4.2.2 客户机需要与服务器交换什么信息

4.2.3 服务器对客户机进程的管理

4.3 进程创建与进程的管理

第5章 多窗口的设计与实现

第6章 GUI中的消息管理

第7章 窗口输出及无效区的管理

第8章 DC与GDI的设计与实现

第9章 控件实现

第10章 定制GUI对图像的支持

第11章 字库及输入法的实现

第12章 GUI的移植

第13章 LGUI应用开发模式

第14章 GUI系统的效率问题

后记——LGUI开发的一些体会

参考文献

阅读全文

与linuxframebuffer编程相关的资料

热点内容
泰拉瑞亚13服务器ip地址怎么看 浏览:871
python数据拟合最小二乘法 浏览:412
手语编程基础教学 浏览:248
安卓手机关注后还要下载什么 浏览:9
ui和编程哪个更好 浏览:290
电气自动化与程序员哪个好 浏览:454
bbc翻译app哪个好 浏览:288
ios隐藏单个app怎么回复 浏览:816
泉城办app怎么样 浏览:152
如何用优盘安装服务器 浏览:121
第八弹解压密码 浏览:772
程序员离职后如何走出低谷 浏览:156
代驾司机app软件怎么下载 浏览:580
js源码网站搭建 浏览:765
河源粤运app怎么下载 浏览:684
微信订单监控源码 浏览:452
苏州市免费简单加密软件 浏览:667
java正则表达式校验 浏览:45
什么叫服务器扫爆 浏览:448
很粘人程序员男朋友 浏览:140