#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> #include <sys/mman.h> #include <linux/fb.h> #define FB_DEV "/dev/fb0" #define SCREEN_RED 0xFF0000
#define SCREEN_GREEN 0x00FF00
#define SCREEN_BLUE 0x0000FF void draw_point(unsigned int x,unsigned int y,unsigned int color);
void draw_line(unsigned int x0,unsigned int y0,unsigned int x1,unsigned int y1,unsigned int color); static struct fb_var_screeninfo varScreenInfo = {};
static struct fb_fix_screeninfo fixScreenInfo = {};
static unsigned int *pfb_buffer = NULL;
int main(void)
{
int ret = -;
int fd = -;
fd = open(FB_DEV, O_RDWR);
if(fd < )
{
perror("open");
close(fd);
return -;
}
ret = ioctl(fd, FBIOGET_FSCREENINFO,&fixScreenInfo);
if(ret < )
{
perror("ioctl");
close(fd);
return ret;
} ret = ioctl(fd, FBIOGET_VSCREENINFO,&varScreenInfo);
if(ret < )
{
perror("ioctl");
close(fd);
return ret;
}
printf("smem_len = %d\n",fixScreenInfo.smem_len);
printf("xres = %d; yres = %d\n",varScreenInfo.xres,varScreenInfo.yres);
printf("xres_virtual = %d; yres_virtual = %d\n",varScreenInfo.xres_virtual,varScreenInfo.yres_virtual); pfb_buffer = mmap(NULL, fixScreenInfo.smem_len, PROT_READ|PROT_WRITE, MAP_SHARED,fd,);
printf("pfb_buffer = %p\n",pfb_buffer);
draw_line(,,,,SCREEN_RED); close(fd);
return ;
} void draw_point(unsigned int x,unsigned int y,unsigned int color)
{
x %=varScreenInfo.xres_virtual;
y %=varScreenInfo.yres_virtual;
// printf("x = %d y = %d %p\n",x,y,(pfb_buffer + x + (y*varScreenInfo.xres_virtual)));
*(pfb_buffer + x + y*varScreenInfo.xres_virtual) = color;
}
void draw_line(unsigned int x0,unsigned int y0,unsigned int x1,unsigned int y1,unsigned int color)
{
unsigned int x=,y=;
float setp = (y1-y0)/(float)(x1-x0);
for(x=x0,y=y0;x<x1;x++)
{
draw_point(x,y,color);
y = y0+setp*(x-x0) ;
}
}

一. OS下操作LCD

1.1. 在应用中通过framebuffer操作LCD

1.2. framebuffer帧缓冲(简称fb)是linux内核中虚拟出的一个设备

1.3. framebuffer向应用层提供一个统一标准接口的显示设备

1.4. 从驱动来看,fb是一个典型的字符设备,而且创建了一个类/sys/class/graphics

二. 操作步骤

2.1. 设备文件 /dev/fbx。 其中x代表0,1,2。。。

2.2. 获取设备信息 #include <linux/fb.h>

2.3. mmap做映射

2.4. 填充framebuffer

三. 应用层开发注意事项

3.1. 使用mmap函数时,参数int prot一定是PROT_READ|PROT_WRITE,我开发时笔误写成PROT_READ|PROT_READ,结果一直Segmentation fault。

3.2. *(pfb_buffer + x + y*varScreenInfo.xres_virtual) = color;这里地址不用转换为char*进行运算

最新文章

  1. xcode8 升级后注释快键键不能使用的解决方法
  2. html2canvas插件对整个网页或者网页某一部分截图并保存为图片
  3. 【VLC-Android】LibVLC API简介(相当于VLC的MediaPlayer)
  4. Java Hour 29 Weather ( 2 ) Maven
  5. servlet-3_0-final-spec
  6. bzoj2395[Balkan 2011]Timeismoney最小乘积生成树
  7. Java API —— DateFormat类
  8. 每天进步一点点——Linux
  9. Codeforces Round#1
  10. Javascript新手集中营
  11. sysbench使用教程【转载】
  12. mysql常用基础操作语法(三)~~对数据的增删改操作【命令行模式】
  13. maven compile启动报错
  14. 01_Nginx安装,nginx下部署项目,nginx.conf配置文件修改,相关文件配置
  15. javascript学习(一)构建自己的JS库
  16. Linux中一个快速查找文件和目录的命令
  17. chip8模拟器的python3实现-1-CHIP8简介
  18. C++ boost.python折腾笔记
  19. Python—生成器
  20. loss函数学习笔记

热门文章

  1. 【hiho1044】状压dp1
  2. Maven高级
  3. Python中的网络扫描大杀器Scapy初探
  4. [原创]PHP代码修正之CodeSniffer
  5. PHPExcel组件编程spl_autoload_register
  6. 微信小程序 input 组件
  7. XML的基础之一(概念和语法)
  8. DAY 6 TEST
  9. WPF Good UI 2
  10. 十八、浏览器不能打开jenkins报告,报错Opening Robot Framework report failed