当前位置:首页 > 单片机 > 单片机
[导读] 本文介绍了嵌入式Linux操作系统下基于三星微处理器S3C6410的NAND FLASH模拟U盘的原理与实现方法。操作系统采用Linux 2.6.28版本,平台为飞凌OK6410-A开发板。采用的方案是通过添加一个512 MB的NAND

本文介绍了嵌入式Linux操作系统下基于三星微处理器S3C6410NAND FLASH模拟U盘的原理与实现方法。操作系统采用Linux 2.6.28版本,平台为飞凌OK6410-A开发板。采用的方案是通过添加一个512 MB的NAND FLASH分区空间,配置Linux系统USB Gadget功能,实现划分出的512 MB的NAND FLASH空间以U盘存储系统与PC机通信。该方案的文献目前在国内外同等操作系统版本和平台上并无先例。通过上述方案成功地实现了S3C6410开发板划分出512 MB的NAND FLASH空间以U盘形式挂载到了PC机上,实现与PC机的信息交换。

现阶段嵌入式产品作为U盘挂载到PC机上在各类电子产品中被越来越多的应用,Linux操作系统在电子产品中的应用也越来越广泛,但是Linux中模拟U盘挂载到PC机中,与PC机上通用Windows的通信还很好的达到实现。本文基于ARM11体系结构的处理器,实现了Linux系统下NAND FLASH模拟U盘挂载到PC机上与Windows进行通信。并在飞凌的OK6410-A板上得到验证,实现了该功能。
目前国内嵌入式产品多用ARM9体系结构,ARM11则用于高端电子产品,NAND FLASH模拟U盘的挂载技术虽然在电子产品中广泛应用,但是对于以新起的Linux操作系统的高端电子产品,这项技术还鲜少以文献的形式得以系统阐述,国内长春大学张伟等人在这方面做过研究,但是他们是基于ARM9体系,本文基于ARM9在ARM11体系结构的处理器上做了新的研究和应用。
现阶段有3类方式可以实现模拟U盘的功能,虚拟vfat.ing模拟U盘挂载,SD卡模拟U盘挂载,NAND FLASH模拟U盘挂载。NAND FLASH由于其大容量和高性价比,往往更加流行。本文是通过NAND FLASH实现模拟U盘的挂载的。

1 NAND FLASH模拟U盘原理分析
嵌入式产品模拟U盘与PC通信是现代嵌入式产品所广泛应用的一种技术,因此在实现Linux下NAND FLASH模拟U盘之前先要对Linux下NAND
FLASH模拟U盘的原理进行分析。Linux下对模拟U盘存储设备的支持就是Linux-USB Gadget驱动的加载,该驱动框架实现了USB协议定义的设备端的软件功能。
1.1 Linux-Gadget框架
Linux系统中Gadget驱动层序框架分为3层:Gadget驱动层;Gadget API层;UDC层。Gadget驱动层实现实现不同的USB功能,例如“USB网卡”、“U盘”、“打印机”等。Gadget API层,为Gadget提供的一套标准API,由底层USB设备控制器(USB DevICe Controller,UDC)实现这套API,Gadget驱动通过调用这些API实现与UDC通信。UDC是片上系统(SoC)的一部分,不同的UDC需要不同的驱动,同样的UDC不同板子代码也不一样,这一层为平台相关层,直接访问访问硬件,并向上层提供与硬件相关操作的回调函数。Gadget驱动框架原理图如图1所示。


UDC层中usb_gadget和usb_ep为2个描述结构体,分别描述UDC和端点,Gadget API通过这两个结构实现对UDC的控制。usb_gadget_ops和usb_ep_ops为函数集结构体,其主要功能是实现与硬件的交互并实现返回给上层Gadget API所需信息的功能。usb_gadget_register_driver和usb_gadget_unregister_driver为Gadget框架提供的标准API,是驱动层序的注册函数,由UDC层提供,之所以不是通过Gadget API层实现的原因是,用于将Gadget驱动程序绑定到UDC。xxx_udc_IRQ是UDC设备的中断处理函数,处理设备及其端点的中断请求。
Gadget API层为Gadget定义的一组标准API接口函数,并向上提供编程接口,这一层的存在实现了将下层UDC驱动和上层Gadget驱动程序的隔离,使得Linux系统中编写USB设备侧驱动程序时能够把功能的实现和底层通信分离。
Gadget驱动程序使用usb_gadget_driver结构体描述,实现将Gadget驱动与下层设备控制器相关联,并开启设备功能。


1.2 Linux NAND FLASH分区原理
NAND FLASH作为存储设备,存储着嵌入式产品从开机到结束的所有代码,所以做好存储设备的分区是至关重要的问题,LINUX操作系统下,分区如图2所示。


Linux2.6内核中,在文件archarmplat-s3cincludeplatPartition.h中定义了分区信息如下:

其中“.name”为分区的名称,“.offset”为分区起始地址,“.size”为分区大小。这个结构体包涵了NANDFLASH的所有分区信息。

2 NAND FLASH模拟U盘实践方法
2.1 修改内核
由于struct mtd_partition s3c_partition_info[]定义了分区信息,所以首先要修改或者添加分区信息,使得模拟得到的U盘空间大小符合实际需求。
在arch\arm\plat-s3c\incIude\plat\Partition.h的struct mtd_partition s3c_partition_info[]中添加分区信息如下:


其中:.name为分区名称,定义为U_Strorage,.offset为起始地址,这个值需要结合该模块前面的模块的大小和起始地址算出;.size为定义的分区大小,为512 MB。
添加分区后重新编译,可在文件系统的/etc下找到相应盘符,如:mtdbLOCk4。
2.2 配置内核
内核中实现NAND FLASH模拟U盘挂载的驱动是USB中的Gadget实现的,所以在实现这项功能时,首先在编译内核的时候,配置上Gadget功能。具体操作如下:
在内核源代码的根目录下执行#make menuconfig,这时将会看到内核的菜单选项,选择:
devICe driver-->
[*]usb support-->
<*>usb gadget support
<*>usb preipheral controller
将usb support功能选中,选择编译该功能进内核,并在usb support功能子目录中选择中usb gadget support和usb preipheral contro ller功能,选择编译进内核,做完这些操作后编译内核。
在shell窗口命令行中输入:
#make zImage
#make modules
在driver/usb/gadget目录下会生成g_file_storage.ko和s3c_udc_otg.ko.讲这两个模块复制到目标板的文件系统中。
注意:当usb gadget support功能非作为模块编译进内核时,编译过模块后需要更新内核。而当usb gadget support功能作为模块编译进内核时,(选择栏应填“usb gadget support”,其中“M”代表模块),在编译生成模块后,除了要加载g_file_storage.ko还要加载s3c_udc_otg.ko。


2.3 加载模块
在目标板的shell命令窗口中执行:
#insmod s3c_udc_otg.ko
#insmod g_file_storage.ko file=/dev/mtdbLOCk4 stall=0 removable=1
这个时候将目标板连接到PC机即可看到被模拟的U盘盘符,接着就可以像操作正常U盘一样对该U盘进行操作。
注意:这个时候模拟U盘已经存在,但是在目标板中还看不到该U盘盘符,需要执行:
#mkdir/mnt/U_Storage
#mount-t vfat/dev/mtdblock4/U_Storage然后,才能在目标板的/mnt/U_Storage下操作这个U盘。

3 总结与展望
到此已经阐述并实现了模拟U盘的实现原理,其实践结果如图3所示。


从图中看出属性中U_Storage的容量为504 MB并不是512 MB,这是因为厂家生产存储介质时,容量是10进制,比如1 GB=1 000 MB,但是电脑却是采用二进制,1 GB=210MB,1 MB=210KB,这样计算,电脑显示容量大小要比标注的容量小些。在PC机上在U_Storage中新建一个名为“zy”的文件夹,然后再在开发板上新建一个名为“haha”的文件夹,同时在Windows下和板子中查看,会出现如图4所示信息。


图4中H盘为PC机给U_Storage分配的盘符,上层界面为PC串口与开发板交互的打印信息该信息显示的是开发板的内容。从图中可知,H盘中存在“haha”和“zy”两个目录;开发板与PC交换界面中跳到/mnt/U_Storage/目录下,用“ls”命令查得,开发板交换目录中存在“haha”和“zy”两个目录,证明U盘和PC交互信息成功。NAND FLASH模拟U盘挂载,使得目标板充分利用了U盘的便捷功能,使得携带、操作、移植更为方便。Linux下基于ARM11体系结构模拟U盘的实现使得高端电子产品模拟U盘技术得到广泛应用。经实验验证该设计是成功的,成功解决了ARM11体系结构下目标板作为U盘挂载到PC机的问题,具有实际意义。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭