涛行九天 发表于 2008-5-8 02:13

eCos扫盲之eCos内存文件系统

这个是2001年学习的时候弄的,现在都忘到爪哇国了,大家了解一下eCos,还是一个很不错的os,这方面armecos是专家。<br /><br />eCos内存文件系统<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;eCos提供两种存储方式,由宏CYGPKG_FS_RAM_SIMPLE是否定义来决定采用那种存储方式。<br />1.&nbsp;&nbsp;&nbsp;&nbsp;简单存储<br />优点:操作方法和存储结构简单。<br />缺点:如果一些文件需要按比例分配,产生的碎片可能会导致一些文件无法得到扩展空间,尽管还有足够的空间;需要malloc()函数。<br />2.&nbsp;&nbsp;&nbsp;&nbsp;块存储<br />可以通过malloc()分配或根据需要从保留的内存块数组中得到。<br />优点:方便管理;用malloc()分配时,可以分配任何空闲内存以得到正确的大小;不需要malloc()函数。<br />缺点:用malloc()分配时,每块的内存占用描述符要占用内存空间;使用内存块数组,则它将被永久保留。<br /><br />所有的文件和目录都用结点对象来描述;每个ramfs_node结构如下:<br />struct&nbsp;ramfs_node<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;mode_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mode;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;node&nbsp;type<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_ucount32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;refcnt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;open&nbsp;file/current&nbsp;dir&nbsp;references<br />&nbsp;&nbsp;&nbsp;&nbsp;nlink_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nlink;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;number&nbsp;of&nbsp;links&nbsp;to&nbsp;this&nbsp;node<br />&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;size&nbsp;of&nbsp;file&nbsp;in&nbsp;bytes<br />&nbsp;&nbsp;&nbsp;&nbsp;time_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;atime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;last&nbsp;access&nbsp;time<br />&nbsp;&nbsp;&nbsp;&nbsp;time_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mtime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;last&nbsp;modified&nbsp;time<br />&nbsp;&nbsp;&nbsp;&nbsp;time_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ctime;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;last&nbsp;changed&nbsp;status&nbsp;time<br />#ifdef&nbsp;CYGPKG_FS_RAM_SIMPLE<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;The&nbsp;data&nbsp;storage&nbsp;in&nbsp;this&nbsp;case&nbsp;consists&nbsp;of&nbsp;a&nbsp;single<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;malloced&nbsp;memory&nbsp;block,&nbsp;together&nbsp;with&nbsp;its&nbsp;size.<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;datasize;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;size&nbsp;of&nbsp;data&nbsp;block<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*data;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;malloced&nbsp;data&nbsp;buffer<br /><br />#else<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;The&nbsp;data&nbsp;storage&nbsp;in&nbsp;this&nbsp;case&nbsp;consists&nbsp;of&nbsp;arrays&nbsp;of&nbsp;pointers<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;to&nbsp;data&nbsp;blocks.&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />#if&nbsp;CYGNUM_RAMFS_BLOCKS_DIRECT&nbsp;&gt&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Directly&nbsp;accessible&nbsp;blocks&nbsp;from&nbsp;the&nbsp;inode.<br />&nbsp;&nbsp;&nbsp;&nbsp;ramfs_block&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*direct;<br />#endif<br />#if&nbsp;&nbsp;CYGNUM_RAMFS_BLOCKS_INDIRECT1&nbsp;&gt&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Single&nbsp;level&nbsp;indirection<br />&nbsp;&nbsp;&nbsp;&nbsp;ramfs_block&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**indirect1;<br />#endif<br />#if&nbsp;&nbsp;CYGNUM_RAMFS_BLOCKS_INDIRECT2&nbsp;&gt&nbsp;0<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Two&nbsp;level&nbsp;indirection<br />&nbsp;&nbsp;&nbsp;&nbsp;ramfs_block&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;***indirect2;<br />#endif<br /><br />#endif<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />};<br /><br />&nbsp;&nbsp;.mode&nbsp;结点类型,文件或目录<br />&nbsp;&nbsp;.refcnt引用计数;对文件来讲,每一个open是一次引用;对目录来讲,当成为当前目<br />录或打开进行读操作是一次引用<br />&nbsp;&nbsp;.nlink链接计数,每个目录对该结点的引用<br />&nbsp;&nbsp;.size&nbsp;该结点的数据大小(按字节)<br />&nbsp;&nbsp;.atime结点最后被访问时间<br />&nbsp;&nbsp;.mtime结点数据最后被修改时间<br />&nbsp;&nbsp;.ctime结点状态最后被改变的时间<br />&nbsp;&nbsp;.数据区:整体或块存储<br /><br />目录入口<br />ramfs_dirent结构包含以下字段:<br />struct&nbsp;ramfs_dirent<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ramfs_node&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*node;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;pointer&nbsp;to&nbsp;node<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inuse:1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;entry&nbsp;in&nbsp;use?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;first:1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;first&nbsp;directory&nbsp;entry&nbsp;fragment?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last:1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;last&nbsp;directory&nbsp;entry&nbsp;fragment?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;namelen:8,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;bytes&nbsp;in&nbsp;whole&nbsp;name<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fraglen:8;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;bytes&nbsp;in&nbsp;name&nbsp;fragment<br />&nbsp;&nbsp;&nbsp;&nbsp;off_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;offset&nbsp;of&nbsp;next&nbsp;dirent<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Name&nbsp;fragment,&nbsp;fills&nbsp;rest&nbsp;of&nbsp;entry.<br />&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name;<br />};<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;.node被该入口引用的结点(出现在每一个目录入口片段)<br />&nbsp;&nbsp;&nbsp;&nbsp;.inuse&nbsp;1:在使用,0:空闲<br />&nbsp;&nbsp;&nbsp;&nbsp;.first&nbsp;1:这是目录入口的第一个片段<br />&nbsp;&nbsp;&nbsp;&nbsp;.last&nbsp;&nbsp;1:这是目录入口的第一个片段<br />&nbsp;&nbsp;&nbsp;&nbsp;.namelen&nbsp;文件名的总长度<br />&nbsp;&nbsp;&nbsp;&nbsp;.fraglen&nbsp;在该片段存贮的文件名的长度(按字节)<br />&nbsp;&nbsp;&nbsp;&nbsp;.next&nbsp;该目录入口的下一个片段<br />&nbsp;&nbsp;&nbsp;&nbsp;.name&nbsp;存贮在该入口的文件名的片段<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;结点对象与目录入口的关系(以块存储为例):<br />1.&nbsp;&nbsp;&nbsp;&nbsp;如果一个结点描述的是目录,则其数据区存放的是一系列目录入口,包含“。”、“。。”和其下的子目录的目录入口(指向对应的子目录结点对象)和文件的目录入口(指向对应的文件结点对象)。<br />2.&nbsp;&nbsp;&nbsp;&nbsp;如果一个结点描述的是文件,则其数据区存放的是其文件内容。其所在目录的目<br />&nbsp;录入口中该文件的目录入口指向该结点。<br /><br />假如存在这样一个文件:/mylongdirtest/test1.c;每个目录入口保存8个字符长的名字;<br />则其对应的内存文件系统的结构如图(见下页),每个ramfs_node结点的数据按块存贮;<br />&nbsp;&nbsp;&nbsp;&nbsp;以下显示了一个文件最大时的数据块的分布:(一块256字节,缺省配置)<br /><br />&nbsp;&nbsp;&nbsp;Node<br />~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~<br />|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />+------------+<br />|&nbsp;&nbsp;&nbsp;&nbsp;*------+--------&gt&nbsp;data&nbsp;block&nbsp;0<br />+-------------+<br />|&nbsp;&nbsp;&nbsp;&nbsp;*------+--------&gt&nbsp;data&nbsp;block&nbsp;1<br />+-------------+<br />|&nbsp;&nbsp;&nbsp;&nbsp;*------+--------&gt&nbsp;data&nbsp;block&nbsp;2<br />+-------------+<br />|&nbsp;&nbsp;&nbsp;&nbsp;*------+--------&gt&nbsp;data&nbsp;block&nbsp;3<br />+-------------+<br />|&nbsp;&nbsp;&nbsp;&nbsp;*------+--------&gt&nbsp;data&nbsp;block&nbsp;4<br />+-------------+<br />|&nbsp;&nbsp;&nbsp;&nbsp;*------+--------&gt&nbsp;data&nbsp;block&nbsp;5<br />+------------+<br />|&nbsp;&nbsp;&nbsp;&nbsp;*------+--------&gt&nbsp;data&nbsp;block&nbsp;6<br />+-------------+<br />|&nbsp;&nbsp;&nbsp;&nbsp;*------+--------&gt&nbsp;data&nbsp;block&nbsp;7<br />+-------------+<br />|&nbsp;&nbsp;&nbsp;&nbsp;*------+-----------&gt&nbsp;+------------+<br />+-------------+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;*------+--------&gt&nbsp;data&nbsp;block&nbsp;8<br />|&nbsp;&nbsp;&nbsp;&nbsp;*------+----+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+------------+<br />+-------------+&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+-----------+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;*------+--------&gt&nbsp;data&nbsp;block&nbsp;71<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+-----------+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+-----&gt+------------+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+------------+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*------+----------&gt|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*------+----&gtdata&nbsp;block&nbsp;72<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+------------+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+------------+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+------------+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+-------------+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;*------+----+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*------+----&gt&nbsp;data&nbsp;block&nbsp;135<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+------------+&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+-------------+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+------------+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+--------&gt|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*------+----&gt&nbsp;data&nbsp;block&nbsp;4104<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+------------+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+------------+<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*------+----&gt&nbsp;data&nbsp;block&nbsp;4167<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+------------+<br />struct&nbsp;cyg_mtab_entry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;ramfs_node<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ramfs_fste&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ramblock&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;longdir&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ramfs_dirent<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“.”<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ramfs_dirent<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“.”<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;test1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“..”<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br /><br />&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“..”<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“mylongdi”<br /><br /><br />&nbsp;&nbsp;struct&nbsp;cyg_file<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“test1.c”<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&ramfs_fileops&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;“rtest”<br />函数说明:<br />1.&nbsp;&nbsp;&nbsp;&nbsp;block_init:如果定义了文件内存块数组,则将这些内存块组织成一个链表,表头是<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;block_free_list.<br />2.&nbsp;&nbsp;&nbsp;&nbsp;block_alloc:&nbsp;如果定义了文件内存块数组,则从block_free_list中分配一块,否则用malloc动态分配;并将该块的数据全部置为零.<br />3.&nbsp;block_free:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果定义了文件内存块数组,则将其释放到以block_free_list为表头的空闲内存链中;否则用free释放到内存池.<br />4.&nbsp;findbuffer_node(&nbsp;ramfs_node&nbsp;&nbsp;*node,&nbsp;off_t&nbsp;pos,&nbsp;cyg_uint8&nbsp;**buffer,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;*size,&nbsp;cyg_bool&nbsp;alloc)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//直接调用findbuffer_direct(块存储)<br />&nbsp;&nbsp;在结点node的数据区中找到偏移量为pos的内存区域,如果相应的块不存在且alloc=true,<br />&nbsp;&nbsp;则分配一块(当然要受到块的数量的限制)。<br />5.&nbsp;freebuffer_node:&nbsp;释放一个文件结点的数据区。<br />6.findbuffer_direct(&nbsp;off_t&nbsp;pos,&nbsp;ramfs_block&nbsp;**blocks,&nbsp;int&nbsp;nblocks,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cyg_uint8&nbsp;**buffer,&nbsp;size_t&nbsp;*size,&nbsp;cyg_bool&nbsp;alloc)<br />&nbsp;根据pos计算出块号和块内偏移量,如果相应的块不存在且alloc是true,则分配一块;<br />&nbsp;blocks保存了当前所有的块,如果blocks[块号]=NULL,说明对应的块未分配,<br />&nbsp;块号不能大于nblocks;正确返回时*buffer指向对应块偏移量的地址,*size=块的尺寸-块内&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;偏移量(如alloc=true,即该块剩余空间)。<br />7.alloc_node:为文件结点分配一段内存,并初始化struct&nbsp;ramfs_node.<br />8.free-node:&nbsp;释放一个文件结点。<br />9.dec_refcnt:&nbsp;文件结点的引用计数减1,如为0则可能会导致该结点被删除。<br />10.&nbsp;add_direntry(&nbsp;ramfs_node&nbsp;*dir,&nbsp;&nbsp;&nbsp;/*欲添加目录的结点(该结点是一目录)*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;char&nbsp;*name,&nbsp;&nbsp;/*添加的目录名*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;namelen,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*添加的目录名的长度*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ramfs_node&nbsp;*node&nbsp;&nbsp;/*引用的结点*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />&nbsp;在目录dir下添加目录入口(长文件名会添加几个目录入口),引用结点node.<br />&nbsp;比如:add_direntry(root,”.”,1,root)&nbsp;:在root结点添加一个目录”.”,引用的结点是其自己;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add_direntry(root,”bar”,3,node):&nbsp;在root结点添加一个目录”bar”,引用结点node.<br />&nbsp;11.&nbsp;find_direntry(&nbsp;ramfs_node&nbsp;*dir,&nbsp;const&nbsp;char&nbsp;*name,&nbsp;int&nbsp;namelen&nbsp;)<br />&nbsp;&nbsp;在目录dir的数据区查找名字为name的目录,找到后,返回其第一个目录入口;<br />比如:find_direntry(root,”mylongdirtest”,13):返回root结点下名字是”mylongdi”的目录入口.<br />&nbsp;12.&nbsp;del_direntry(&nbsp;ramfs_node&nbsp;*dir,&nbsp;const&nbsp;char&nbsp;*name,&nbsp;int&nbsp;namelen&nbsp;)<br />&nbsp;&nbsp;删除目录dir下名字为name的所有目录入口片断。<br />&nbsp;13.&nbsp;init_dirsearch&nbsp;(&nbsp;ramfs_dirsearch&nbsp;*ds,ramfs_node&nbsp;*dir,&nbsp;const&nbsp;char&nbsp;*name)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtdir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;dir;<br />&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtpath&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;name;<br />&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtnode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;dir;<br />&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;name;<br />&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtnamelen&nbsp;&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtlast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;false;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;初始化目录查找对象ds;<br />&nbsp;&nbsp;struct&nbsp;ramfs_dirsearch<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;ramfs_node&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*dir;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;进行查找的目录<br />&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*path;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;查找路径<br />&nbsp;&nbsp;&nbsp;&nbsp;ramfs_node&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*node;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;找到的结点<br />&nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*name;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;最后用到的名字片段<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;namelen;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;名字片段的长度<br />&nbsp;&nbsp;&nbsp;&nbsp;cyg_bool&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;路径的最后一个名字片段?<br />&nbsp;&nbsp;&nbsp;};<br />14.&nbsp;find_entry(&nbsp;ramfs_dirsearch&nbsp;*ds&nbsp;)<br />查找ds.path中下一个目录,并修改&nbsp;ds-&gtnode.<br />比如init_dirsearch(ds,root,”mylongdirtest/test1.c”);<br />&nbsp;此时:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtdir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=root;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtpath&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;”mylongdirtest/test1.c”;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtnode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;root;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;”mylongdirtest/test1.c”;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtnamelen&nbsp;&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtlast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;false;&nbsp;&nbsp;&nbsp;&nbsp;<br />find_entry(&nbsp;ds);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtdir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=root;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtpath&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;”mylongdirtest/test1.c”;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtnode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=longdir;&nbsp;//见P7图示<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;”mylongdirtest/test1.c”;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtnamelen&nbsp;&nbsp;=&nbsp;13;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtlast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;false;&nbsp;&nbsp;&nbsp;&nbsp;<br />其实,ds-&gtdir、ds-&gtpath也要作相应的修改(ds-&gtdir=longdir,ds-&gtpath=”test1.c”),<br />只是不在这作,在ramfs_find中修改.<br />10.&nbsp;ramfs_find(&nbsp;ramfs_dirsearch&nbsp;*d&nbsp;)<br />&nbsp;&nbsp;&nbsp;查找某个目录或文件<br />&nbsp;&nbsp;&nbsp;比如:init_dirsearch(ds,root,”mylongdirtest/test1.c”);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ramfs_find(ds);<br />&nbsp;&nbsp;&nbsp;此时ds的内容为:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtdir&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=longdir;&nbsp;//指向要查找的文件结点的父目录<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtpath&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;”test1.c”;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtnode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=test1;&nbsp;//见P7图示,指向要查找的文件结点<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;”mylongdirtest/test1.c”;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtnamelen&nbsp;&nbsp;=7;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds-&gtlast&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;true;&nbsp;&nbsp;<br />11.&nbsp;ramfs_mount&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;cyg_fstab_entry&nbsp;*fste,&nbsp;cyg_mtab_entry&nbsp;*mte&nbsp;)<br />&nbsp;&nbsp;&nbsp;安装内存文件系统<br />12.ramfs_open&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;cyg_mtab_entry&nbsp;*mte,&nbsp;cyg_dir&nbsp;dir,&nbsp;const&nbsp;char&nbsp;*name,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;mode,&nbsp;&nbsp;cyg_file&nbsp;*file&nbsp;)<br />为了读或写,打开一个文件;如果文件不存在,则根据mode进行相应处理,比如若mode&O_CREATE,则建一个新的文件;文件的偏移量为零或结尾(若mode&O_APPEND).&nbsp;会使该文件结点的引用计数refcnt+1,且指针offset指向文件头。<br />比如ramfs_open(mte,root,”mylongdirtest/test1.c”,READ,file),结果见图示;<br />13.&nbsp;ramfs_mkdir&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;cyg_mtab_entry&nbsp;*mte,&nbsp;cyg_dir&nbsp;dir,&nbsp;const&nbsp;char&nbsp;*name&nbsp;)<br />创建一个目录,同时会在自己目录下添加“。”“。。”两个目录入口,分别引用结点自己和父目录结点。<br />比如ramfs_mkdir(mte,root,”mydir1/mydir2”):在目录mydir1处创建子目录mydir2,<br />若目录mydir1不存在,则出错。<br />14.ramfs_fo_read&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(struct&nbsp;CYG_FILE_TAG&nbsp;*fp,&nbsp;struct&nbsp;CYG_UIO_TAG&nbsp;*uio)<br />ramfs_fo_write&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(struct&nbsp;CYG_FILE_TAG&nbsp;*fp,&nbsp;struct&nbsp;CYG_UIO_TAG&nbsp;*uio)<br />读和写都是对结构CYG_UIO_TAG进行操作;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;CYG_UIO_TAG<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;CYG_IOVEC_TAG&nbsp;*uio_iov;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;pointer&nbsp;to&nbsp;array&nbsp;of&nbsp;iovecs&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uio_iovcnt;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;number&nbsp;of&nbsp;iovecs&nbsp;in&nbsp;array&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;off_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uio_offset;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;offset&nbsp;into&nbsp;file&nbsp;this&nbsp;uio&nbsp;corresponds&nbsp;to&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;ssize_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uio_resid;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;residual&nbsp;i/o&nbsp;count&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;enum&nbsp;cyg_uio_seg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uio_seg**;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;see&nbsp;above&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;enum&nbsp;cyg_uio_rw&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uio_rw;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;see&nbsp;above&nbsp;*/<br />};<br /><br />struct&nbsp;CYG_IOVEC_TAG<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*iov_base;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Base&nbsp;address.&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;ssize_t&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iov_len;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Length.&nbsp;*/<br />};<br />&nbsp;&nbsp;&nbsp;&nbsp;比如当应用程序调用函数read/write对某个内存文件进行读/写操作时,函数read/write填充上述两个结构,然后调用ramfs_fo_read/ramfs_fo_write进行相应的读/写操作;<br /><br /><br />

armecos 发表于 2008-5-8 06:40

不错,ecos的RAM文件系统是非常好的入门教材,

&nbsp;&nbsp;&nbsp;&nbsp;如果你对文件系统感兴趣,建议不要一开始就看FAT等资料,而是先从ROMFS的源码看起,那个特别简单,而且完全符合UNIX&nbsp;IO标准,程序还特别短,学起来很快。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;然后看看RAMFS文件系统,它的特点是能读写,支持动态地增加文件节点,里面用到的数据结构非常巧妙,这种把文件和目录看成节点的方法,特别能启发我们的设计思路。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;我是2007年才看的这两个FS实现源码,当时立即就顿悟了文件系统的实现原理,然后很快就看懂了FAT文件,ecos这方面的一致性很好,所有FS都是一个模子。JFFS2也差不多是这样。<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;如果你想一开始就学习正规标准的FS,那么最好选择<b>《ecos增值包》产品</b>。看到很多人从FAT开始学习文件系统,我感到有些担忧,那一定很痛苦,而且现在的FAT源码质量参差不齐,初学者如果参考一个很不标准正规的代码,那么会对以后使用造成障碍,养成坏习惯再改就太困难了,所以最好一开始就学习ecos高质量的标准FS代码。建议不要学习DOS下的那种文件系统,而是一开始就学习UNIX下的那种。

Swd21ic 发表于 2008-5-9 23:37

Re

我觉得armecos真是天才..<br />随时随地都能进行推销...<br /><br />哈哈.

rainmans 发表于 2008-5-13 18:07

LS说的对,杨工是个商业奇才。技术好自不必说

coke 发表于 2008-5-14 10:30

re

不知道eCos和VxWorks哪个在产品应用更广泛.&nbsp;

brandnew 发表于 2008-5-14 12:03

。。。

口水+小狗
页: [1]
查看完整版本: eCos扫盲之eCos内存文件系统