飞凌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