Android6.0.1 移植:显示系统(一)--测试framebuffer
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>
#include <string.h>
#include <stdlib.h> /*
可编程信息
struct fb_var_screeninfo {
__u32 xres; //x轴像素点数量
__u32 yres; //y轴像素点数量
__u32 xres_virtual; //虚拟屏x轴
__u32 yres_virtual; //虚拟屏y轴
__u32 xoffset;
__u32 yoffset;
__u32 bits_per_pixel; //色深
__u32 grayscale;
struct fb_bitfield red; //fb缓存的R\G\B位域
struct fb_bitfield green;
struct fb_bitfield blue;
struct fb_bitfield transp;
__u32 nonstd;
__u32 activate;
__u32 height; //屏幕的高度
__u32 width; //屏幕的宽度
__u32 accel_flags;
__u32 pixclock;
__u32 left_margin;
__u32 right_margin;
__u32 upper_margin;
__u32 lower_margin;
__u32 hsync_len;
__u32 vsync_len;
__u32 sync;
__u32 vmode;
__u32 rotate;
__u32 colorspace;
__u32 reserved[4];
}; 固定信息
struct fb_fix_screeninfo {
char id[16]; //标识符
unsigned long smem_start; //fb缓存的起始位置
__u32 smem_len; //fb缓存的大小
__u32 type;
__u32 type_aux;
__u32 visual;
__u16 xpanstep;
__u16 ypanstep;
__u16 ywrapstep;
__u32 line_length;
unsigned long mmio_start; //内存映射I/O的开始位置
__u32 mmio_len; //内存映射I/O的长度
__u32 accel;
__u16 capabilities;
__u16 reserved[2];
}
*/ char *fb_addr;
unsigned fb_size; void print_screen(char *buf,int width,int height); int main(int argc,char *argv[])
{
int fd=; struct fb_fix_screeninfo fb_fix;
struct fb_var_screeninfo fb_var; char *env=NULL; short *picture;
int ret;
env="/dev/graphics/fb0";
//env="/sys/class/graphics/fb0"; fd=open(env,O_RDWR);
printf("aplex test v2 \n");
printf("fd= %s\n",env); ioctl(fd,FBIOGET_FSCREENINFO,&fb_fix); printf("fb_fix.line_length=%u\n",fb_fix.line_length);
printf("fb_fix.accel=%u\n",fb_fix.accel); ioctl(fd,FBIOGET_VSCREENINFO,&fb_var); printf("fb_var.xres=%u\n",fb_var.xres);
printf("fb_var.yres=%u\n",fb_var.yres);
printf("fb_var.xres_virtual=%u\n",fb_var.xres_virtual);
printf("fb_var.yres_virtual=%u\n",fb_var.yres_virtual); fb_size=fb_var.yres*fb_fix.line_length; /*fb_addr的获取,是很核心的步骤,表示成功获得了framebuffer设备*/
fb_addr=(char *)mmap(NULL,fb_size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,); picture=(char *)malloc(fb_var.yres*fb_fix.line_length);
memset(picture,0xFF,fb_var.yres*fb_fix.line_length);
/*注意,这里对颜色的赋值只是一次赋一半值,也就是一个字节,8bit*/
/*而事实上,一个像素的颜色值是16bit*/
/*0xFFFF就是白色*/
/*介绍一下16bit的颜色的类型,颜色是由RGB组成,如果是565排列,
则依次为Red Green Blue
11111 111111 11111
*/ print_screen(picture,fb_var.xres,fb_var.yres); return ;
} void print_screen(char *buf,int width,int height)
{
short *t_data=(short *)buf; short *t_fb_addr=(short *)fb_addr; int bytew=width<<; /*像素数乘以2即是字节数,因为颜色深度是2个字节(16bit)*/ while(--height>=)
{
memcpy(t_fb_addr,t_data,bytew); /*一行的数据赋值*/
t_fb_addr += width;
t_data += width;
}
}
root@sabresd_6dq:/data # ./frameworkTest
aplex test v2
fd= /dev/graphics/fb0
fb_fix.line_length=
fb_fix.accel=
fb_var.xres=
fb_var.yres=
fb_var.xres_virtual=
fb_var.yres_virtual=
现象:
上半个屏幕显示为全白色
Android6.0.1 移植:显示系统(一)--测试framebuffer的更多相关文章
- Android6.0机型上调用系统相机拍照返回的resultCode值始终等于0的问题
版权声明:本文为博主原创文章,未经博主允许不得转载. 正常情况下调用系统相机拍照: 如果拍照后点击的是“确定”图标,返回的resultCode = -1(Activity.RESULT_OK): 如果 ...
- mysql之 sysbench1.0.3 安装与系统压力测试
针对系统和数据库压测是项目上线前必做的一项,这里使用的是最新版本的sysbench做的压测使用详解.sysbench可以做系统层面的压力测试(CPU.内存.硬盘IO.互斥锁.Thead),也可以做数据 ...
- i.mx6 Android6.0.1分析input子系统:测试
getevent与sendevent工具 Android系统提供了getevent与sendevent两个工具供开发者从设备节点中直接读取输入事件或写入输入事件. 在这里,我们测试音量加和音量减按键 ...
- [RK3288][Android6.0] 调试笔记 --- 替换系统签名【转】
本文转载自:http://blog.csdn.net/kris_fei/article/details/55100299 Platform: RK3288OS: Android 6.0Kernel: ...
- Android6.0内核移植(1):分析编译日志
在下面命令之后产生的编译日志进行分析 source build/envsetup.sh lunch sabresd_6dq-user make -j20 ======================= ...
- Android6.0内核移植(2):kernel编译内核
普通步骤是:用来编译整个Android源码 source build/envsetup.sh lunch sabresd_6dq-user make -j20 不过每次这样太繁琐,下面来单独编译ker ...
- [IMX6]Android6.0移植和分析
0. 知识点 中断(设备树) [IMX6]设备树分析--dts 1. 编译 Android6.0内核移植(1):分析编译日志 Android6.0内核移植(2):kernel编译内核 单独烧录kern ...
- Android项目的targetSDK>=23,在低于Android6.0的部分测试机(类似华为)上运行时出现的系统权限问题
相信大家对Android6.0以上的动态权限已经有所了解,很多童鞋也已经跃跃欲试地将自己项目的targetSDK升级到了23及其以上,很不幸的是我也成为了其中一员,然而我还是图样图森破了,升级之后的问 ...
- android6.0系统Healthd分析及低电量自动关机流程
系统平台:android6.0概述Healthd是android4.4之后提出来的一种中介模型,该模型向下监听来自底层的电池事件,向上传递电池数据信息给Framework层的BatteryServic ...
随机推荐
- 记录---IIS显示asp.net程序的具体错误
原来IIS设置成显示单一的错误页面 但是最近的服务器页面报错,但是本地确实完好的:所以想着让服务器显示具体的报错 网上找到两种方法: 先说第一种有效的: 通过 web.config 配置 其实,上面在 ...
- 将实体转换为Hashtable
1.将实体转换为Hashtable,用于将实体参数处理为hashtable,方便sql参数传递 /// <summary> /// 将实体转换为Hashtable /// </sum ...
- brew安装指定版本boost
brew 如何安装指定版本的boost brew uninstall boost brew install boost@1.57 brew link boost@1.57 --force --over ...
- 1、认识Struts2
先上百度百科的权威说明:一定注意我下面做标记的话: 框架就是一个半成品,就是可以帮我们完成一些业务 1. 什么是Struts2的框架 * Struts2是Struts1的下一代产品,是在 struts ...
- jQuery中的each, data, 插件
一. each() $(' ').each(function (){...}) jQuery.each(collection, callback(indexInArray, valueOfEleme ...
- Java笔记(一)GC及类加载
垃圾回收器(GC) 垃圾回收器:java中有一个线程,专门负责JVM中垃圾内存的释放 垃圾:没有引用的内存节点 垃圾回收的算法 注意:垃圾回收有自己的算法,我们是不能控制垃圾回 ...
- docker 实例设置自动重启
yaml格式太严格了,每个冒号后面都必须带有空格在linux中./代表当前目录,属于相对路径../代表上一级目录,属于相对路径/代表根目录,/开头的文件都是绝对路径./configure的意思是执行当 ...
- mysql随机取出若干条记录的实用方法
1.常见的方法 ; 这种方法可以随机取得数据,但是如果表比较大,数据量很多的时候会很耗时. 2.优化后的方式 ) as t ); 分析,首先根据条件筛选出要选的数据,然后随机排序取出要的条数的id , ...
- AssertJ断言系列-----------<数据库断言二>
那么,在实际的接口测试中,我们除了要断言响应的数据正确之外,可能有的还需要断言数据层是否数据真的有入库. assertj db是可以直接对数据库进行断言和操作的. 一.创建一个students表 CR ...
- 数据结构基础 ---- 数组的理解和实现(Java)
什么是数组 数组是由类型相同的数据元素构成的有序集合,每个元素称为数组元素,每个元素受n(n>= 1)个线性关系的约束,每个元素在n个线性关系中的序号i1, i2, ....., in称该元素的 ...