linux下 lcd显示程序,linux中在应用层lcd显示的操作

在Linux 系统中LCD的应用程序有特定编写模板。

1.打开/dev/fbX

fp = open ("/dev/fb0",O_RDWR);

2.获取可变参数,固定参数

ioctl(fp,FBIOGET_VSCREENINFO,&vinfo)  可变参数

ioctl(fp,FBIOGET_FSCREENINFO,&finfo)  固定参数

3.内存映射(mmap)

screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;

/*这就是把fp所指的文件中从开始到 screensize 大小的内容给映射出来,得到一个指向这块空间的指针*/

fbp =(unsigned char *) mmap (0, screensize,

PROT_READ | PROT_WRITE,

MAP_SHARED, fp,0);

4.使用映射后的地址对屏进行操作。

使用上面得到的 fbp 指针来操作显示缓冲区了。

把lcd看成是一块内存,使用mmap函数把它的缓冲区映射到进程空间中,然后通过映射后的地址直接操作驱动中的显示缓冲区,往这块缓冲写数据,lcd就会按数值转换成相应颜色显示在LCD屏上。

示例:要在(100,200) 处画一个点:

映射:

mmap:

void *mmap(void *addr, size_t length, int prot, int flags,

int fd, off_t offset);

功能:把文件的内存映射到进程的地址空间中。

参数:

addr: 设置一个可用的地址,一般情况你不知道哪个地址是可用的。所以,给0,表示由系统自动分配。

length:映射的长度

prot:属性,如PROT_READ,PROT_WRITE,

PROT_EXEC  映射后的地址空间可以执行代码.

PROT_READ  映射后可以读.

PROT_WRITE 映射后可以写

PROT_NONE  映射后不能访问

flags:保护标志

常用的是共享方式 MAP_SHARED

fd :open返回的文件描述符

offset:是从文件的哪个地方开始映射。

返回值:映射后的地址首地址

fbp =(unsigned char *) mmap (0, screensize,

PROT_READ | PROT_WRITE,

MAP_SHARED,

fp,0);

计算偏移:

off = (800*200+100) * 4;

写成通用的表示-->(xres *y + x) * bpp / 8;

写入数据:

*(unsigned int *)(fbp+off) = 0x00ff0000;

或:

* (fbp+off)   = 0x00;  //低地址存低字节

* (fbp+off+1) = 0x00;

* (fbp+off+2) = 0xff;

* (fbp+off+3) = 0x00;

封装成一个函数:

void show_pixle(int x,int y,unsigned int c)

{

location = x * (vinfo.bits_per_pixel / 8) + y  *  finfo.line_length;

*(unsigned int*)(fbp + location) = c;

}

LCD中的换屏技术:

从u-boot开始:

有一个 bootargs  环境变量,这里参数就是传递给内核的。

对tiny4412提供的内核,可以通过修改 bootargs 实现驱动不同的LCD屏。

bootargs=noinitrd root=/dev/nfs nfsroot=192.168.10.106:/root/work/root_nfs/ ip=192.168.10.123:192.168.10.106:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0 coherent_pool=2M lcd=S70

上面传递了 lcd=S70  ,就可以驱动不同屏。

内核启动阶段,根据lcd=S70这个信息,在注册平台设备/驱动前把LCD平台数据修改了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值