Linux 3.6 配置S3C2416支持模拟U盘

来源:互联网 发布:知乎论坛网站彭加木 编辑:程序博客网 时间:2024/04/25 18:29
环境:PC: debian-7.6.0ARM CPU: S3c2416Linux: 3.6.0busybox:  busybox-1.20.2

最终目的是:ARM采集数据,按日期写到某个文件夹中,完了通过USB线缆连接PC,把数据拷到PC。

实现流程如下:
1、配置内核,使其支持虚拟U盘
2、配置busybox,使mount命令支持loopback(busybox默认支持该功能,为保无虞,查看哈)
3、制作U盘文件系统镜像文件
4、烧写到开发板,进行测试

1、配置Linux 3.6.0内核使其支持虚拟U盘                         
:在Linux 3.6.0版本中,虚拟U盘的实现不再是使用g_file_storage.ko模块,而是g_mass_storage.ko模块
如果加载g_file_storage.ko模块的话,会有以下提示:
NOTE: This driver is deprecated. Consider using g_mass_storage instead.
警告信息来源:drivers/usb/gadget/file_storage.c的int __init fsg_bind(struct usb_gadget *gadget)函数。

配置项如下:


修改内核相关文件:drivers/usb/gadget/file_storage.c
/* Use this for bulk or interrupt transfers, not ep0 */static void start_transfer(struct fsg_dev *fsg, struct usb_ep *ep,struct usb_request *req, int *pbusy,enum fsg_buffer_state *state){intrc;udelay(800); /* add here */........}
mod_data = {// Default values.transport_parm= "BBB",.protocol_parm= "SCSI",/* .removable= 0, *//* .can_stall= 1, */.removable= 1,.can_stall= 0,.cdrom= 0,.vendor= FSG_VENDOR_ID,.product= FSG_PRODUCT_ID,.release= 0xffff,// Use controller chip type.buflen= 16384,};

2、配置busybox                                            


编译好之后,替换原文件系统的相关文件
3、制作U盘文件系统镜像文件                                    
dd if=/dev/zero of=udisk32M.img  bs=1k  count=32768mkfs.vfat udisk32M.img</span>
将该文件制作到文件系统中,或者系统启动后复制到文件系统

4、烧写到开发板,进行测试                                    
文件存放位置:
g_mass_storage.ko:/lib/modules/
udisk32M.img:/home/
加载模块:
insmod /lib/modules/g_<span style="font-family: 'Courier New'; font-size: 16px; line-height: 24px;">mass</span>_storage.ko file=/home/udisk32M.img stall=0 removable=1
挂载U盘:
mount -o loop /home/udisk32M.img  /tmp
此命令有个前提:在/dev目录下存在/dev/loop节点,否则需要创建(mknod /dev/loop  b  7  0)

数据测试:
1)S3C2416到PC机:
cp /home/test.file /tmp
用USB线连接ARM到PC机,在PC机上显示我们的U盘,打开它可以看到test.file文件,查看里面的数据

2)PC机S3C2416:
复制文件到U盘,在ARM板上重新挂载:
umount /tmp
mount -o loop /home/udisk32M.img  /tmp
即可看到从PC机写入的文件

0 0
原创粉丝点击