bulk interface驱动_Linux 驱动架构简析

本文从源码角度分析Linux驱动架构,重点探讨bulk接口驱动。首先介绍了操作系统和CPU基础知识,然后讲解Linux内核核心模块和driver架构,包括bus、driver和device框架。文章通过driver注册流程和设备驱动匹配过程,展示了驱动如何通过bus找到设备并与之交互。最后以atkbd键盘驱动和USB串行驱动为例,说明驱动初始化和通讯机制。
摘要由CSDN通过智能技术生成

这篇文章不是驱动开发教程,只不过作者读过内核源码后,想对知识做一个梳理,从源码的角度分析一下Linux的驱动架构的实现。行文也不大讲究,希望可以把问题说清楚。本文使用的kernel 源码版本是 3.13.3。

学习kernel虽然没有捷径,但是有合理的方法。

1) 首先,需要熟悉操作系统的设计与实现,推荐大家看 MINIX作者的那部书,同时把MINIX的kernel代码研读一下。 不然,你不知道操作系统都有哪些模块, 不知道操作系统要做些什么事情,提供什么功能。简单地说,操作系统首先要驱动 CPU,然后提供那几大管理(进程,内存,文件),实现一两百个系统呼叫,提供驱动接口, 用户态与内核之间进行切换。

2) 去intel的官网,找一下 ‘Intel® 64 and IA-32 Architectures Software Developer’s Manual’ , 了解一下 CPU的架构,工作模式,底层编码。否则, 你不知道 gdt,ldt,page table,实地址,保护模式,定时器中断都是什么东西,为什么操作系统要这样来设置寄存器。这块基本上全汇编语言,对CPU的初始化,寄存器设置,手册上面都有严格的时需要求。 哪些操作需要屏蔽中断,哪些需要在一个指令周期完成等等。有了上面的基础后,大概知道一个操作系统大概要做些什么事情, 如何驱动底层的 CPU,这个时候阅读 linux的kernel代码,事半功倍。

kernel分为两个模块:一个是core: cpu, 中断,进程,内存几大管理, 提供系统呼叫。另一个是driver。 linux的driver 都是有架构的,不需要从底层做起。各类架构称为‘子系统’:如,block子系统,net子系统,usb子系统等。 别看操作系统的代码量大,其实,driver占了估计 80%的代码量, 这些都是不需要去看的。驱动是否放在内核,就是微内核与宏内核的区别。

阅读源码过程中,观其大略即可,主要了解整个结构,以及程序的流程。如:系统呼叫的调用,追一个就可以了—— 看看操作系统如何捕捉软中断, 根据中断号,dispatch到相应的服务程序,如何保存现场, 完成后,又如何回到用户态。 系统呼叫调用,核心就是 dispatch的流程。 追完一支系统呼叫,其它的大概就知道怎么回事了。driver 也就一样的, 找个简单的驱动看看, 从驱动层一直到驱动的架构,流程清楚就可以了。 如字符设备驱动, 追一下注册后, 驱动框架如何把该设备放入 list,当有用户请求的时候,它又如何查找到相应的设备,调用相应的操作函数, 一路追下来,流程大概就清楚了。

不建议一开始就阅读“linux内核源码分析” 之类的书, 会让读者一头雾水。 正确的方法应该是, 先了解相应的背景知识后,再来阅读源码。Driver 框架的源码的位于 drivers/base/, 它是整个驱动模式的基础框架,相当于OO语言的里面的Object对象。 其实,Linux 的驱动框架就是一个OO的结构, core模块定义数据结构,函数接口,实现各种通用的功能——相当于OO里面的基类。各模块的设备驱动程序则只需要实现 core模块里面定义的接口即可。

bus, driver, device 框架

linux的外围设备驱动,都是通过 bus + driver + device来管理的,其实也好理解 ,外设都是通过总线来与cpu通讯的。kernel会实现各种总线的规范以及设备管理(设备检测,驱动绑定等),驱动程序只需要注册自己的驱动,实现对设备的读写控制即可。

这类驱动通常是2个层次:总线子系统 + 驱动模块,它的流程大概是:

1) bus_register(xx)

kernel里面的各bus子系统(如:serio, usb, pci, ...)会使用该函数来注册自己。

2) driver_register(xx)

驱动模块使用它来向总线系统注册自己,这样驱动模块只需要关注相应driver接口的实现。通常,bus子系统会对 driver_register来进行封装,如:

serio 提供serio_register_driver()

usb 提供usb_register_driver()

pci提供 pci_register_driver()

3) registe_device(xx)

各总线除了管理driver外,还管理device,通常会提供一支API来添加设备,如: input_register_device, serio_add_port.实现上都是通过一个链表对设备进行管理,通常是在初始化或者probe的时候, 添加设备。

设备(device)指的是具体实现总线协议的物理设备,如对serio总线而言,i8042就是它的一个设备,而该总线连接的设备(鼠标,键盘)则是一个serio driver。

注册

bus.c 和 driver.c 分别对 bus,driver和device进行管理,提供注册bus, driver和查找 device 功能。

bus_register(*bus) 这个函数会生成两个list,用来保存设备和驱动。

INIT_LIST_HEAD(&priv->interfaces);

klist_init(&priv->klist_devices, klist_devices_get, klist_devices_put);

klist_init(&priv->klist_drivers, NULL, NULL);

* priv是 struct subsys_private定义在 driver/base/base.h

driver_register(*drv) 实际上就是调用 bus_add_driver(*drv) 把 drv 添加到 klist_drivers:

klist_add_tail(&priv->knode_bus, &bus->p->klist_drivers);

同理注册device,也是通过 bus_add_device(*dev),添加到 klist_devices:

klist_add_tail(&dev->p->knode_bus, &bus->p->klist_devices);

以 hid_bus_type为例,执行 bus_register(&hid_bus_type) 后, hid_bus_type->p->klist_devices 和 hid_bus_type->p->klist_klist_drivers 这两个list 会被初始化,为后面的 driver和 device 注册做准备,driv

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: bulk interface驱动下载是指下载用于连接计算机和USB设备的bulk interface驱动程序。这种驱动程序可以使计算机能够识别和与USB设备进行通信,从而实现数据传输和控制。用户可以通过官方网站或第三方网站下载bulk interface驱动程序,然后按照安装说明进行安装。安装完成后,用户就可以使用USB设备了。 ### 回答2: Bulk interface驱动下载是指用户从设备或计算机系统官方网站或其他的一些渠道上下载的一种驱动程序,通过bulk interface接口与计算机相连,实现对一些外设的管理和控制。bulk interface驱动下载通常包括三个主要方面:下载、安装和使用。 对于bulk interface驱动下载,首先需要确保下载的软件与所使用设备或操作系统相匹配。接着进行安装,往往是双击下载的驱动文件,安装过程需要注意选择安装路径、相关组件等。一旦安装完成,用户便可以在计算机上通过相应的工具或界面,控制和管理设备。 bulk interface驱动下载的主要优点在于,它能够增强设备的兼容性和稳定性。在设备连接到计算机系统后,bulk interface驱动程序能够帮助操作系统识别和维护设备和计算机系统之间的连接,从而确保设备正常运行。 尽管bulk interface驱动下载的使用范围还是较为局限,但它确实是一种方便快捷、易于操作的驱动程序。对于需要使用的用户来说,下载、安装和使用bulk interface驱动程序可以提高设备的稳定性,进一步增加设备的可靠性和高效性。 ### 回答3: Bulk interface驱动下载通常是指通过USB接口连接电脑和设备(如手机、MP3播放器、摄像头等)时使用的驱动程序。在电脑和设备之间进行数据传输或通信时,经常需要使用此类驱动程序来识别设备并确保设备与计算机之间的通信稳定。 一般来说,bulk interface驱动下载可以通过一些网站或厂家官网进行下载。在下载之前,需要确保下载的驱动程序与所连接的设备之间是匹配的。通常情况下,不同品牌的设备使用的驱动程序不同,因此在下载之前,需要确认设备的品牌、型号以及操作系统版本等信息,以确保所下载的驱动程序能够与设备兼容。 在下载bulk interface驱动之前,还需要确保电脑已经安装了USB驱动程序,否则可能会导致设备无法识别或连接不稳定。此外,在下载并安装bulk interface驱动程序之后,建议重启电脑,以确保驱动程序能够正常工作。 总之,bulk interface驱动下载是连接电脑和设备之间进行数据传输和通信的必要步骤。在下载和安装驱动程序之前,需要确认设备的品牌、型号和操作系统版本,以确保所下载的驱动程序兼容并能正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值