驱动简介

  • 设备驱动是最底层的、直接控制和监视各类硬件的部分,它们的职责是隐藏硬件的具体细节,并向其他部分提供一个抽象的、通用的接口,设备驱动是内核空间的一部分,其运行在内核态下。
  • 按照硬件设备的具体工作方式,读写设备的寄存器,完成设备的轮询、中断处理、DMA 通信,进行物理内存向虚拟内存的映射等,最终让通信设备能收发数据,让显示设备能显示文字和画面,让存储设备能记录文件和数据。
  • 在BSP工程将驱动静态的和内核编译在一起(生成.elf / .bin等文件),为了减小编译出的镜像大小,可以将驱动以内核模块的方式编译,在需要的时候动态的载入(.ko文件)。
驱动分类:
  • 字符设备驱动:字符设备是能够像字节流一样被访问的设备。字符设备驱动程序通常至少要实现 open、close、read、write 等系统调用。字符设备可以通过文件系统节点进行访问,这些设备文件和普通文件之间的唯一差别在于对普通文件的访问可以前后移动访问位置,而大多数字符设备是一个只能顺序访问的数据通道,如触摸屏、鼠标等都是字符设备。
  • 块设备驱动:块设备能够容纳文件系统,其也是通过设备节点来访问。在 SylixOS系统中,进行 I/O 操作时块设备每次只能传输一个或多个完整的块,而每块包含 512字节(或 2 的幂字节倍数的数据),如 SD、硬盘等都是块设备。
  • 网络设备驱动:网络设备不同于字符设备和块设备,它是面向报文的而不是面向流的,它不支持随机访问,也没有请求缓冲区。内核和网络设备驱动程序间的通讯,完全不同于内核和字符以及块驱动程序之间的通讯,内核调用一套和数据包传输相关的函数以实现对网络设备的控制。
  • 总线子系统:总线子系统主要包括 I2C 总线和 SPI 总线,SylixOS 中为 I2C 总线和SPI 总线各自实现了总线管理适配器、总线传输接口,这样诸如 EEPROM 和 SPIFlash 这样的 I2C 总线设备与 SPI 总线设备就可以调用统一的系统接口,以实现其功能。

操作系统与驱动的关系

  • 设备驱动是操作系统内核与硬件的接口,它把用户进程对于硬件设备的控制抽象为系统调用。
  • 应用程序就可以像操作普通文件一样,通过驱动程序提供的文件操作接口实现对实际硬件的特定操作。

操作系统与驱动的关系

驱动开发流程

  • 工程建立

    • 设备驱动开发需要使用到的工程有BSP工程和内核模块工程;
    • BSP工程是将驱动静态地和内核进行编译,生成系统镜像,bsp实现了操作系统的初始化,实现运行操作系统最小系统的环境;
    • 内核模块工程是将驱动单独编译为模块,在需要使用的时候可以动态载入,以减小镜像文件的大小提高系统镜像的灵活性;
  • 最小系统实现
    • bsp工程内定义好各初始化流程执行的接口,开发过程需要做的是完成各个初始化接口的具体实现;
    • 最小系统的驱动开发过程首先需要完成对于硬件平台MMU与Cache的配置,并且实现中断控制器、串口驱动、系统Tick定时器驱动。
  • 存储设备&网络设备实现
    • 存储设备驱动实现后才能完成文件系统的挂载使用,文件读写操作才能实现落盘存储;
    • 网络驱动实现后可以极大简化系统下的开发流程,提升使用体验。
  • 其他设备驱动实现
    • 当最小系统、存储设备与网络设备都已经实现之后,开发者就可以根据具体的项目需求开发所需的各类设备驱动。

SylixOS设备驱动相关推荐

  1. SylixOS 设备树

    文章目录 一.设备树简述 二.SylixOS中设备树文件定义 三.SylixOS设备树常用API 四.在BSP中的使用设备树 一.设备树简述 ARM社区曾在Linux内核中加入了大量板级信息导致Lin ...

  2. linux i2c核心,总线与设备驱动,Linux2.6.37 I2C驱动框架分析(一)

    最近工作中又使用到了I2C,所以借S3C2440开发板GT2440为硬件平台温习一遍I2C驱动体系. linux内核中IIC驱动的体系框架 linux内核中IIC部分驱动代码位于:/drivers/i ...

  3. ()shi linux字符设备,Linux字符设备驱动基础(三)

    Linux字符设备驱动基础(三) 6 创建设备节点 6.1 手动创建设备节点 查看申请的设备名及主设备号: cat /proc/devices # cat /proc/devices Characte ...

  4. linux驱动之i2c子系统mpu6050设备驱动

    以下是mpu6050简单的驱动实现,mpu6050是I2C接口的6轴传感器,可以作为字符设备注册到内核,本代码运行环境是3.4.2内核,4.3.2版本的编译链,12.04版本的Ubuntu,硬件环境是 ...

  5. linux设备驱动第五篇:驱动中的并发与竟态

    目录[-] 综述 信号量与互斥锁 Completions 机制 自旋锁 其他的一些选择 不加锁算法 原子变量与位操作 seqlock(顺序锁) 读取-拷贝-更新(RCU) 小结 综述 在上一篇介绍了l ...

  6. FreeBSD设备驱动管理介绍(BSP: Ti AM335x)

    这段时间一直在忙FreeBSD驱动移植的项目,因此对FreeBSD做了一定的了解,鉴于网上对于FreeBSD的设备驱动资料较少,在这里给出本人对于FreeBSD驱动管理的理解心得(主要是USB驱动管理 ...

  7. linux下i2c设备驱动程序,Linux I2C 设备驱动

    I2C 设备驱动要使用 i2c_driver 和 i2c_client 数据结构并填充其中的成员函数.i2c_client 一般被包含在设备的私有信息结构体yyy_data 中,而 i2c_drive ...

  8. windows 7 下安装 Android 设备驱动

    为什么80%的码农都做不了架构师?>>>    window xp 我不知道,很久不用xp了. 1.将设备通过USB线连接PC机,这个时候系统会自动安装驱动,但是最后提示不成功: 2 ...

  9. 乾坤合一~Linux设备驱动之终端设备驱动

    多想拥你在我的怀里 却无法超越那距离 美好回忆渐渐地远去 盼望今生出现奇迹 无尽的想念 荒了容颜 无助的爱恋 从未改变 这是今天的旋律,,,,今生今世,遥不可及~ 1 终端设备 终端是一种字符型设备, ...

最新文章

  1. 手把手教你看懂并理解Arduino PID控制库——调参改变
  2. [Math][Algebra]--线性代数中的各种空间
  3. payara 创建 集群_在Payara Server和GlassFish中配置密码
  4. SpringCloud与Seata分布式事务初体验
  5. 2020年A股IPO市场全景回顾与2021年前景展望报告
  6. Linux学习笔记004----CentOS7 提升普通用户权限到Root权限
  7. POJ 3262 Protecting the Flowers 贪心(性价比)
  8. 学习node.js的一些笔记
  9. mysql的槽_Mysql槽点 - MySQL及其它开源数据库 - ITPUB论坛-中国专业的IT技术社区...
  10. 基于OMAPL138/C6748 + SPARTAN-6 77GHz汽车防撞雷达信号处理平台设计
  11. UIWebView加载本地HTML文件
  12. OPNsense用户手册-硬件要求
  13. quartus ii
  14. 软阈值迭代算法(ISTA)和快速软阈值迭代算法(FISTA)
  15. 硬盘装机后,删除开机启动项
  16. 大数据毕业设计 - 选题推荐(一)
  17. 自控力如何改善了我的生活
  18. 解决Chrome浏览器打开新标签页,显示“无法访问此网站 连接已重置”的问题【在54.0 beta版上测试通过】
  19. CAD属性编辑操作——快速选择
  20. effective morden c++1

热门文章

  1. PPT文件如何解决不能编辑的问题
  2. idea中整合redis中出现 Error creating bean with name ‘com.sxt.redis.RedisApplicationTests‘:
  3. 微医与友邦中国战略合作,智能医务室为职员健康护航
  4. 聚焦网络攻击|知道创宇云安全2018年度网络安全态势报告
  5. The Independent JPEG Group‘s JPEG software
  6. AI+医疗如何商业破冰?6位一线专家这样说
  7. sqldbx解决中文乱码“????“
  8. Excel画横坐标不均分的图表
  9. QT ActiveX和读取EXCEL
  10. 绑定美版office365密钥_美版Microsoft/微软Office 365个人版怎么激活?