Vxworks学习(三)_驱动

本文是关于VxWorks操作系统中驱动程序的学习笔记,详细介绍了驱动程序的安装、设备列表管理、文件描述符表以及块存取设备的低级驱动初始化。内容包括驱动程序的7种基本IO操作,动态安装驱动的iosDrvInstall()函数,设备的打开与读写操作,以及高速缓冲存储区的一致性问题的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

声明本学习记录为笔者的学习记录笔记,其中大量借鉴了多本已出版书籍与网络资料,并会在文章末尾注明出处,同时笔者无虚拟机镜像。

一直学习的都是嵌入式应用层软件开发,本次也是第一次尝试去理解如何编写驱动程序

一、 驱动程序

对于一个非块存取设备的驱动程序有7种基本IO操作函数: creat( )、 delete()、 open( )、close()、read( )、write()和 ioctl( )。虽然一些设备不具备操作的相应操作函数会被忽略掉,但总的来说这种类型的设备驱动程序包含上述7种操作函数。

1.1 驱动程序表和安装驱动程序

调用I/O系统内部函数==iosDrvInstall()==可以动态安装驱动程序。
在这里插入图片描述

二、驱动设备

2.1 设备列表和增加设备

iosDevAdd(dav0, "/xx0", drvnum);//添加设备
dosFsDevCreate();//设备初始化程序
iosDrvFind();//验证已存在设备

三、文件描述符

3.1 文件描述符表

文件通过调用open()函数(或creat()函数)打开。IO系统在设备列表中寻找与调用者指定的文件名(或一个初始字符串)相匹配的设备名,如果找到相匹配的设备名,IO系统会提取相应位置的设备头中所包含的驱动程序号并从相应驱动程序表中调用执行打开操作的程序。

打开文件
在这里插入图片描述
在这里插入图片描述
读取数据

在这里插入图片描述
select()函数

  1. 任务需要为等待一个设备进行IO操作设定最长时间限制。例如,可能会为一个UDP套接字接收信息包操作设定一个时限。
  2. 一个驱动程序同时支持多个设备,而运行的任务可能会同时等待这些设备。例如,可能会为不同优先级的数据传输操作建立多个管道。
  3. 任务等待某个设备的I/O 操作,同时该设备等待其他设备的IO操作。例如,一个服务器任务可能会使用管道和套接字。

高速缓冲存储区的一致性问题
高速缓冲存储区中数据必须与RAM存储区中的数据同步或一致。
驱动程序可以通过两种方法解决缓冲存储区的一致性问题:

  1. 分配安全预取缓冲存储区,即一些标记成不可预取的缓冲存储区;
  2. 当从设备中读出或写入数据时都刷新预取缓冲存储区并将其标记为无效。
    对于静态缓冲存储区而言,分配安全预取缓冲存储区的方法是有效的,但这通常需要MMU单元。对于动态缓冲存储区,如果频繁地分配和释放非预取缓冲存储区,则会导致大量存储区被标记成非预取。使动态缓冲存储区保持数据一致性的方法是手工将非缓冲存储区标记为无效或者手工对非缓冲存储区进行刷新。

设备驱动程序在将地址内容传递给相应设备时,必须使用宏CACHE_DMA_VIRT_TO_PHYS讲虚拟地址转成物理地址,反之亦然

四、块存取设备

在这里插入图片描述

4.1 低级驱动程序初始化组件

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值