对于采用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驱动编程模式相关推荐

  1. SCSI代码分析(6)SCSI错误处理

    除了之前介绍的正常完成SCSI层IO外,实际上还存在其他情况:IO发到控制器或硬盘后没有返回导致超时(称为IO的超时):硬件返回带错误信息的返回(IO返回异常).这些情况需要借助SCSI错误处理进行恢 ...

  2. Linux SCSI设备容量打印代码分析

    探寻SCSI设备容量如何获取代码. 分析 8G USB转SD卡启动打印信息: sd 3:0:0:0: [sdb] 15523840 512-byte logical blocks: (7.94 GB/ ...

  3. 数据即代码:元驱动编程

    几个小伙伴在考虑下面这个各个语言都会遇到的问题: 问题:设计一个命令行参数解析API 一个好的命令行参数解析库一般涉及到这几个常见的方面: 1) 支持方便地生成帮助信息 2) 支持子命令,比如:git ...

  4. 【梅哥的Ring0湿润插入教程】第一课Windows内核/驱动编程概述及应用、商业驱动保护软件原理分析...

    [梅哥的Ring0湿润插入教程] Email:mlkui@163.com 转载请注明出处,谢绝喷子记者等,如引起各类不适请自觉滚J8蛋! 第一课Windows内核/驱动编程概述及应用. 商业驱动保护软 ...

  5. 领域驱动编程,代码怎么写?

    简介:领域驱动开发最重要的当然是正确地进行领域拆解,这个拆解工作可以在理论的指导下,结合设计者对业务的深入分析和充分理解进行.本文假定开发前已经进行了领域划分,侧重于研究编码阶段具体如何实践才能体现领 ...

  6. ARM generic timer驱动代码分析

     转自 蜗窝科技 http://www.wowotech.net/linux_kenrel/arm-generic-timer.html 一.前言 关注ARM平台上timer driver(clo ...

  7. LDE显示驱动(四):显示驱动内核底层代码分析

    作者:DayInAI 日期:20190124 一.RTMX 1)int de_rtmx_set_route(unsigned int sel, unsigned char pno, unsigned ...

  8. 【鸿蒙OS开发入门】18 - HDF驱动子系统:加速度计传感器 Driver层驱动代码分析

    [鸿蒙OS开发入门]18 - HDF驱动子系统:加速度计传感器 Driver层代码分析 一.如何添加速度计传感器驱动代码(代码.编译.配置) 1.驱动代码实现 2.驱动编译配置 2.1 linux 编 ...

  9. 【Linux Socket 编程入门】05 - 拉个骡子溜溜:TCP编程模型代码分析

    (一) 看看以前学了啥 前面介绍了socket的分类,IP地址,端口号(port),常用的socket数据结构以及常用的函数.现在我们来看一个例子,看看socket编程究竟是什么. (二) 一图看懂客 ...

  10. QSPI Flash驱动代码分析 (QSPI控制器初始化)

    QSPI Flash驱动代码分析 (QSPI控制器初始化) 1. 函数cqspi_controller_enable() 该函数主要使能和去能QSPI控制器.QSPI配置寄存器(偏移量0x00)的bi ...

最新文章

  1. 体验Windows 7的Superbar
  2. codeforce 154C - Double Profiles(hash)
  3. PAT甲级1004 Counting Leaves (30分):[C++题解]树、邻接表存储树、dfs遍历树
  4. 大话设计模式学习心得2
  5. js之 foreach, map, every, some
  6. BeetleX框架详解-小结
  7. 面试小问题——Object中有哪些常用方法?
  8. hdoj 1013 Digital Roots
  9. 分享:一款前端布局工具(alloydesigner)
  10. ibm websphere oracle weblogic,对比平台--WebLogic与WebSphere之间的区别
  11. 《21天学通Java(第6版)》—— 2.10 认证练习
  12. Google Code checkout v8 方法
  13. scada系统集成_SCADA和DCS的区别以及PLC系统和它们的关系
  14. python 天气雷达质量控制_天气雷达原理
  15. 人月神话之四 贯彻执行、为什么巴比伦塔会失败
  16. Spring Boot入门(12)实现页面访问量统计功能
  17. Spark 用代码实现求分位数Percentile(Quentile)的方法
  18. Struts 1与Struts 2区别
  19. Flutter路由管理和页面参数的传递(获取返回)
  20. excel运行时出现正在等待其他应用程序的OKE操作完了

热门文章

  1. java数据库同步_Java数据同步
  2. CSS-div圆角被内部元素覆盖问题
  3. mysql数据库左连接
  4. Oracle启动报错ORA-03113解决
  5. ADS(Advanced Design system)仿真对电路进行阻抗匹配
  6. springboot系列(二十六):如何实现word模板单页导出?这你得会|超级详细,建议收藏
  7. war包还原成项目_将War包还原成java web项目
  8. springboot在线外卖点餐系统毕业设计毕设作品开题报告开题答辩PPT
  9. Python 好玩代码
  10. 创新创业技术路线怎么写_【精选】如何撰写创新创业项目申请书.ppt