最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【整理】mass_storage.c,file_storage.c,f_mass_storage.c之间的关系 + g_mass_storage和g_file_storage的区别

USB crifan 3641浏览 0评论

【整理】mass_storage.c,file_storage.c,f_mass_storage.c之间的关系 + g_mass_storage和g_file_storage的区别

【背景】
最新在看linux kernel v2.6.36中的usb mass storage方面的代码,看着看着,突然发现,
不仅mass_storage.c,file_storage.c,f_mass_storage.c三个文件,看着名字都很类似,而且功能方面,
f_mass_storage.c和file_storage.c看起来都很类似,尤其是其中的注释部分,关于如何使用此功能方面的注释内容,用法基本都一样,
所以,很是困惑,既然USB Mass Storage方面的功能都一样,为何还有弄两个文件。
所以此处目的就是,搞懂这些文件之间的关系。

【源码中找到的区别】
从源码中,可以找到对应如下注释:
mass_storage.c — Mass Storage USB Gadget
file_storage.c — File-backed USB Storage Gadget, for USB development
f_mass_storage.c — Mass Storage USB Composite Function

看起来,很是晕,不太清楚他们之间的关系。

【mass_storage.c,file_storage.c,f_mass_storage.c之间的关系】
单独看源码,看着很是晕。后来无意间想到了,去看看对应的Kconfig和makefile,
其中linux-2.6.36driversusbgadgetMakefile中,找到了这些内容:
g_file_storage-objs  := file_storage.o
g_mass_storage-objs  := mass_storage.o

obj-$(CONFIG_USB_FILE_STORAGE) += g_file_storage.o
obj-$(CONFIG_USB_MASS_STORAGE) += g_mass_storage.o

所以,很明显,此g_file_storage和g_mass_storage是并列关系,分别对应着file_storage.c和mass_storage.c。
对此,再回去看代码,就容易找到一些关系了。mass_storage.c中,include了f_mass_storage.c,所以,此处就是,一个是File Storage,一个是Mass Storage,两者都是U盘的功能,分别对应着file_storage.c和mass_storage.c,前者,本身就实现了对应的功能,后者,包含了f_mass_storage.c,而f_mass_storage.c中实现了主要的功能。
【总结1】
可以理解为:
file_storage.c = mass_storage.c + f_mass_storage.c = 都是实现了Mass Storage/U盘的功能

所以,现在几个文件之间的关系,已经很清楚了,但是g_file_storage和g_mass_storage之间的关系,还是不是很明确。

【g_file_storage和g_mass_storage】
而且,偶之前也写过,如何在2.6.28的Linux kernel下面,在已经实现了USB驱动的情况下,如何使用U盘功能:
在Linux USB Gadget下使用U盘
http://hi.baidu.com/serial_story/blog/item/e020421e33b477fe1ad576f8.html
其中,用的是g_file_storage.ko,即g_file_storage。
对于g_mass_storage,又有啥不同,不是很清楚。
后来,通过google,找到了相关的内容:
[PATCH 023/115] USB: deprecate g_file_storage
http://www.spinics.net/lists/linux-usb/msg49909.html
其中说到,3.8的内涵中,用Mass Storage Gadget(g_mass_storage)取代了File-backed Storage Gadget(g_file_storage)。
所以,g_file_storage和g_mass_storage关系,也就很清楚了:

【总结2】
g_file_storage和g_mass_storage都是实现了USB Mass Storage的功能,即U盘功能;
g_mass_storage是比g_file_storage的更新更好的关于USB Mass Storage的实现,所以取代了旧的g_file_storage,即g_file_storage被废弃了。
所以,以后如果在Linux 3.8版本之后的kernel中使用U盘的功能,那么最好用新的g_mass_storage,而不要用已经废弃的g_file_storage了。

【后记2011-09-08】
关于g_file_storage和g_mass_storage之间的取舍和更多的细节功能的区别,感兴趣的可以去看这里的讨论:
Re: [PATCH 2/2] usb: gadget: convert all users to the new udc
http://permalink.gmane.org/gmane.linux.usb.general/48032

转载请注明:在路上 » 【整理】mass_storage.c,file_storage.c,f_mass_storage.c之间的关系 + g_mass_storage和g_file_storage的区别

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
91 queries in 0.167 seconds, using 22.06MB memory