首页 > 其他分享 >16 内核中注册设备

16 内核中注册设备

时间:2023-04-30 17:46:10浏览次数:28  
标签:函数 16 driver 内核 注册 驱动 设备 驱动程序

cosmos为简化驱动的设计,把程序和内核链接到一起,省略了加载驱动的过程,cosmos自动加载驱动,在驱动中注册相应的设备;

流程:内核初始化驱动,内核扫描驱动表,加载一个驱动,创建driver_t 结构,调用驱动入口函数,驱动开始运行,创建device_t 结构,向内核注册设备,查看是否还有驱动,初始化完成;

驱动程序表:

drventyexit类型 ,就是函数指针数组,存放驱动入口函数;init_krl 函数调用init_krldriver 函数;

init_krldriver 函数:遍历驱动程序表的每个驱动程序入口,并作为参数传给krlrun_driverentry 函数;

运行驱动程序:

  调用驱动程序入口函数:

krlrun_driverentry 函数:先调用new_driver_dsc函数,建立一个driver_t 结构;用驱动描述符指针 drvp 指向;然后调用drventry 函数,运行程序入口函数;最后调用krldriver_add_system 函数,把驱动程序加入系统;

  驱动入口函数流程:

首先要建立建立一个设备描述符,接着把驱动程序的功能函数设置到 driver_t 结构中的 drv_dipfun 数组中,并将设备挂载到驱动上,然后要向内核注册设备,最后驱动程序初始化自己的物理设备,安装中断回调函数

  设备挂载到驱动:

krldev_add_driver 函数,遍历这个驱动上所有设备;比较设备id 有相同的则返回错误,将设备挂载到驱动上;

  向内核注册设备:

krlnew_device 函数:遍历设备类型表上的所有设备,检查有无设备id冲突,没有的话就加入全局设备链表中;再加入对应设备类型的链表中;最终通过设备id找到对应设备;

  安装中断回调函数:

该函数是驱动程序提供,内核提供接口安装该函数;

krlnew_devhandle 安装接口函数:调用内核层中断框架接口 krladd_irqhandle 函数;

krladd_irqhandle 函数:创建一个intserdsc_t结构,保存设备和驱动程序提供的回调函数,中断处理框架和设备驱动相联系;

中断处理框架找到对应的intserdsc_t结构,又能从 该结构中得到回调函数和设备描述符,继而调用回调函数,执行中断;

  驱动加入内核:

krldriver_add_system 挂载函数:将driver_t 结构挂载到全局驱动程序链表上,并增加驱动程序计数变量;

 

标签:函数,16,driver,内核,注册,驱动,设备,驱动程序
From: https://www.cnblogs.com/xuan01/p/17365488.html

相关文章

  • Grids for mac(Instagram客户端工具)v8.5.5免注册版
    GridsforMac是一款允许您在桌面上访问Instagram的应用程序。使用网格,您可以像在手机上一样查看您的Instagram提要、故事和探索页面。您还可以发布照片和视频,对帖子点赞和评论,以及向其他用户发送直接消息。Grids具有简洁、直观的界面,易于使用。它还提供了多种自定义选项,包......
  • 【内核】深入分析内核panic(一)--内核问题的原因
    1概述linux内核包括进程管理、内存管理、中断管理、设备驱动、同步机制等各种模块,它们共同运行在一个共享的地址空间中,因此在运行中一旦出现问题,彼此之间可能具有千丝万缕的联系。而且与用户态不同,内核还需要与形形色色的硬件打交道,因此对于某些较为诡异的问题,除了软件以外还......
  • 【内核】深入分析内核panic(三)--内核错误处理流程
    1内核错误处理方式当内核出现致命错误时,只要cpu还能正常运行,那么最重要的就是向用户输出详细的错误信息,以及保存问题出现时的错误现场。以上致命错误可包含以下两种类型:(1)硬件能检测到的错误,如非法内存访问,非法指令等,此时cpu会触发异常,并进入异常处理流程。在异常处理流程中会......
  • 注册表解决Office自动升级问题
    Office自动升级问题问题:当我早上准备打开PPT准备毕业论文中期答辩时,意外发现Office应用打不开反而跳转到MicrosoftOffice365的升级页面(该升级页面最终会显示错误代码),无法通过office内部应用来关闭自动升级。解决:1.Win+R键输入regedit回车打开注册表2.在文件下方......
  • An Image Is Worth 16x16 Words: Transformers For Image Recognition At Scale
    模型如下图所示:将H×W×C的图像reshape成了N×(P2×C),其中(H,W)是图像的原始分辨率,C是通道数,(P,P)是每个图像块的分辨率,N=H×W/P2为图像块的数量,将一个图像块使用可学习的线性层映射到维度为D的隐藏向量,如式(1)所示,线性映射的输出称为patchembeddings.在patchembeddin......
  • Ubuntu 发行版更新 Linux 内核,修复 17 个安全漏洞
    IT之家近日消息,Canonical于今天面向所有处于支持状态的Ubuntu发行版,发布了 Linux 内核安全更新,累计修复了17个安全漏洞。IT之家近日消息,Canonical于今天面向所有处于支持状态的Ubuntu发行版,发布了Linux内核安全更新,累计修复了17个安全漏洞。本次更新适用于......
  • Ubuntu 发行版更新 Linux 内核,修复 17 个安全漏洞
    IT之家近日消息,Canonical于今天面向所有处于支持状态的Ubuntu发行版,发布了 Linux 内核安全更新,累计修复了17个安全漏洞。IT之家近日消息,Canonical于今天面向所有处于支持状态的Ubuntu发行版,发布了Linux内核安全更新,累计修复了17个安全漏洞。本次更新适用于......
  • Ubuntu 发行版更新 Linux 内核,修复 17 个安全漏洞
    IT之家近日消息,Canonical于今天面向所有处于支持状态的Ubuntu发行版,发布了 Linux 内核安全更新,累计修复了17个安全漏洞。IT之家近日消息,Canonical于今天面向所有处于支持状态的Ubuntu发行版,发布了Linux内核安全更新,累计修复了17个安全漏洞。本次更新适用于......
  • CF1656F Parametric MST 题解
    为了便于解题,先对\(a\)数组从小到大进行排序。首先,根据定义可以得出总价值的表达式:\[\begin{aligned}W&=\sum\limits_{(u,v)\inE}[a_ua_v+t(a_u+a_v)]\\&=\sum\limits_{(u,v)\inE}a_ua_v+t\sum\limits_{(u,v)\inE}(a_u+a_v)\end{aligned}\]接着,我们需要发现一个比较......
  • linux 内核抢占
    什么是内核抢占呢?周期性时钟中断:对于用户任务,当每个时钟中断到来后都会检查它的实际运行时间是否超过理想运行时间,或者运行队列中有没有优先级更高的进程,一般如果满足其中一个条件就会设置重新调度标志,然后在中断返回用户态的前夕发生调度,这是所谓的用户任务抢占。但是如果处于一......