操作系统实战(十三)

一、什么是I/O包

I/O包就是内核要求设备完成的各种参数封装在一个数据结构中。这样就可以统一驱动程序功能函数的形式了。
objnode_t的数据结构中包括了各个驱动程序功能函数的所有参数。

1.创建和删除I/O包

创建I/O包就是在内存中建立objnode_t结构的实例变量并初始化它。

2.向设备发送I/O包

需要定义实现一个函数,将这个I/O发送给具体设备的驱动程序,以便驱动程序完成具体的工作。这个函数标志这一个设备驱动程序开始运行,经它之后内核就实际的控制权交给驱动程序,由驱动程序代表内核操控设备。krldev_io 函数,只接受一个参数,也就是 objnode_t 结构的指针。它会首先检查 objnode_t 结构中的 IO 操作码是不是合乎要求的,还要检查被操作的对象即设备是不是为空,然后调用 krldev_call_driver 函数。这个 krldev_call_driver 函数会再次确认传递进来的设备和 IO 操作码,然后重点检查设备有没有驱动程序。这一切检查通过之后,我们就用 IO 操作码为索引调用驱动程序功能分派函数数组中的函数,并把设备和 objnode_t 结构传递进去。

二、驱动函数实例

systick 设备驱动,systick 设备的主要功能和作用是每隔 1ms 产生一个中断,相当于一个定时器,每次时间到达就产生一个中断向系统报告又过了 1ms,即每秒钟内产生 1000 次中断。

1.systick设备驱动程序的整体框架

2.systick设备驱动程序的入口

3.配置设备和驱动

4.打开和关闭设备

5.systick 设备中断回调函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值