首页 >资讯 > 正文

17 设备处理内核I/O包

来源:博客园 2023-04-30 19:24:26

I/O包:

内核要求设备完成的任务,需要调用驱动程序,传参给驱动;操作所需的参数数量大,需要 I/O 包 统一管理;


(资料图片)

objnode_t 结构:objnode_t 结构包含了各个驱动程序功能函数的所有参数;

创建和删除 I/O 包:

内存管理组件分配释放objnode_t结构;krlnew_objnode 创建,krldel_objnode 删除;

向设备发送I/O包:

krldev_io 发送设备io函数:接受objnode_t 结构参数,检查操作码是否符合要求,检查被操作的对象是不是为空,然后调用krldev_call_driver 函数;

krldev_call_driver 函数 还要进行一次检查,然后用操作码为索引调用驱动程序功能;

驱动程序实例之 systick 设备驱动:

systick 设备:每隔1ms产生一个中断;定时器功能;

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

驱动程序必须具备的一系列函数,即使不做任何工作,只返回状态,也必须有这个函数;

systick 设备驱动程序的入口;

systick_entry 入口函数,实现建立设备,向内核注册设备,安装回调函数,并且初始化 用到的8254中断物理设备;最后调用krlenable_intline 函数,主要功能是开启一个中断源的中断;

接着把入口函数放到驱动表里;

配置设备与驱动:

systick_set_driver 函数:设置驱动程序功能派发函数(就是将驱动函数的地址设置到driver_t 的drv_dipfun数组,io操作码就是此数组索引),设置驱动程序名称;

systick_set_device 函数:设置设备的信息;设备类型是很重要的,内核通过这个区分设备;此函数的第一个参数就是device_t 结构指针;

打开与关闭设备:

systick_open 函数:简单实现一个增加计数功能;

systick_close 函数:实现减小计数;

systick设备中断回调函数:

对于systick设备,重要的是这个函数,周期性的执行系统中的操作;

systick_handle 函数:中断要实现的功能;这儿只是简单的打印消息;

实验效果后续更新:

上一篇:平江:《书香上塔市》发行 讲述小镇200余年间的书香故事_世界简讯 下一篇:最后一页
x
精彩推送