SCSI代码分析(5)SCSI驱动编程模式
对于采用SCSI接口的HBA,需要SCSI驱动来完成硬件与SCSI层的适配。对于SCSI驱动,它的编写也遵循一定的模式。下面是SCSI驱动的编写的基本步骤。
(0)对每个HBA定义scsi_host_template,根据HBA的能力定义相关回调函数和硬件能力;
(1)根据不同的设备,作HBA资源的申请,设置DMA能力
若HBA为PCIE设备,定义PCIE驱动,定义支持设备ID列表,实现probe回调,同时
1)使能PCIE设备pci_enable_device
2)请求内存资源pci_request_regions
3)设置DMA掩码长度
若HBA为platform设备,定义platform驱动,定义支持设备列表,实现probe回调,同时
1)请求内存资源platform_ioremap_resource()
2)设置DMA掩码长度
(2)初始化HBA的寄存器
(3)申请中断及回调函数,申请IO完成中断request_irq()
(4)调用函数scsi_host_alloc()分配SCSI host;
(5)调用函数scsi_add_host()将SCSI host添加到系统中;
(6)调用函数scsi_scan_host()扫描连接的磁盘;
(7)填充host->hostt->queuecommand()实现IO下发操作,并调用函数scsi_dma_map()将数据映射给设备;
(8)在中断回调函数用调用scsi_done()完成SCSI命令;
(9)填充remove()接口,调用scsi_remove_host()删去SCSI host,释放中断,调用scsi_host_put()释放SCSI host;
SCSI代码分析(5)SCSI驱动编程模式相关推荐
- SCSI代码分析(6)SCSI错误处理
除了之前介绍的正常完成SCSI层IO外,实际上还存在其他情况:IO发到控制器或硬盘后没有返回导致超时(称为IO的超时):硬件返回带错误信息的返回(IO返回异常).这些情况需要借助SCSI错误处理进行恢 ...
- Linux SCSI设备容量打印代码分析
探寻SCSI设备容量如何获取代码. 分析 8G USB转SD卡启动打印信息: sd 3:0:0:0: [sdb] 15523840 512-byte logical blocks: (7.94 GB/ ...
- 数据即代码:元驱动编程
几个小伙伴在考虑下面这个各个语言都会遇到的问题: 问题:设计一个命令行参数解析API 一个好的命令行参数解析库一般涉及到这几个常见的方面: 1) 支持方便地生成帮助信息 2) 支持子命令,比如:git ...
- 【梅哥的Ring0湿润插入教程】第一课Windows内核/驱动编程概述及应用、商业驱动保护软件原理分析...
[梅哥的Ring0湿润插入教程] Email:mlkui@163.com 转载请注明出处,谢绝喷子记者等,如引起各类不适请自觉滚J8蛋! 第一课Windows内核/驱动编程概述及应用. 商业驱动保护软 ...
- 领域驱动编程,代码怎么写?
简介:领域驱动开发最重要的当然是正确地进行领域拆解,这个拆解工作可以在理论的指导下,结合设计者对业务的深入分析和充分理解进行.本文假定开发前已经进行了领域划分,侧重于研究编码阶段具体如何实践才能体现领 ...
- ARM generic timer驱动代码分析
转自 蜗窝科技 http://www.wowotech.net/linux_kenrel/arm-generic-timer.html 一.前言 关注ARM平台上timer driver(clo ...
- LDE显示驱动(四):显示驱动内核底层代码分析
作者:DayInAI 日期:20190124 一.RTMX 1)int de_rtmx_set_route(unsigned int sel, unsigned char pno, unsigned ...
- 【鸿蒙OS开发入门】18 - HDF驱动子系统:加速度计传感器 Driver层驱动代码分析
[鸿蒙OS开发入门]18 - HDF驱动子系统:加速度计传感器 Driver层代码分析 一.如何添加速度计传感器驱动代码(代码.编译.配置) 1.驱动代码实现 2.驱动编译配置 2.1 linux 编 ...
- 【Linux Socket 编程入门】05 - 拉个骡子溜溜:TCP编程模型代码分析
(一) 看看以前学了啥 前面介绍了socket的分类,IP地址,端口号(port),常用的socket数据结构以及常用的函数.现在我们来看一个例子,看看socket编程究竟是什么. (二) 一图看懂客 ...
- QSPI Flash驱动代码分析 (QSPI控制器初始化)
QSPI Flash驱动代码分析 (QSPI控制器初始化) 1. 函数cqspi_controller_enable() 该函数主要使能和去能QSPI控制器.QSPI配置寄存器(偏移量0x00)的bi ...
最新文章
- 体验Windows 7的Superbar
- codeforce 154C - Double Profiles(hash)
- PAT甲级1004 Counting Leaves (30分):[C++题解]树、邻接表存储树、dfs遍历树
- 大话设计模式学习心得2
- js之 foreach, map, every, some
- BeetleX框架详解-小结
- 面试小问题——Object中有哪些常用方法?
- hdoj 1013 Digital Roots
- 分享:一款前端布局工具(alloydesigner)
- ibm websphere oracle weblogic,对比平台--WebLogic与WebSphere之间的区别
- 《21天学通Java(第6版)》—— 2.10 认证练习
- Google Code checkout v8 方法
- scada系统集成_SCADA和DCS的区别以及PLC系统和它们的关系
- python 天气雷达质量控制_天气雷达原理
- 人月神话之四 贯彻执行、为什么巴比伦塔会失败
- Spring Boot入门(12)实现页面访问量统计功能
- Spark 用代码实现求分位数Percentile(Quentile)的方法
- Struts 1与Struts 2区别
- Flutter路由管理和页面参数的传递(获取返回)
- excel运行时出现正在等待其他应用程序的OKE操作完了
热门文章
- java数据库同步_Java数据同步
- CSS-div圆角被内部元素覆盖问题
- mysql数据库左连接
- Oracle启动报错ORA-03113解决
- ADS(Advanced Design system)仿真对电路进行阻抗匹配
- springboot系列(二十六):如何实现word模板单页导出?这你得会|超级详细,建议收藏
- war包还原成项目_将War包还原成java web项目
- springboot在线外卖点餐系统毕业设计毕设作品开题报告开题答辩PPT
- Python 好玩代码
- 创新创业技术路线怎么写_【精选】如何撰写创新创业项目申请书.ppt