首页 > 其他分享 >17 设备处理内核I/O包

17 设备处理内核I/O包

时间:2023-04-30 18:55:05浏览次数:26  
标签:驱动程序 17 内核 systick objnode 设备 函数

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 函数:中断要实现的功能;这儿只是简单的打印消息;

 

实验效果后续更新:

 

标签:驱动程序,17,内核,systick,objnode,设备,函数
From: https://www.cnblogs.com/xuan01/p/17365557.html

相关文章

  • 用C/C++在Linux和Android NDK中获取设备的IP地址
    C/C++开发的获取设备IP地址的代码,下面链接中的版本是在Linuxx86-64环境中编译(Centos7.5)的,也可在其它版本的Linux中或者AndroidNDK('armeabi-v7a','arm64-v8a','x86','x86_64'等版本)中编译。下载地址(此版本须在Linuxx86-64环境中运行):金山文档https://kdocs.cn/l/cd4VM3e......
  • 16 内核中注册设备
    cosmos为简化驱动的设计,把程序和内核链接到一起,省略了加载驱动的过程,cosmos自动加载驱动,在驱动中注册相应的设备;流程:内核初始化驱动,内核扫描驱动表,加载一个驱动,创建driver_t结构,调用驱动入口函数,驱动开始运行,创建device_t结构,向内核注册设备,查看是否还有驱动,初始化完成;驱动程......
  • Windows10系统检测不到声音输出设备,声音图标打叉,没声音的解决方法
    问题描述Windows10系统检测不到声音输出设备,声音图标打叉,没声音解决方案:点下轻松访问音频设置选项,再返回就可以了,至于具体是啥原因造成的,也不太清楚,什么逻辑,也不太清楚总之:<hrstyle="border:solid;width:100px;height:1px;"color=#000000size=1">......
  • 【内核】深入分析内核panic(一)--内核问题的原因
    1概述linux内核包括进程管理、内存管理、中断管理、设备驱动、同步机制等各种模块,它们共同运行在一个共享的地址空间中,因此在运行中一旦出现问题,彼此之间可能具有千丝万缕的联系。而且与用户态不同,内核还需要与形形色色的硬件打交道,因此对于某些较为诡异的问题,除了软件以外还......
  • 【内核】深入分析内核panic(三)--内核错误处理流程
    1内核错误处理方式当内核出现致命错误时,只要cpu还能正常运行,那么最重要的就是向用户输出详细的错误信息,以及保存问题出现时的错误现场。以上致命错误可包含以下两种类型:(1)硬件能检测到的错误,如非法内存访问,非法指令等,此时cpu会触发异常,并进入异常处理流程。在异常处理流程中会......
  • 2023.17 6个问题让chatgpt帮你搞懂新行业
    1、介绍一下麦肯锡通过搞懂一个行业100个关键词来快速了解这个行业的方法。2、根据各项调查、行业报告、新闻、研究论文帮忙整理某个行业的100个关键词,并根据关联性强弱分类。3、用一句话来定义或概述上述100个关键词。4、行业中领先的前10位公司是哪些?5、哪些因素会阻碍行业的进......
  • 想要硬件设备更快,你需要了解这些性能问题!
    1前言完整的性能分析案例的第一部分,打开首页接口做压力场景,分析性能问题。将看到各种基础硬件设施层面的性能问题,如由虚机超分导致的性能问题、CPU运行模式下的性能问题、IO高、硬件资源耗尽但TPS很低的问题等。如你从零开始做一个完整项目,这些问题很可能是你首先要面对的。把它们......
  • Codeforces 1799H - Tree Cutting(树形 dp)
    思考的时候一直卡在不会在低于\(O(n)\)的时间内储存一个连通块的\(siz\)有关的信息,看了洛谷题解之后才发现我真是个小丑。树形DP。对于一条我们需要操作的边\((i,fa_i)\),我们将其分为保留子树和删除子树两种类型,对于删除子树,我们在判定其是否合法时候改为判定删除的连通块......
  • CF1763D
    ValidBitonicPermutations-洛谷|计算机科学教育新生态(luogu.com.cn)题意转化一下:先考虑如何构造一个双调的序列。本题的解题核心是:如何构造出双调的序列?(主要是这个技巧要知道)那么如何构造呢?首先来看1,可以放在最左边,也可以放在最右边。        2,同理......
  • CF1729G
    Problem-1729G-Codeforces一道很妙的计数DP。对于样例一:abababacababaaba对于ababa,我们可以删除3位置或5位置。那么思考何时不用删5位置?显然3位置被删除之后,5位置不用进行删除。所以现在i位置是匹配的位置,当区间[i-m+1,i-1](m为T的长度)有一个位置被删了,i位置就......