FB打印与驱动分析

一般来说,调试信息可以通过串口输出,也可以通过Lcd屏幕输出。输出的终端就是/dev/tty1

比如:ls -l > /dev/tty1

这时候就可以在LCD屏上看到输出的打印字符。

当你想在屏幕上显示“hello",echo "hello" > /dev/tty1


在程序中,可以打开这个设备,如:

#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>

int main()
{
int fp;
fp = open("/dev/tty1",O_RDWR);
write(fp,"hello world\n",3);

}

程序中无法使用命令的功能。


fb是通过描点的方式


#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <linux/fb.h>
#include <sys/mman.h>


int main () {
 int fp=0;
 struct fb_var_screeninfo vinfo;
 struct fb_fix_screeninfo finfo;
 long screensize=0;
 char *fbp = 0;
 int x = 0, y = 0;
 long location = 0;
 fp = open ("/dev/fb0",O_RDWR);

 if (fp < 0){
  printf("Error : Can not open framebuffer device/n");
  exit(1);
 }

 if (ioctl(fp,FBIOGET_FSCREENINFO,&finfo)){
  printf("Error reading fixed information/n");
  exit(2);
 }
 
 if (ioctl(fp,FBIOGET_VSCREENINFO,&vinfo)){
  printf("Error reading variable information/n");
  exit(3);
 }

  screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
 //这就是把fp所指的文件中从开始到screensize大小的内容给映射出来,得到一个指向这块空间的指针
 fbp =(char *) mmap (0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fp,0);
   if ((int) fbp == -1)
     {
        printf ("Error: failed to map framebuffer device to memory./n");
        exit (4);
     }
//这是你想画的点的位置坐标,(0,0)点在屏幕左上角
  x = 100;
  y = 100;
  location = x * (vinfo.bits_per_pixel / 8) + y  *  finfo.line_length;

  *(fbp + location) = 100;  // 蓝色的色深  直接赋值来改变屏幕上某点的颜色
  *(fbp + location + 1) = 15; // 绿色的色深 
  *(fbp + location + 2) = 200; // 红色的色深*   
  *(fbp + location + 3) = 0;  // 是否透明* 



  munmap (fbp, screensize); 
  close (fp);    
  return 0;

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值