主题 : SD卡模拟成PC的一个U盘 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 386
精华: 0
发帖: 3
金钱: 20 两
威望: 3 点
综合积分: 6 分
注册时间: 2008-03-25
最后登录: 2017-09-13
楼主  发表于: 2008-03-25 22:53

 SD卡模拟成PC的一个U盘

请问怎么在开发板上把SD卡模拟成一个U盘挂载到电脑上啊,就类似于数码相机,MP3一样,把开发板做为一个U盘来用啊??或提供一点思路吧
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
1楼  发表于: 2008-03-26 09:18
思路是很简单的:
1. enable S3C2440的USB device controller驱动
2. 利用linux的g_file_storage module把QQ2440做成一个usb的mass storage device, 参数为SD卡的设备文件, 做法可以参考http://www.linux-usb.org/gadget/file_storage.html
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 64
精华: 0
发帖: 41
金钱: 395 两
威望: 143 点
综合积分: 82 分
注册时间: 2008-02-02
最后登录: 2015-12-31
2楼  发表于: 2008-10-19 16:26
引用第1楼kasim于2008-03-26 09:18发表的  :
思路是很简单的:
1. enable S3C2440的USB device controller驱动
2. 利用linux的g_file_storage module把QQ2440做成一个usb的mass storage device, 参数为SD卡的设备文件, 做法可以参考http://www.linux-usb.org/gadget/file_storage.html


我能利用这个方法,将一个MTD设备,比如nand flash的某个分区也安装成USB mass storage device么?
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
3楼  发表于: 2008-10-19 23:24
是的可以,但对于NAND Flash的MTD分区 + FAT文件系统,最好加上一个Flash的转换层,比如NFTL
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 64
精华: 0
发帖: 41
金钱: 395 两
威望: 143 点
综合积分: 82 分
注册时间: 2008-02-02
最后登录: 2015-12-31
4楼  发表于: 2008-10-20 10:13
引用第3楼kasim于2008-10-19 23:24发表的  :
是的可以,但对于NAND Flash的MTD分区 + FAT文件系统,最好加上一个Flash的转换层,比如NFTL


NFTL位于MTD之上,和JFFS,YAFFS等的地位是并列的. 是不是只要用modprobe命令把一个逻辑LUN绑定到NFTL接口上就可以了?如果这样的话就太简单了. 所有的存储设备都可以轻松的映射成USB Mass Storage设备而不需要额外的编程.
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
5楼  发表于: 2008-10-20 12:43
本来就不需要额外编程。
NFTL和JFFS2或YAFFS是不同的概念,NFTL是转换层,而FAT,JFFS2, YAFFS是文件系统。 JFFS2和yaffs之所以可以不需要NFTL直接建立在MTD分区之上是因为它们本身就是为NAND Flash所设计,而FAT是基于硬盘开发出来的,没有针对NAND Flash的bad block,wear-leveling等的优化,所以事实上几乎没有人直接在NAND Flash上用FAT。关于NAND Flash上使用FAT,你可以看这个帖子http://osdir.com/ml/drivers.mtd/2002-05/msg00156.html
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."
级别: 新手上路
UID: 64
精华: 0
发帖: 41
金钱: 395 两
威望: 143 点
综合积分: 82 分
注册时间: 2008-02-02
最后登录: 2015-12-31
6楼  发表于: 2008-10-20 14:59
引用第5楼kasim于2008-10-20 12:43发表的  :
本来就不需要额外编程。
NFTL和JFFS2或YAFFS是不同的概念,NFTL是转换层,而FAT,JFFS2, YAFFS是文件系统。 JFFS2和yaffs之所以可以不需要NFTL直接建立在MTD分区之上是因为它们本身就是为NAND Flash所设计,而FAT是基于硬盘开发出来的,没有针对NAND Flash的bad block,wear-leveling等的优化,所以事实上几乎没有人直接在NAND Flash上用FAT。关于NAND Flash上使用FAT,你可以看这个帖子http://osdir.com/ml/drivers.mtd/2002-05/msg00156.html


谢谢.
我还有个疑问, 这个modprobe命令对nftl设备进行mass storage映射(我想主要是进行LBA的映射, 而nftl也是进行LBA映射),是否会引入额外的变化?
举例来说, 我用windows的移动磁盘格式化功能对这个nftl设备进行文件系统格式化(FAT16). 拔掉usb线以后重新启动,我再在这个nftl设备上mount一个FAT16文件系统. linux还可以正确识别这个windows格式化的FAT16系统吗?

Wince里面就有类似的用法. 插上usb电缆以后, wince把nandflash的某个分区映射成mass storage device给pc机用, 拔掉usb电缆以后, wince又会重新在这个分区安装回FAT文件系统. 换句话说这个文件分区是两个操作系统都可以识别的
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
7楼  发表于: 2008-10-20 23:20
当然可以,Winodws格式化的时候,FAT文件系统的数据是透过NFTL写入NAND Flash的,USB只是让NFTL的客户端不同而已,用不用USB和NFTL以及下面的NAND Flash都没有关系。
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."