飞凌FL-2440开发板上实现模拟U盘

飞凌FL-2440开发板上实现模拟U盘

本专题主要讲解如何在飞凌嵌入式ARM开发板上如何实现模拟U盘的功能。通过修改内核配置和文件系统相关内容,我们在FL2440上实现了模拟U盘功能,通过模拟U盘,我们很方便的实现了在开发板和WINDOW系统之间进行数据交换。

开发板脱离WINDOW时,它运行数据采集程序,把采集到的数据写成文件保存在NAND FLASH中。WINDOW系统需要读取开发板采集的数据时,只需通过USB线把开发板和WINDOW电脑连接起来,此时开发板就相当于一个U盘,WINDOW像访问U盘一样访问开发板上NAND FLASH的数据文件。

这里我们先不探讨模拟U盘的实现原理,只是告诉大家的移植步骤,开发板模拟U盘的实现原理我们后续再专门讨论。

 

本次开发的软硬件环境配置如下:

硬件环境: 飞凌FL2440开发板

软件环境:  linux-3.6.30.9    busybox-1.15.2

编译器版本:arm-linux-gcc 4.3.2

桌面Linux版本: ubuntu 8.10版本

 

嵌入式linux环境下实现模拟U盘主要分为一下几个步骤:修改内核配置,配置内核支持模拟U盘;制作FAT32文件系统映像;修改busybox配置,配置mount命令支持loopback;增加模拟U盘模块到内核中;具体实现操作步骤如下:

 

一、   修改内核配置,配置内核支持模拟U盘功能

 

1. 配置linux 2.6.30.9 支持模拟U盘功能,将配置选项USB Gadget Drivers  File-backed Storage Gadget   配置为模块编译方式,同时在USB Peripheral Controller 选择S3C2410 USB Device Controller,表示我们选择的S3C2410 USB设备控器。如下图所示:



2. 配置linux文件系统支持FAT32文件系统,如下图所示:

 



3.修改drivers/usb/gadget/file_storage.c

static void start_transfer(struct fsg_dev *fsg, struct usb_ep *ep, struct usb_request *req, int *pbusy,   enum fsg_buffer_state *state)

{

         int     rc;
        udelay(800); //增加延时
800 us
    ……

 }

 

将mod_data的初始化修改为:

mod_data = {                           

    ……

       .removable           = 1,

       .can_stall             = 0,

     ……

       };

 

4. 重新编译内核和模块

#make zImage 

#make modules

编译完成后,在目录drivers/usb/gadget下生成g_file_storage.ko

 

这样我们就完成了内核的配置与编译,新生成的内核支持模拟U盘功能。

二、 修改 busybox配置

修改busybox的配置,配置busybox的mount命令支持loopback, 如下图所示:



重新编译busybox.

#make

#make install

将新生成的busybox 文件替换原来根文件系统的busybox 文件。这样开发板上的mount命令就支持loopback功能。

 

三、制作FAT32文件系统映像

制作FAT32文件系统映像的步骤如下:

1. 在ubuntu目录下执行如下命令,建立FAT32映像,大小为32M:

    #dd if=/dev/zero of=udisk32M.img  bs=1k  count = 32768

    #mkfs.vfat udisk32M.img

 

2. 将制作好的FAT32文件系统映像复制到系统的根文件系统中,重新制作根文件系统;

 

3.烧写重新编译好的内核和根文件系统到FL2440开发板中;

 

四、启动系统,加载U盘模拟模块到内核中

开发板上电启动系统

1.     将编译好的g_file_storage.ko下载到开发板的home目录下;

2.     在开发板的控制终端上执行如下命令加载g_file_storage.ko模块到内核中;

#insmod g_file_storage.ko file=udisk32M.img stall=0 removable=1

#mknod /dev/loop0  b  7  0

#mount -o loop /home/udisk32M.img  /tmp

这样我们就讲FAT32文件系统映像udisk32M挂载到 /tmp目录下。

 

FAT32文件系统映像udisk32M就相当于我们的模拟U盘,容量为32M.

 

五、测试模拟U盘是否正常工作

 

为了测试我们的模拟U盘是否能正常工作,我们测试在开发板和xp系统是否能正常进行数据交换。

1)    开发板往模拟U盘写文件,XP系统上可以访问该文件;

在开发板上往 /tmp目录写 mdev.conf 文件,命令如下

cp ./etc/mdev.conf ./tmp

在XP系统上重新插拔连接开发板的USB线,在移动硬盘J中我们可以看到mdev.conf  文件,可以在XP系统上访问。从而验证开发板往模拟U盘写文件,XP系统上可以访问该文件。

 

2)    XP系统往模拟U盘写文件,开发板可以访问该文件;

在XP系统上网U盘写wwtARM.txt文件,重新挂载文件系统映像到 /tmp目录

#umount tmp

#mount -o loop /home/udisk32M.img  /tmp

在开发板上可以在 /tmp目录下访问刚才XP系统写到U盘的wwtARM.txt 文件。

 

到此,我们基于飞凌FL2440开发板在嵌入式linux系统下的模拟U盘功能就验证完成了。

 

希望这篇文章对大家理解在linux系统下实现模拟U盘的功能有所帮助。



转自http://www.leyanedu.com/Article/HTML/97.html

你可能感兴趣的:(嵌入式linux)