
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
Linux设备模型中三个很重要的概念就是总线、设备和驱动,即bus、device和driver。而实际上内核中也定义了这么一些数据结构,他们是structbus_type,struct device,struct device_driver,这三个重要的数据结构都来自同一个地方,称include/linux/device.h。
推荐博文: Linux内核“问题门”——学习问题、经验集锦推荐下载:《Linux内核修炼之道》精华版之方法论 设备模型之外,对于驱动程序的开发者来说,有三样东西是不可缺少的:第一是协议或标准的spec,也就是规范,比如usb协议规范;第二是硬件的datasheet,即你的驱动要支持的硬件的手册;第三就是内核里类似驱动的源代码,比如你要写触摸屏驱动的话,就可以参考内核里已经有的一
其实故事已经讲了很久,但如果你觉得到这里你已经把故事都看明白了,那么你错了。不仅仅是错了。不信,我们就继续看,先看512行,us->transport(),这个函数指针同样是在storage_probe时被赋值,对于U盘,它遵守的是Bulk-Only协议,因此us->transport()被赋值为usb_stor_Bulk_transport()。来看usb_stor_Bulk_transport
我们继续接着上一节往下看。fill_inquiry_response(),这个函数来自drivers/usb/storage/usb.c中。266 void fill_inquiry_response(struct us_data *us,unsigned char *data,267 unsigned int data_len)268 {269
在讲数据传输阶段之前,先解决刚才的历史遗留问题。usb_stor_bulk_transfer_buf()中,406行,有一个很有趣的函数interpret_urb_result()被调用。这个函数同样来自drivers/usb/storage/transport.c中:265 static int interpret_urb_result(struct us_data*us, unsign
我们刚刚跟着storage_probe()几乎完整地走了一遍,貌似一切都该结束了,可是你不觉得你到目前为止还根本没有看明白设备究竟怎么工作的吗?U盘,不仅仅是USB设备,还是“盘”,它还需遵守USB Mass Storage协议,以及Transparent SCSI规范。从驱动程序的角度来看,它和一般的SCSI磁盘差不多。正是因为如此,所以U盘的工作真正需要的是四个模块,usbcore,scsi_
374行,us->proto_handler()其实是一个函数指针,知道它指向什么吗?我们早在storage_probe()中,确切地说,在get_protocol()就赋了值,当时只知道是get protocol,却不知道究竟干什么用,现在该用上了,一个指针要是没什么用人家才不会为它赋值呢。当初我们就讲了,对于U盘,proto_handler被赋值为usb_stor_transparent_sc
在这个到处都是“云里雾里”的云计算时代,如果不知道点OpenStack、Kubernetes等,出门都不好意思说自己是个程序猿了。编码规范与代码静态检查程序员最讨厌的四件事应该是:写注释,写文档,别人不写注释,别人不写文档。那么对于这样一个貌似很不好相处的群体,有人说,如果莎士比亚生活在当下,他会是一名科技作家,而且他座右铭会变成:“消灭世界上所有的程序员。”消灭当然是做不到的,于是有...
如果大家没意见的话,我们继续usb_stor_acquire_resources函数.761至764行,这没啥好说的吧.就是刚才urb申请了之后判断是否申请成功了,如果指针为NULL那么就是失败了.直接返回-ENOMEM.别往下了.767行,哦,又一个家伙闪亮登场了,dev_semaphore,这是一个信号量,在storage_probe的最初始阶段我们曾经见过,当时有这么一句话,这就是调
同学们,今天我们来讲一棵树.记得小时候我们看白眉大侠>>,记得那段精彩的对白:刀,是什么样的刀?金丝大环刀!剑,是什么样的剑?闭月羞光剑!招,是什么样的招?天地阴阳招!人,是什么样的人?飞檐走壁的人!情,是什么样的情?美女爱英雄!而今天我们要问的是:树,是什么样的树?答:USB设备树.这是怎样一棵树?让我慢慢的道来.苏格拉底曾经说过:为人不识谭浩强,精通内核也枉然.还记得谭浩强大哥