#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. Jenkins pipeline中使用内置全局变量

    在pipeline中不像在windows batch command中直接%WORKSPACE%这样 需要写成这样: echo env.WORKSPACE

  2. spring 3.0版本以上jar包使用以及依赖关系

    本文转载自:http://blog.csdn.net/huiwenjie168/article/details/8477837 spring.jar是包含有完整发布的单个jar包,spring.jar ...

  3. 开源一款强大的文件服务组件(QJ_FileCenter)(系列二 安装说明)

    系列文章 1. 开源一款强大的文件服务组件(QJ_FileCenter)(系列一) 2. 开源一款强大的文件服务组件(QJ_FileCenter)(系列二 安装说明) 3. 开源一款强大的文件服务组件 ...

  4. WinForm 窗体应用程序(初步)之三

    进程: 进程,简单的说,就是让你的程序启动另一个程序. 1.Process.Start("calc");//启动计算器 弊端:只认识系统自带的程序,如果写错系统会崩溃. 2. // ...

  5. composer 学习与推荐资料

    今天看了一下composer,前几天开始用包依赖,以前一直都是自己手动配.今天用了composer,要学习的话可以按照以下链接学习: 1 官方文档: http://docs.phpcomposer.c ...

  6. iterrows() 函数对dataframe进行遍历

    for循环遍历dataframe,返回有一个元祖类型,第一个是行的索引,第二个是series,是每一行的内容.

  7. LWIP

    LWIP 今天要谈的不是LWIP协议栈的内容,只是简单谈谈关于STM32F407快速使用LWIP做网络通讯的一些经历. 我是一个网络小白,对网络知识一窍不通,仅仅是知道有IP地址.网关这玩意,也从来没 ...

  8. 原 form 表单中 disabled 属性的元素不参与表单提交

    https://blog.csdn.net/benben683280/article/details/79173336

  9. TX2 安装v4l

    在TX2上使用v4l2-ctl --all -d /dev/video0查看相机参数时报错: v4l2-ctl :command not found 手动安装: sudo apt-get instal ...

  10. pycharm连接数据库出现时区jdbc问题

    unrecognized or represents more than one time zone. You must configure either the server or JDBC dri ...