当前位置: 首页 > news >正文

嵌入式开发学习(第三阶段 Linux系统开发)

第二天:linux系统开发

环境搭建

  1. 安装VScode

    VSCode:严格意义上将,VSCode 它并不算通过完整的IDE,但是VSCode 支持插件安装,且VSCode本身提供了丰富的插件,使得开发者可以快速构建一个轻量级集成开发环境。

  2. 开发环境搭建

    1. 安装VSCode

      VScodeUserSteuup

    2. 安装编译工具链

    3. 安装VSCode插件

硬件设备访问

在这里插入图片描述

设备访问机制:应用程序不能直接访问硬件设备,只能借助系统调用接口来间接冯文硬件

因为linux系统一切皆文件,所以硬件设备访问往往也被转换为文件操作。

设备访问时,首先需要系统中硬件设备对应的设备文件再借助系统的IO函数达到访问的目的。

回顾:

  • 文件操作步骤:

    1. 打开文件
    2. 文件读写操作
    3. 关闭文件
  • 相关概念

    1. 在linux中如何标识一个文件?

      文件描述符(fd):本质是一个非负整数。

      什么是文件?
      简单的说,文件就是存储在硬件磁盘上的数据集合。

      文件通过什么来表示?
      系统中在处理的文件(读、写操作)的时候,需要唯一能够识别这个文件,就需要一个针对文件的标识,以便在其它地方能识别出这个文件,于是就产生了文件描述符。
      文件描述符:
      文件描述符是一些整数,简单的说就是一个文件ID,用于在系统中唯一的标识一个文件。文件描述符的总数也就是系统可以打开文件的最多个数,这取决于系统的配置情况。可打开的文件描述符总数可利用cat /proc/sys/fs/file-max 来查看。

      #define STDIN_FILENO 0 // 标准输入设备文件描述符

      #define STDOUT_FILENO 1 // 标准输出设备文件描述符

      #define STDERR_FILENO 2 // 标准错误设备文件描述符

  • 常用的系统IO函数

    1. access

      函数头文件: #include <fcnt1.h>

      #include <unistd.h> freecontrol

      函数原型: int access(const char *pathname,int mode)

      函数功能: 确认文件的操作权限、文件是否存在

      函数参数: pathname:待操作文件/目录的路径

      ​ mode:待确认的模式,取值如下:

      ​ F_OK:判断文件是否存在

      ​ R_OK:判断文件是否有读权限

      ​ W_OK:判断文件是否有写权限

      ​ X_OK:判断文件是否有执行权限

      函数返回值:0 :成功返回0

      ​ -1:失败返回-1

      ​ 错误码放在errno

    2. open

      函数头文件: #include <fcnt1.h> #include <unistd.h> freecontrol

      函数原型: int open(const char *pathname,int mode)

      int open(const char *pathname,int flag,int mode)

      函数功能: 打开或创建文件,获取文件描述符

      函数参数: pathname:待操作文件的路径

      flags:打开方式,取值如下:

      ​ 必选项:

      O_RDONLY:只读

      O_WRONLY:只写

      O_RDWR:读写

      ​ 附加项(常用):

      ​ O_APPEND

      ​ O_CREAT

      ​ O_TRUNC

      ​ mode:如果创建文件

      以新建方式打开文件,这个参数用于设置文件的访问权限,

      函数返回值:0 :成功返回0

      ​ -1:失败返回-1

      ​ 错误码放在errno

      ​ X_OK:判断文件是否有执行权限

    3. read

      函数头文件: #include <fcnt1.h> #include <unistd.h> freecontrol

      函数原型: ssize_t read(int fd, void *buf, size_t count);

      函数功能:从文件中读取文件内容

      函数参数:

      ​ fd:要操作的文件描述符;

      ​ buf:数据缓冲区,用来临时存放读取到的数据:

      ​ count:设置要读取的字节数

      返回值:

      ​ 成功:返回实际读取到的字节数

      ​ 0 :到达文件尾部,或没有可读的数据

      ​ 出错:返回 -1,并将错误码存入 errno 中

    4. write

      函数头文件: #include <fcnt1.h> #include <unistd.h> freecontrol

      函数原型: ssize_t write(int fd,const void *buf, size_t size);

      函数功能:向文件中写入数据

      函数参数:

      ​ fd:要操作的文件描述符;

      ​ buf:来存储要写入的文件数据

      ​ count:文件数据的长度

      返回值:

      ​ 成功:返回实际读取到的字节数

      ​ 0 :到达文件尾部,或没有可读的数据

      ​ 出错:返回 -1,并将错误码存入 errno 中

    5. close

      函数头文件: #include <fcnt1.h> #include <unistd.h> freecontrol

      函数原型: int close(int fd);

      函数功能:关闭文件,释放文件描述符

      返回值:

      ​ 成功,返回0,

      ​ 失败返回-1,并将错误码放入 errno

    6. lseek

      函数头文件: #include <fcnt1.h> #include <unistd.h> freecontrol

      函数原型: off_t lseek(int fd, off_t offset, int whence)

      函数功能:移动文件指针

      函数参数:

      ​ fd:要操作的文件描述符;

      ​ offset:相对于whence 的偏移量;

      ​ whence :移动方式,可取以下值

      ​ SEEK_SET: 文件头部

      ​ SEEK_CUR: 当前位置

      ​ SEEK_END: 文件末尾

      函数返回值:

    7. mmap/munmap

      函数头文件:include <sys/mman.h>

      函数原型: void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);

      int munmap(void *addr, size_t length);

      函数功能:映射/解除映射 文件存储空间到进程的虚拟地址空间

      函数参数:

      ​ addr :待映射的内存首地址,NULL 表示让系统决定;

      ​ length:映射的内存长度

      ​ prot:映射属性,代表了对映射后的内存操作方式(要和文件/设备的打开方式对应)

      ​ PROT_NONE

      ​ PROT_READ

      ​ PROT_WRITE

      ​ PROT_EXEC

      ​ flags: 映射的地址空间的访问标记

      ​ MAP_SHARED

      ​ MAP_PRIVATE

      ​ fd: 待映射的文件/设备的描述符

      ​ offset: 待映射的文件/设备的内容的偏移量(需要是内存页面(4096)的整数倍)

      注:prot,flags参数相见手册

      函数返回值:成功mmap
      返回映射后的首地址
      munmap返回e
      失败mmap返回MAP_FAILED
      munmap返回-1
      错误码存在errno

    8. iocotl

      函数头文件:#include <sys/ioctl.h>

      函数原型: int ioctl(int fd, unsigned long request, ...);

      函数功能: 操作设备参数

      函数参数: fd:待操作设备的文件描述符

      ​ request :设备参数(主要依赖相关设备)

      ​ …:

      函数返回值:成功返回0

      ​ 失败返回-1,错误代码放在errno

http://www.dtcms.com/a/293378.html

相关文章:

  • 数据资产——解读数据资产全过程管理手册2025【附全文阅读】
  • [c++11]constexpr
  • 考研数据结构Part1——单链表知识点总结
  • 陷波滤波器设计全解析:原理、传递函数与MATLAB实现
  • Netty中AbstractReferenceCountedByteBuf对AtomicIntegerFieldUpdater的使用
  • 威胁情报:Solana 开源机器人盗币分析
  • Automotive SPICE
  • git的版本冲突
  • 大模型——Data Agent:超越 BI 与 AI 的边界
  • 用ESP32打造全3D打印四驱遥控车:无需APP的Wi-Fi控制方案
  • 从0开始的中后台管理系统-2
  • 课题学习笔记2——中华心法问答系统
  • 汽车行业数字化——解读52页汽车设计制造一体化整车产品生命周期PLM解决方案【附全文阅读】
  • 记录更新时间用java的new date还是数据库的now
  • 深入理解 C 语言数据类型:从内存到应用的全面解析
  • CAN基础知识 - 进阶版
  • 消息推送功能设计指南:精准触达与用户体验的平衡之道
  • Spring Boot 中集成ShardingSphere-JDBC的基本使用
  • Kibana报错[security_exception] current license is non-compliant for [security]
  • HCIA/IP(一二章)笔记
  • TTL+日志的MDC实现简易链路追踪
  • 强化学习理论
  • 计算机是怎么样工作的
  • 在 Ubuntu 22.04 上安装并优化 Nginx nginx入门操作 稍难,需要有一定理论 多理解 多实践
  • Class13预测房价代码
  • Google Gemini 体验
  • 从零开始学CTF(第二十五期)
  • 万界星空科技铜线/漆包线行业智能化MES系统解决方案
  • postgresql导入导出数据;pg_restore: error: did not find magic string in file header
  • 基础算法思想(递归篇)