嵌入式学习45——硬件相关

FrameBuffer:                                                                                                                                                   可以译作"帧缓冲",有时简称为 fbdrv。这是一种独立于硬件的抽象图形设备。
     是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,允许上层应用程序在图形模式下直接显示缓冲区进行 读写 操作

RGB888 在32位系统下  4个字节

RGB 565  在 16位系统下  2个字节

-------转自根号五


    
控制fb
对于应用层,通过操作 /dev/fb* ,通过 ioctl 来用各种命令控制fb
/usr/include/linux/fb.h   中查看

进入内核源码中看看<linux/fb.h>,里面定义了一些ioctl的命令
#define FBIOGET_VSCREENINFO 0x4600   //获取应用程序可改变的参数(如设定的分辨率)
#define FBIOPUT_VSCREENINFO 0x4601 
#define FBIOGET_FSCREENINFO 0x4602   //获取固定的参数(如屏幕的分辨率,一般只是拿来看看)
#define FBIOGETCMAP     0x4604
#define FBIOPUTCMAP     0x4605
#define FBIOPAN_DISPLAY     0x4606


<linux/fb.h>中还提供了专门的结构体类型,用来存放上述两个参数,如下就是存放可变参数的结构体类型
struct fb_var_screeninfo {
    __u32 xres;         /* visible resolution 可视画面的x、y轴分辨率      */ 
    __u32 yres;
    __u32 xres_virtual;     /* virtual resolution       */
    __u32 yres_virtual;
    __u32 xoffset;          /* offset from virtual to visible 可视画面相对于虚拟画面的x、y轴偏移量*/
    __u32 yoffset;          /* resolution           */

    __u32 bits_per_pixel;       /* guess what   像素深度        */
    __u32 grayscale;        /* != 0 Graylevels instead of colors */

    struct fb_bitfield red;     /* bitfield in fb mem if true color, */
    struct fb_bitfield green;   /* else only length is significant */
    struct fb_bitfield blue;
    struct fb_bitfield transp;  /* transparency         */  

    __u32 nonstd;           /* != 0 Non standard pixel format */

    __u32 activate;         /* see FB_ACTIVATE_*        */

    __u32 height;           /* height of picture in mm    */
    __u32 width;            /* width of picture in mm     */

    __u32 accel_flags;      /* (OBSOLETE) see fb_info.flags */

#include <sys/mman.h>

void *mmap(void *addr, size_t length, int prot, int flags,
                  int fd, off_t offset);
功能:                                                                                                                                                         内存映射
参数:
    addr:欲映射内存的起始地址,NULL表示系统自动选定,映射
          成功后返回该地址
    length:映射内存大小
    prot:映射区域的保护方式(读/写/执行/不能存取)
    flags:影响区域映射的各种特性


            MAP_SHARED:对映射区域写入的数据会复制回源文件内,
                        而且允许其他映射该文件的进程共享
            MAP_PRIVATE:对映射区域的写入操作会产生一个映射文件的复制,
                        即对此区域的任何修改都不会写回原来的文件内
    fd:要映射的目标文件
    offset:文件映射的偏移量(0代表从开头开始)
返回值:
    void * :返回映射欲映射内存的首地址
    eg:
    unsigned int* addr = mmap(NULL, 800*480*4, PROT_READ|PROT_WRITE,
            MAP_SHARED, fd, 0);

    
int munmap(void *addr, size_t length);
功能:                                                                                                                                                   解除内存映射
参数:
    addr:映射内存的地址
    length:映射内存大小
    

#include <sys/ioctl.h>
       
int ioctl(int fd, int request, ...);    
   ioctl(fd, FBIOGET_VSCREENINFO, &vinfo);    //获取屏幕信息(可变)
 

知识散记:

ctrl + ALt  +F3  原始终端      输入linux  1

ctrl + ALt  +F1  退出

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值