首页 > 编程语言 >Framebuffer 应用编程中涉及的 API 函数

Framebuffer 应用编程中涉及的 API 函数

时间:2023-07-03 11:06:36浏览次数:57  
标签:文件 驱动程序 映射 int 编程 ioctl API Framebuffer 函数


论  坛:http://bbs.100ask.net/(学术答疑)
公 众 号:百问科技


版本

日期

作者

说明

V1

2020

韦东山

摘自《嵌入式Linux应用开发完全手册》

本节程序的目的是:打开 LCD 设备节点,获取分辨率等参数,映射 Framebuffer,最后实现描点函数。

5.2.1 open 函数

在 Ubuntu 中执行“man 2 open”,可以看到 open 函数的说明:

Framebuffer 应用编程中涉及的 API 函数_linux


头文件:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

函数原型:

int open(const char *pathname, int flags); int open(const char
*pathname, int flags, mode_t mode);

函数说明:
① pathname 表示打开文件的路径;
② Flags 表示打开文件的方式,常用的有以下 6 种,
 a. O_RDWR 表示可读可写方式打开;
 b. O_RDONLY 表示只读方式打开;
 c. O_WRONLY 表示只写方式打开;
 d. O_APPEND 表示如果这个文件中本来是有内容的,则新写入的内容会接续到原来内容的后面;
 e. O_TRUNC 表示如果这个文件中本来是有内容的,则原来的内容会被丢弃,截断;
 f. O_CREAT 表示当前打开文件不存在,我们创建它并打开它,通常与 O_EXCL 结合使用,当没有文件时
创建文件,有这个文件时会报错提醒我们;
③ Mode 表示创建文件的权限,只有在 flags 中使用了 O_CREAT 时才有效,否则忽略。
④ 返回值:打开成功返回文件描述符,失败将返回-1。

5.2.2 ioctl 函数

在 Ubuntu 中执行“man ioctl”,可以看到 ioctl 函数的说明:

Framebuffer 应用编程中涉及的 API 函数_单片机_02


头文件:

#include <sys/ioctl.h>

函数原型:

int ioctl(int fd, unsigned long request, ...);

函数说明:
① fd 表示文件描述符;
② request 表示与驱动程序交互的命令,用不同的命令控制驱动程序输出我们需要的数据;
③ … 表示可变参数 arg,根据 request 命令,设备驱动程序返回输出的数据。
④ 返回值:打开成功返回文件描述符,失败将返回-1。

ioctl 的作用非常强大、灵活。不同的驱动程序内部会实现不同的 ioctl,APP 可以使用各种 ioctl 跟驱动程序交互:可以传数据给驱动程序,也可以从驱动程序中读出数据。

5.2.3 mmap 函数

在 Ubuntu 中执行“man mmap”,可以看到 mmap 函数的说明:

Framebuffer 应用编程中涉及的 API 函数_单片机_03


想更深刻地理解 mmap 的内部机制,可以看《嵌入式 Linux 驱动开发基础知识》中关于 mmap 的介绍。作为 APP 开发,只需要知道它的用法就可以了。

头文件:

#include <sys/mman.h>

函数原型:

void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);

函数说明:
① addr 表示指定映射的內存起始地址,通常设为 NULL 表示让系统自动选定地址,并在成功映射后返回该
地址;
② length 表示将文件中多大的内容映射到内存中;
③ prot 表示映射区域的保护方式,可以为以下 4 种方式的组合
 a. PROT_EXEC 映射区域可被执行
 b. PROT_READ 映射区域可被读出
 c. PROT_WRITE 映射区域可被写入
 d. PROT_NONE 映射区域不能存取
④ Flags 表示影响映射区域的不同特性,常用的有以下两种
 a. MAP_SHARED 表示对映射区域写入的数据会复制回文件内,原来的文件会改变。
 b. MAP_PRIVATE 表示对映射区域的操作会产生一个映射文件的复制,对此区域的任何修改都不会写回 原来的文件内容中。 ⑤ 返回值:若成功映射,将返回指向映射的区域的指针,失败将返回-1。


标签:文件,驱动程序,映射,int,编程,ioctl,API,Framebuffer,函数
From: https://blog.51cto.com/weidongshan/6609494

相关文章

  • Linux系统驱动之编程_配置LCD控制器_基于IMX6ULL
    资料下载coding无法使用浏览器打开,必须用git工具下载:gitclonehttps://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git视频观看百问网驱动大全编程_配置LCD控制器_基于IMX6ULL参考资料,GIT仓库里:芯片资料IMX6ULL\开发板配套资料\datasheet\Core_board\CPU\IMX6ULL......
  • Linux系统驱动之编程_配置引脚_基于IMX6ULL
    资料下载coding无法使用浏览器打开,必须用git工具下载:gitclonehttps://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git视频观看百问网驱动大全编程_配置引脚_基于IMX6ULL参考资料,GIT仓库里:芯片资料IMX6ULL\开发板配套资料\datasheet\Core_board\CPU\IMX6ULLRM.pd......
  • 【技术积累】编程技术项目报告【编号:网页01号】
    工程计划  这个项目旨在通过开发一份WEB开发项目,本项目旨在通过使用主流的Web开发技术,如SpringBoot、Mybatis、Vue和Mysql等,来提升开发者的技术水平并实践所学知识。项目目标熟悉并掌握SpringBoot框架,了解其在Web开发中的应用;掌握Mybatis作为ORM工具的使用,实现与数据库的......
  • 前端Vue腾讯地图SDK Api经纬度解析为地址信息Geocoding 可用于定位经纬度信息解析为地
    前端Vue腾讯地图SDKApi经纬度解析为地址信息Geocoding可用于定位经纬度信息解析为地址, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13311效果图如下:cc-tencentGeocoding使用方法//引入腾讯地图sdkimportqqmapsdkfrom"../../util......
  • Google Colab:云端的Python编程神器
    GoogleColab,全名GoogleColaboratory,是GoogleResearch团队开发的一款云端编程工具,它允许任何人通过浏览器编写和执行Python代码。Colab尤其适合机器学习、数据分析和教育目的。它是一种托管式Jupyter笔记本服务,用户无需设置,就可以直接使用,同时还能获得GPU等计算资源的免费使用......
  • Flink API的4个层次
    从纵向来看Flink中的API分为4个层次,从下而上,API层次越高,抽象程度越高,使用起来越方便,灵活性则会降低。1、核心底层API核心底层API提供了Flink的最底层的分布式计算构建块的操作API,包含了ProcessFunction、状态、时间和窗口等操作的API。ProcessFunction是Flink提供的最具表现力的底......
  • 【笔试实战】LeetCode题单刷题-编程基础 0 到 1【一】
    1768. 交替合并字符串题目链接1768. 交替合并字符串题目描述给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回 合并后的字符串 。示例1:输入:wor......
  • 开心档之C++ Web 编程
    C++Web编程目录C++Web编程什么是CGI?Web浏览CGI架构图Web服务器配置第一个CGI程序实例HelloWorld!这是我的第一个CGI程序HTTP头信息CGI环境变量实例C++CGI库GET和POST方法使用GET方法传递信息简单的URL实例:Get方法实例简单的表单实例:G......
  • 从头学Java17-Stream API(一)
    StreamAPIStreamAPI是按照map/filter/reduce方法处理内存中数据的最佳工具。本系列中的教程包含从基本概念一直到collector设计和并行流。在流上添加中继操作将一个流map为另一个流map流是使用函数转换其元素。此转换可能会更改该流处理的元素的类型,但您也可以在不更改......
  • java -- 常见API` 1
        ......