FAT和uboot的丁点总结

[复制链接]
6580|7
 楼主| linnaldf 发表于 2008-9-19 20:46 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;告别AVR单片机大半年了,用hpijs打印驱动做过HP&nbsp;deskjet&nbsp;2368喷墨打印机、HP&nbsp;P2015激光打印机,ARM的MMU映射、中断处理,感慨ARM真的是难了很多,贴一贴嵌入式软件的一些经历,上个月搞FAT,写写文件名的总结:&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1)有短文件名和长文件名之分,为8.3格式,短文件名存储时全部为大写字母,如abcd.txt,存储的时候8.3格式为A&nbsp;B&nbsp;C&nbsp;D&nbsp;0x20&nbsp;0x20&nbsp;0x20&nbsp;0x20&nbsp;T&nbsp;X&nbsp;T。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(2)如果名字部分大于8个字符,一定当作长文件名处理,如果小于8个,用0x20表示,如果没有扩展名,则扩展名用0x20表示。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(3)如果文件名含有“.”,则视为长文件名,如abc.1.txt。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(4)如果文件名为大小写混合,则视为长文件名,如aBc.txt,123.tXt。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(5)长文件名目录项之后就是短文件名,每个长文件名目录项的开头字节如0x42&nbsp;0x01,有0x40的是长文件名的最后一个目录项。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(6)文件名abcd.TXT、ABCD.txt、ABCD.TXT、abcd.txt表示的是同一个文件,你说windos会怎么显示这个文件名?&nbsp;其实是用户怎名命名就怎么显示,即:如果用户命名为abcd.TXT,看到的就是abcd.TXT,不会看到ABCD.txt、ABCD.TXT、abcd.txt这三种显示。&nbsp;再问,这个是长文件名吗?&nbsp;不是,abcd.TXT、ABCD.txt、ABCD.TXT、abcd.txt都是短文件名,都是同一个文件名,符合8.3格式,是短文件名。&nbsp;那么windows根据什么信息知道要给用户显示成abcd.TXT,而不是ABCD.txt、ABCD.TXT、abcd.txt呢?&nbsp;FAT规范没有提到这个显示的依据,其实windows是根据短目录项的第12字节来决定如何显示的,如0x00时显示为abcd.txt,&nbsp;0x18时显示为ABCD.TXT,&nbsp;好像是这样,具体数值怎么显示我忘记了。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其实windows也没有严格遵循FAT规范,如:FAT16规定保留扇区为0,其实不一定,windows将U盘格式化成FAT16格式的时候一般都会有保留扇区。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;深入研究了FAT,感觉不会太难的。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;前段时间搞基于USB的FAT16文件系统,像FAT1、FAT2怎么定位,根目录怎么定位,都可以很快算出来。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果一个文件夹内长期使用,会长生许多以0xe5字节开头的无效目录项,比如:如果文件夹内只有一个文件,其实用一个目录项记录这个文件就可以了,但是文件夹的非0扇区可以达到到好几个扇区,甚至好几簇,针对这种情况,我编写了一个函数,专门用来清理U盘的指定文件夹,把0xe5、0x05开头的目录项,无效长目录项,等等,全部清理掉,腾出空间,而不影响原来的有效文件。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个星期搞了uboot,原来只能从TFTP升级自身和ARM程序,每次都要插网线,设IP,很不方便,&nbsp;现在uboot可以支持读取U盘文件,这样可以把程序文件拷贝到U盘,uboot从U盘读取文件,然后做uboot自我升级、应用程序升级、FPGA1和FPGA2的配置芯片m25p16、m25p20的升级,节省了原来用编程器给每块芯片烧写程序的大量时间,能提升生产效率。&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;在uboot的include/configs/目录下有一个对应开发板的配置头文件,如smdk2410.h,打开#define&nbsp;CONFIG_COMMANDS语句的USB和FAT功能开关,然后再加上以下语句:<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;CONFIG_CMD_USB<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;CONFIG_CMD_FAT<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;CONFIG_USB_OHCI<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;CONFIG_USB_STORAGE<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;CONFIG_USB_KEYBOARD<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;CONFIG_DOS_PARTITION<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;CFG_DEVICE_DEREGISTER<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;CONFIG_SUPPORT_VFAT<br />&nbsp;&nbsp;&nbsp;&nbsp;#define&nbsp;LITTLEENDIAN<br />&nbsp;&nbsp;&nbsp;&nbsp;这样就给uboot加上了读取U盘的功能,你只要把可以烧写flash的程序文件存到U盘,用fatload命令如fatload&nbsp;usb&nbsp;0&nbsp;0x30000000&nbsp;zimage.img,就可以从U盘把zimage.img文件读取到0x30000000地址的SDRAM处。不过uboot不会自动打开USB功能,所以使用USB功能之前先用usb&nbsp;start命令打开USB功能。用fatls&nbsp;usb&nbsp;0&nbsp;命令还可以通过超级终端显示U盘内的文件情况。执行这些命令可以通过超级终端输入命令执行,也可以在程序中设定执行命令,如:<br />char&nbsp;*s=&quot;usb&nbsp;start&quot;;//打开USB功能<br />run(s,0);&nbsp;<br />s&nbsp;=&nbsp;&quot;fatload&nbsp;usb&nbsp;0&nbsp;0x30000000&nbsp;zimage.img&quot;&nbsp;;<br />run(s,0);<br />这样就可以运行这条命令了。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />给uboot增加命令很简单:<br />int&nbsp;do_mycommand&nbsp;(cmd_tbl_t&nbsp;*cmdtp,&nbsp;int&nbsp;flag,&nbsp;int&nbsp;argc,&nbsp;char&nbsp;*argv[])<br />{<br />//这里加上你的命令要实现的功能就可以了<br />}<br />U_BOOT_CMD(<br />&nbsp;&nbsp;&nbsp;&nbsp;mycommand,&nbsp;&nbsp;&nbsp;2,&nbsp;&nbsp;&nbsp;1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;do_mycommand&nbsp;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;mycommand&nbsp;-&nbsp;this&nbsp;is&nbsp;my&nbsp;command
&quot;,<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;mycommand
&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;do&nbsp;mycommand
&quot;<br />);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;可以装virtualBOX虚拟机+fedora来编译uboot,还有交叉编译器cross-x.x.x.tar.bz2和uboot,用tar解压之后简单修改一下编译器路径就能编译。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有空把FAT和uboot的资料整理共享^_^!&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;争取10、11、12三个月把ADS的圣经ARM&nbsp;Architecture&nbsp;Reference&nbsp;Manual、ADS_AssemblerGuide_B、ADS_DeveloperGuide_D、ADS_LinkerGuide_A、ATPCS啃完,为自己加油o(∩_∩)o..
walnutcy 发表于 2008-9-19 21:35 | 显示全部楼层

别用ADS了,早就不再升级了,

  
bh3nvn 发表于 2008-9-20 11:18 | 显示全部楼层

别用ADS了,早就不再升级了

也不支持以后的Cortex系列
 楼主| linnaldf 发表于 2008-9-20 13:49 | 显示全部楼层

这些是ARM的精髓,realview文档也有这些东西

难道这些原理对realview来说是另类?工具变了,实质的东西是不会变的,再说这些东西压根没多少人会去看,可能realview也有这些文档,这些都是ARM的精髓。
foxfoxes 发表于 2008-9-23 15:21 | 显示全部楼层

  
sodwell 发表于 2008-9-23 15:50 | 显示全部楼层

re

非常好!很有实用性!<br />thanks&nbsp;for&nbsp;your&nbsp;share!
lj33072315 发表于 2008-10-20 11:06 | 显示全部楼层

顶!!!!!!!!!!

Mindor 发表于 2010-2-28 08:06 | 显示全部楼层
谢了~其中的FAT文件系统说的挺好~~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

70

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部