Chinaunix首页 | 论坛 | 博客
  • 博客访问: 808905
  • 博文数量: 296
  • 博客积分: 5376
  • 博客等级: 大校
  • 技术积分: 2298
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-14 19:02
文章分类

全部博文(296)

文章存档

2023年(2)

2020年(2)

2018年(2)

2017年(26)

2016年(4)

2015年(19)

2014年(12)

2013年(26)

2012年(84)

2011年(50)

2010年(41)

2009年(28)

分类: 嵌入式

2011-11-04 11:43:56

mass_storage.c,file_storage.c,f_mass_storage.c之间的关系 + g_mass_storage和g_file_storage的区别 
 
【整理】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.36\drivers\usb\gadget\Makefile中,找到了这些内容:
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

其中说到,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

阅读(3596) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~