#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的更多相关文章

  1. Android6.0机型上调用系统相机拍照返回的resultCode值始终等于0的问题

    版权声明:本文为博主原创文章,未经博主允许不得转载. 正常情况下调用系统相机拍照: 如果拍照后点击的是“确定”图标,返回的resultCode = -1(Activity.RESULT_OK): 如果 ...

  2. mysql之 sysbench1.0.3 安装与系统压力测试

    针对系统和数据库压测是项目上线前必做的一项,这里使用的是最新版本的sysbench做的压测使用详解.sysbench可以做系统层面的压力测试(CPU.内存.硬盘IO.互斥锁.Thead),也可以做数据 ...

  3. i.mx6 Android6.0.1分析input子系统:测试

    getevent与sendevent工具 Android系统提供了getevent与sendevent两个工具供开发者从设备节点中直接读取输入事件或写入输入事件. 在这里,我们测试音量加和音量减按键 ...

  4. [RK3288][Android6.0] 调试笔记 --- 替换系统签名【转】

    本文转载自:http://blog.csdn.net/kris_fei/article/details/55100299 Platform: RK3288OS: Android 6.0Kernel: ...

  5. Android6.0内核移植(1):分析编译日志

    在下面命令之后产生的编译日志进行分析 source build/envsetup.sh lunch sabresd_6dq-user make -j20 ======================= ...

  6. Android6.0内核移植(2):kernel编译内核

    普通步骤是:用来编译整个Android源码 source build/envsetup.sh lunch sabresd_6dq-user make -j20 不过每次这样太繁琐,下面来单独编译ker ...

  7. [IMX6]Android6.0移植和分析

    0. 知识点 中断(设备树) [IMX6]设备树分析--dts 1. 编译 Android6.0内核移植(1):分析编译日志 Android6.0内核移植(2):kernel编译内核 单独烧录kern ...

  8. Android项目的targetSDK>=23,在低于Android6.0的部分测试机(类似华为)上运行时出现的系统权限问题

    相信大家对Android6.0以上的动态权限已经有所了解,很多童鞋也已经跃跃欲试地将自己项目的targetSDK升级到了23及其以上,很不幸的是我也成为了其中一员,然而我还是图样图森破了,升级之后的问 ...

  9. android6.0系统Healthd分析及低电量自动关机流程

    系统平台:android6.0概述Healthd是android4.4之后提出来的一种中介模型,该模型向下监听来自底层的电池事件,向上传递电池数据信息给Framework层的BatteryServic ...

随机推荐

  1. CheckBox使用记录

    页面显示 页面代码 <div> <div><input type="checkbox" value="" class=" ...

  2. WM_COPYDATA+BHO+Qt实现进程间通信

    最近项目有一个需求:点击网页上某个按钮,通知Qt客户端.网页相关操作使用了BHO,BHO与Qt通信通过WB_COPYDATA,为什么这么麻烦呢,因为项目正好用到了BHO,可能还有其他方式,能直接通过网 ...

  3. soundPool的使用

    SoundPool soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100); HashMap<Integer, Integer& ...

  4. GO学习笔记 - 用defer来实现try{}finally{}

    在Delphi中,try{}finally{}语句非常有用,对于一定要最终执行的语句,我们放到finally,从而保证程序顺利执行!在GO语言中没有try{}finally{}语句,但是GO语言用另外 ...

  5. linux系统无法启动,提示give root password for maintenance错误

    电脑的虚拟机安装的是centos6.2操作系统,今天打开虚拟机时候,提示 give root password for maintenance (or type control-D to contin ...

  6. 鸡肋点搭配ClickJacking攻击-获取管理员权限

    作者:jing0102 前言 有一段时间没做测试了,偶尔的时候也会去挖挖洞.本文章要写的东西是我利用ClickJacking拿下管理员权限的测试过程.但在说明过程之前,先带大家了解一下ClickJac ...

  7. var 是 Java 开发的好朋友啊!

    简评:Java var != JavaScript var. Java 10 中引入了新的语法用于局部变量类型推断,很多开发者有所疑惑,希望这篇文章能帮到你. 什么是类型推断 其实在 Java 中类型 ...

  8. Spring Boot 中使用 jpa

    本文原文版权归 CSDN Hgihness 所有,此处为转载+技术收藏,如有再转请自觉于篇头处标明原文作者及出处,这是大家对作者劳动成果的自觉尊重!! 作者:Hgihness 原文:http://bl ...

  9. git简易入门(github)

    本文讲解下git的使用,包括使用git上传项目工程到github,以及错误解决. 1.安装git 使用apt-get安 sudo apt-get update sudo apt-get install ...

  10. Myeclipse设置自动联想功能

    ///声明,博客园暂无转载功能,这篇博客是转载自贞心真义. 最近初学Java,正在使用MyEclipse来编写新的项目,刚开始打开MyEclipse感觉这个工具既陌生又熟悉,熟悉之处在于编辑器的几大共 ...