最新日志

发表于:2008-7-28 12:48:39
标签:无标签

0

JFFS2 文件系统及新特性介绍

JFFS2 是一个开放源码的项目(www.infradead.org)。 它是在闪存上使用非常广泛的读/写文件系统,在嵌入式系统中被普遍的应用。这篇文章首先分析了在闪存上使用 JFFS2 的必要性,然后详细的阐述了JFFS2 实现的内部机制,包括日志结构的文件系统,关键的数据结构,挂载过程和垃圾收集机制。同时也指出了 JFFS2的局限性,并介绍了最新的针对 JFFS2 的不足进行改进的补丁程序。最后对 JFFS3 的设计思想和现在的开发状况给予了简单的介绍。
1. 为什么需要 JFFS2
这一小节首先介绍了闪存相对于磁盘介质的特别之处,然后分析了将磁盘文件系统运行在闪存上的不足,同时也给出了我们使用 JFFS2 的理由。
1.1 闪存(Flash Memory) 的特性和限制
这里所介绍的闪存的特性和限制都是从上层的文件系统的角度来看的,而不会涉及到具体的物理特性。总的来说,有两种类型的 flash memory: NOR flash 和 NAND flash. 先介绍一下这两种闪存所具有的共同特性。
A) 闪存的最小寻址单位是字节(byte),而不是磁盘上的扇区(sector)。这意味着我们可以从一块闪存的任意偏移(offset)读数据,但并不表明对闪存写操作也是以字节为单位进行的。我们会在下面的阐述中找到答案。
B) 当一块闪存处在干净的状态时(被擦写过,但是还没有写操作发生),在这块flash上的每一位(bit)都是逻辑1。
C) 闪存上的每一位(bit)可以被写操作置成逻辑0。 可是把逻辑 0 置成逻辑 1却不能按位(bit)来操作,而只能按擦写块(erase block)为单位进行擦写操作。擦写块的大小从 4K 到128K不等。从上层来看,擦写所完成的功能就是把擦写块内的每一位都重设置(reset)成逻辑 1。
D)闪存的使用寿命是有限的。具体来说,闪存的使用寿命是由擦写块的最大可擦写次数来决定的。超过了最大可擦写次数,这个擦写块就成为坏块 (badblock)了。因此为了避免某个擦写块被过度擦写,以至于它先于其他的擦写块达到最大可擦写次数,我们应该在尽量小的影响性能的前提下,使擦写 操作均匀的分布在每个擦写块上。这个过程叫做磨损平衡(wear leveling)。
NOR flash 与 NAND flash 的不同之处:
A) NOR flash 读/写操作的基本单位是字节;而 NAND flash 又把擦写块分成页(page),页是写操作的基本单位,一般一个页的大小是 512 或 2K 个字节。对于一个页的重复写操作次数是有限制的,不同厂商生产的 NAND flash有不同的限制,有些是一次,有些是四次,六次或十次。
B)  按照现在的技术水平,一般来说NOR flash擦写块的最大可擦写次数在十万次左右,NAND flash擦写块的最大可擦写次数在百万次左右。
1.2 闪存转换层
将磁盘文件系统(ext2, FAT)运行在闪存上的很自然的方法就是在文件系统和闪存之间提供一个闪存转换层(FlashTranslation Layer), 它的功能就是将底层的闪存模拟成一个具有 512字节扇区大小的标准块设备(blockdevice)。对于文件系统来说,就像工作在一个普通的块设备上一样,没有任何的差别。

图一
图一
                        一个闪存转换层的最简单的实现就是将模拟的块设备一对一的映射到闪存上。举例来说,当上层的文件系统要写一个块设备的扇区时,闪存转换层要做下面的操作来完成这个写请求:
1 将这个扇区所在擦写块地数据读到内存中,放在缓存(buffer)中
2 将缓存中与这个扇区对应的内容用新的内容替换掉
3 对该擦写块执行擦写操作
4 将缓冲中的数据写回该擦写块
这种实现方式的缺点是很明显的:
1 效率低,对一个扇区的更新要重写整个擦写块上的数据,造成数据带宽很大的浪费。
2 没有提供磨损平衡,那些被频繁更新的数据所在擦写块将首先变成坏块。
3 非常不安全,很容易引起数据的丢失。如果在上面的第三步和第四步之间发生了突然掉电(power loss),那么整个擦写块中的数据就全部丢失了。这在突然掉电经常发生的嵌入式系统中是不能接受的。
MTD 中的内核模块 mtdblock 就是基于这种机制实现的,同时还作了一些优化。只有当文件系统的写请求超过了一个擦写块的边界的时候,它才会执行对闪存的擦写,写回操作。
因此,为了解决上面这种实现方式的问题,闪存转换层需要做更多的事情。闪存转换层不能只实现这种一对一的映射,而需要将模拟块设备的扇区存储在闪存的不同 位置,并且维持扇区到闪存的映射关系。更进一步,闪存转换层还必须能理解上层文件系统的语义,否则闪存转换层没办法做垃圾回收 (GarbageCollection)。这样实现最大的问题就是效率不高,具体来说,闪存转换层为了能理解上层文件系统的语义,必须对文件系统的每个写 请求进行解析,这势必带来写操作性能的下降。另外要求文件系统下面的一层去理解文件系统的语义,很显然这不是最好的解决方式。我们还有很好的解决问题的方 法,就是实现一个特别针对闪存的文件系统。而 JFFS2 就是一个这样的文件系统。
[/table]

2.  JFFS2
有 JFFS2 就要有 JFFS v1,没错,JFFS v1 最初是由瑞典的 Axis Communications AB公司开发的,使用在他们的嵌入式设备中,并且在 1999 年末基于 GNU GPL 发布出来。最初的发布版本基于 Linux 内核 2.0,后来RedHat 将它移植到 Linux 内核 2.2,做了大量的测试和 bug fix的工作使它稳定下来,并且对签约客户提供商业支持。但是在使用的过程中,JFFS v1 设计中的局限被不断的暴露出来。于是在 2001年初的时候,RedHat 决定实现一个新的闪存文件系统,这就是现在的 JFFS2。下面将详细介绍 JFFS2设计中主要的思想,关键的数据结构和垃圾收集机制。这将为我们实现一个闪存上的文件系统提供很好的启示。首先,JFFS2是一个日志结构 (log-structured)的文件系统,包含数据和原数据(meta-data)的节点在闪存上顺序的存储。JFFS2之所以选择日志结构的存储方 式,是因为对闪存的更新应该是 out-of-place 的更新方式,而不是对磁盘的 in-place的更新方式。在闪存上 in-place 更新方式的问题我们已经在闪存转换层一节描述过了。
2.1 节点头部定义和兼容性
JFFS2 将文件系统的数据和原数据以节点的形式存储在闪存上,具体来说节点头部的定义如下:

图二
图二
幻数屏蔽位:0x1985 用来标识 JFFS2 文件系统。
节点类型:JFFS2 自身定义了三种节点类型,但是考虑到文件系统可扩展性和兼容性,JFFS2从 ext2 借鉴了经验,节点类型的最高两位被用来定义节点的兼容属性,具体来说有下面几种兼容属性:
JFFS2_FEATURE_INCOMPAT:当 JFFS2 发现了一个不能识别的节点类型,并且它的兼容属性是 JFFS2_FEATURE_INCOMPAT,那么 JFFS2 必须拒绝挂载(mount)文件系统。
JFFS2_FEATURE_ROCOMPAT:当 JFFS2 发现了一个不能识别的节点类型,并且它的兼容属性是 JFFS2_FEATURE_ROCOMPAT,那么 JFFS2 必须以只读的方式挂载文件系统。
JFFS2_FEATURE_RWCOMPAT_DELETE:当 JFFS2 发现了一个不能识别的节点类型,并且它的兼容属性是 JFFS2_FEATURE_RWCOMPAT_DELETE,那么在垃圾回收的时候,这个节点可以被删除。
JFFS2_FEATURE_RWCOMPAT_COPY:当 JFFS2 发现了一个不能识别的节点类型,并且它的兼容属性是 JFFS2_FEATURE_RWCOMPAT_COPY,那么在垃圾回收的时候,这个节点要被拷贝到新的位置。
节点总长度:包括节点头和数据的长度。
节点头部 CRC 校验:包含节点头部的校验码,为文件系统的可靠性提供了支持。
2.2 节点类型
JFFS2 定义了三种节点类型:
JFFS2_NODETYPE_INODE: INODE 节点包含了i-节点的原数据(i节点号,文件的组 ID, 属主 id,访问时间,偏移,长度等),文件数据被附在 INODE 节点之后。除此之外,每个 INODE节点还有一个版本号,它被用来维护属于一个i-节点的所有 INODE 节点的全序关系。下面举例来说明这个全序关系在 JFFS2 的使用:

图三
点击看大图
因此,当文件系统从闪存上读节点信息后,会生成下面的映射信息:
                                                                                                               
图四
                                                        点击看大图                                                       
根据这个映射信息表,文件系统就知道到相应的 INODE 节点去读取相应的文件内容。最后要说明的是,JFFS2 支持文件数据的压缩存储,因此在 INODE 节点中还包含了所使用的压缩算法,在读取数据的时候选择相应的压缩算法来解压缩。
JFFS2_NODETYPE_DIRENT:DIRENT 节点就是把文件名与 i 节点对应起来。在DIRENT节点中也有一个版本号,这个版本号的作用主要是用来删除一个 dentry。具体来说,当我们要从一个目录中删除一个 dentry时,我们要写一个 DIRENT 节点,节点中的文件名与被删除的 dentry 中的文件名相同,i 节点号置为 0,同时设置一个更高的版本号。
JFFS2_NODETYPE_CLEANMARKER:当一个擦写块被擦写完毕后,CLEANMARKER 节点会被写在 NOR flash的开头,或 NAND flash 的 OOB(Out-Of-Band) 区域来表明这是一个干净,可写的擦写块。在 JFFS v1中,如果扫描到开头的 1K 都是 0xFF就认为这个擦写块是干净的。但是在实际的测试中发现,如果在擦写的过程中突然掉电,擦写块上也可能会有大块连续0xFF,但是这并不表明这个擦写 块是干净的。于是我们需要 CLEANMARKER 节点来确切的标识一个干净的擦写块。
2.3  JFFS2节点,擦写块在内存中的表示和操作
JFFS2维护了几个链表来管理擦写块,根据擦写块上的内容,一个擦写块会在不同的链表上。具体来说,当一个擦写块上都是合法(valid)的节点时,它 会在clean_list 上;当一个擦写块包含至少一个过时(obsolete)的节点时,它会在 dirty_list上;当一个擦写块被擦写完毕,并被写入 CLEANMARKER 节点后,它会在 free_list 上。
通常情况下,JFFS2 顺序的在擦写块上写入不同的节点,直到一个擦写块被写满。此时 JFFS2 从 free_list上取下一个擦写块,继续从擦写块的开头开始写入节点。当 free_list上擦写块的数量逐渐减少到一个预先设定的阀值的时候,垃圾回收就被触发了,为文件系统清理出更多的可用擦写块。为了减少对内存的占用, JFFS2 并没有把 i节点所有的信息都保留在内存中,而只是把那些在请求到来时不能很快获得的信息保留在内存中。具体来说,对于在闪存上的每个 i 节点,在内存里都有一个struct jffs2_inode_cache 与之对应,这个结构里保存了 i 节点号,指向 i 节点的连接数,以及一个指向属于这个 i节点的物理节点链表的指针。所有的 struct jffs2_inode_cache 存储在一个哈希表中。闪存上的每个节点在内存中由一个struct jffs2_raw_node_ref 表示,这个结构里保存了此节点的物理偏移,总长度,以及两个指向 structjffs2_raw_node_ref 的指针。一个指针指向此节点在物理擦写块上的下一个节点,另一个指针指向属于同一个i-节点的物理节点链表的下一个节点。
                                                               
图五
                                图五                               
在闪存上的节点的起始偏移都是 4 字节对齐的,所以 struct jffs2_inode_cache 中flash_offset 的最低两位没有被用到。JFFS2 正好利用最低位作为此节点是否过时的标记。
下面举一例来说明 JFFS2 是如何使用这些数据结构的。VFS 调用 iget() 来得到一个 i 节点的信息,当这个 i节点不在缓存中的时候,VFS 就会调用 JFFS2 的 read_inode() 回调函数来得到 i 节点信息。传给 read_inode()的参数是 i 节点号,JFFS2 用这个 i 节点号从哈希表中查找相应的 struct jffs2_inode_cache,然后利用属于这个i 节点的节点链表从闪存上读入节点信息,建立类似于表三的映射信息。
2.4  JFFS2 挂载过程
JFFS2 的挂载过程分为四个阶段:
1) JFFS2 扫描闪存介质,检查每个节点 CRC 校验码的合法性,同时分配了 struct jffs2_inode_cache 和 struct jffs2_raw_node_ref
2) 扫描每个 i 节点的物理节点链表,标识出过时的物理节点;对每一个合法的 dentry 节点,将相应的 jffs2_inode_cache 中的 nlink 加一。
3 找出 nlink 为 0 的 jffs2_inode_cache,释放相应的节点。
4 释放在扫描过程中使用的临时信息。
2.5  JFFS2 垃圾回收机制
当 free_list上的擦写块数太少了,垃圾回收就会被触发。垃圾回收主要的任务就是回收那些已经过时的节点,但是除此之外它还要考虑磨损平衡的问题。因 为如果一味的从dirty_list上选取擦写块进行垃圾回收,那么 dirty_list 上的擦写块将先于 clean_list上的擦写块被磨损坏。JFFS2 的处理方式是以 99% 的概率从 dirty_list,1% 的概率从 clean_list上取一个擦写块下来。由此可以看出 JFFS2 的设计思想是偏向于性能,同时兼顾磨损平衡。对这个块上每一个没有过时的节点执行相同的操作:
1 找出这个节点所属的 i 节点号(见图五)。
2 调用 iget(),建立这个 i 节点的文件映射表。
3 找出这个节点上没有过时的数据内容,并且如果合法的数据太少,JFFS2 还会合并相邻的节点。
4 将数据读入倒缓存里,然后将它拷贝到新的擦写块上。
5 将回收的节点置为过时。
当擦写块上所有的节点都被置为过时,就可以擦写这个擦写块,回收使用它。
[table]

3.  JFFS2 的不足之处
3.1 挂载时间过长
JFFS2 的挂载过程需要对闪存从头到尾的扫描,这个过程是很慢的,我们在测试中发现,挂载一个 16M 的闪存有时需要半分钟以上的时间。
3.2  磨损平衡的随意性(random nature)
JFFS2 对磨损平衡是用概率的方法来解决的,这很难保证磨损平衡的确定性。在某些情况下,可能造成对擦写块不必要的擦写操作;在某些情况下,又会引起对磨损平衡调整的不及时。
3.3 很差的扩展性
JFFS2 中有两个地方的处理是 O(N) 的,这使得它的扩展性很差。
首先,挂载时间同闪存的大小,闪存上节点数目成正比。
其次,虽然 JFFS2 尽可能的减少内存的占用,但通过上面对 JFFS2 的介绍我们可以知道实际上它对内存的占用量是同 i 节点数和闪存上的节点数成正比的。
因此在实际应用中,JFFS2 最大能用在 128M 的闪存上。


4.  JFFS2 的新特性
最近加入到 JFFS2 中的两个补丁程序分别解决了上面提到的挂载时间过长和磨损平衡随意性的问题。
4.1 磨损块小结补丁程序(erase block summary patch)
这个补丁程序最基本的思想就是用空间来换时间。具体来说,就是将每个擦写块每个节点的原数据信息写在这个擦写块的最后,当 JFFS2挂载的时候,对每个擦写块只需要读一次来读取这个小结节点,因此大大减少了挂载时间。使用了磨损块小结补丁程序,一个擦写块的结构就像下面这 样:
                                                                               
图六
                                        点击看大图                                       
根据我们的测试,使用磨损块小结补丁程序,挂载一个 12M 的闪存需要 2~3 秒,挂载一个 16M 的闪存需要 3~4 秒。
4.2  改进的磨损平衡补丁程序
这个补丁程序的基本思想是,记录每个擦写块的擦写次数,当闪存上各个擦写块的擦写次数的差距超过某个预定的阀值,开始进行磨损平衡的调整。调整的策略是, 在垃圾回收时将擦写次数小的擦写块上的数据迁移到擦写次数大的擦写块上。这样一来我们提高了磨损平衡的确定性,我们可以知道什么时候开始磨损平衡的调整, 也可以知道选取哪些擦写块进行磨损平衡的调整。
4.3  擦写块头部补丁程序
在写改进的磨损平衡补丁程序的过程之中,我们需要记录每个擦写块的擦写次数,这个信息需要记录在各自的擦写块上。可是我们发现 JFFS2中缺少一种灵活的对每个擦写块的信息进行扩展的机制。于是我们为每个擦写块引入了擦写块头部(header),这个头部负责纪录每个擦写块的信 息(比如说擦写次数),并且它提供了灵活的扩展机制,将来如果有新的信息需要记录,可以很容易的加入到头部之中。


5.  JFFS3 简介
虽然不断有新的补丁程序来提高 JFFS2的性能,但是不可扩展性是它最大的问题,但是这是它自身设计的先天缺陷,是没有办法靠后天来弥补的。因此我们需要一个全新的文件系统,而 JFFS3就是这样的一个文件系统,JFFS3 的设计目标是支持大容量闪存(>1TB)的文件系统。JFFS3 与 JFFS2在设计上根本的区别在于,JFFS3 将索引信息存放在闪存上,而JFFS2将索引信息保存在内存中。比如说,由给定的文件内的偏移定位到存储介质上的物理偏移地址所需的信息,查找某个目录下 所有的目录项所需的信息都是索引信息的一种。JFFS3 现在还处于设计阶段,文件系统的基本结构借鉴了 Reiser4 的设计思想,整个文件系统就是一个 B+ 树。JFFS3的发起者正工作于垃圾回收机制的设计,这是 JFFS3 中最复杂,也是最富有挑战性的部分。JFFS3 的设计文档可以在http://www.linux-mtd.infradead.org/doc/jffs3.html 得到,有兴趣的读者可以积极参与到 JFFS3 的设计中,发表自己的见解,参与讨论。


致谢
在这里要特别感谢David Woodhouse, Artem B. Bityutskiy,Joern 和 ThomasGleixner,在参与到JFFS2的开发过程中,这几位主要的项目维护者(maintainer)不断地给我帮助,耐心的回答我的问题, 在与他们的讨论过程中碰撞出很多智慧的火花和富有启发性的思想,尤其是他们对我的补丁程序提出的”尖刻”的问题,让我不断的努力思考 (thinkinghard),不断的完善它们。我想这种开放,无私,客观的精神正是开源社区的精髓所在,吸引着越来越多的开发者参与进来,并使开源社区 不断的壮大。
               

参考资料
                       

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(102)
发表于:2008-7-20 13:33:05
标签:无标签

0

Linux操作系统文件系统基础知识详解[转]

一 、Linux文件结构
  文件结构是文件存放在磁盘等存贮设备上的组织方法。主要体现在对文件和目录的组织上。
  目录提供了管理文件的一个方便而有效的途径。
  Linux使用标准的目录结构,在安装的时候,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型。
                      /根目录
                              ┃
┏━━┳━━━┳━━━┳━━━╋━━━┳━━━┳━━━┳━━━┓
┃   ┃      ┃     ┃     ┃     ┃      ┃     ┃     ┃
bin  home    dev     etc     lib     sbin    tmp      usr    var
                      ┃                               ┃
                  ┏━┻━┓     ┏━━┳━━┳━━┳━┻━┳━━┓
                  ┃      ┃    ┃   ┃    ┃    ┃     ┃    ┃
                 rc.d   cron.d X11R6  src   lib   local    man  bin
                  ┃                              
┏━━━┳━━┳━┻━┳━━━┓        
┃      ┃    ┃      ┃      ┃
init.d rc0.d  rc1.d  rc2.d …… linux bin lib src
  Linux采用的是树型结构。最上层是根目录,其他的所有目录都是从根目录出发而生成的。微软的DOS和windows也是采用树型结构,但是在 DOS和 windows中这样的树型结构的根是磁盘分区的盘符,有几个分区就有几个树型结构,他们之间的关系是并列的。但是在linux中,无论操作系统管理几个 磁盘分区,这样的目录树只有一个。从结构上讲,各个磁盘分区上的树型目录不一定是并列的。

  如果这样讲不好理解的话,我来举个例子:
  有一块硬盘,分成了4个分区,分别是/;/boot;/usr和windows下的fat
  对于/和/boot或者/和/usr,它们是从属关系;对于/boot和/usr,它们是并列关系。

  如果我把windows下的fat分区挂载到/mnt/winc下,(挂载??哦,别急,呵呵,一会就讲,一会就讲。)那么对于/mnt/winc和/usr或/mnt/winc和/boot来说,它们是从属于目录树上没有任何关系的两个分支。
  因为linux是一个多用户系统,制定一个固定的目录规划有助于对系统文件和不同的用户文件进行统一管理。但就是这一点让很多从windows转到linux的初学者感到头疼。下面列出了linux下一些主要目录的功用。
  /bin 二进制可执行命令
  /dev 设备特殊文件
  /etc 系统管理和配置文件
  /etc/rc.d 启动的配置文件和脚本
  /home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
  /lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件
  /sbin 系统管理命令,这里存放的是系统管理员使用的管理程序
  /tmp 公用的临时文件存储点
  /root 系统管理员的主目录(呵呵,特权阶级)
  /mnt 系统提供这个目录是让用户临时挂载其他的文件系统。
  /lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
  /proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信  息。
  /var 某些大文件的溢出区,比方说各种服务的日志文件
  /usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包  含:
  /usr/X11R6 存放X window的目录
  /usr/bin 众多的应用程序
  /usr/sbin 超级用户的一些管理程序
  /usr/doc linux文档
  /usr/include linux下开发和编译应用程序所需要的头文件
  /usr/lib 常用的动态链接库和软件包的配置文件
  /usr/man 帮助文档
  /usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
  /usr/local/bin 本地增加的命令
  /usr/local/lib 本地增加的库
  二 、linux文件系统

  文件系统指文件存在的物理空间,linux系统中每个分区都是一个文件系统,都有自己的 目录层次结构。linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。一个操作系统的运行离不开对文件的操作, 因此必然要拥有并维护自己的文件系统。
  Llinux文件系统使用索引节点来记录文件信息,作用像windows的文件分配表。
  索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。 一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中 的索引号,称为索引节点号。
linux文件系统将文件索引节点号和文件名同时保存在目录中。所以,目录只是将文件的名称和它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连接。

  对于一个文件来说有唯一的索引节点号与之对应,对于一个索引节点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问它。
  可以用ln命令对一个已经存在的文件再建立一个新的连接,而不复制文件的内容。连接有软连接和硬连接之分,软连接又叫符号连接。它们各自的特点是:
  硬连接:原文件名和连接文件名都指向相同的物理地址。
目录不能有硬连接;硬连接不能跨越文件系统(不能跨越不同的分区)
文件在磁盘中只有一个拷贝,节省硬盘空间;

  由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此可以防止不必要的误删除。
  符号连接:用ln -s命令建立文件的符号连接符号连接是linux特殊文件的一种,作为一个文件,它的数据是它所连接的文件的路径名。类似windows下的快捷方式。

  可以删除原有的文件而保存连接文件,没有防止误删除功能。
  这一段的的内容过于抽象,又是节点又是数组的,我已经尽量通俗再通俗了,又不好加例子作演示。大家如果还是云里雾里的话,我也没有什么办法了,只有先记住,日后在实际应用中慢慢体会、理解了。这也是我学习的一个方法吧。
三 、挂载文件系统
  由上一节知道,linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。这里所说的“按一定方式”就是指的挂载。
将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为挂载。把该子目录称为挂载点。
举个例子吧:
  根分区:
  /根目录

┏━━━━┳━━━━━┳━━━━━┳━━━━━╋━━━━━┳━━━━━┳━━━━━┳━━━━━┓
┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
bin home dev etc lib sbin tmp usr var

┏━┻━┓
┃ ┃
rc.d cron.d

┏━━━┳━━━┳━┻━┳━━━━┓
┃ ┃ ┃ ┃ ┃
init.d rc0.d rc1.d rc2.d ……
  /usr分区 :
  usr

┏━━━━┳━━━╋━━━┳━━━┳━━━┓
┃ ┃ ┃ ┃ ┃ ┃
X11R6 src lib local man bin
┃ ┃
┃ ┏━━━╋━━━┓
┃ ┃ ┃ ┃
linux bin lib src
  挂载之后就形成了文章开始时的那个图。像不像挂上去的?
  注意:1、挂载点必须是一个目录。
  2、一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。
对于其他操作系统建立的文件系统的挂载也是这样。但是需要理解的是:光盘、软盘、其他操作系统使用的文件系统的格式与linux使用的文件系统格式是不一 样的。光盘是ISO9660;软盘是fat16或ext2;windows NT是fat16、NTFS;windows98是fat16、fat32;windows2000和windowsXP是fat16、fat32、 NTFS。挂载前要了解linux是否支持所要挂载的文件系统格式。
  挂载时使用mount命令:
格式:mount [-参数] [设备名称] [挂载点]
  其中常用的参数有

  -t 指定设备的文件系统类型,常见的有:
  minix linux最早使用的文件系统
  ext2 linux目前常用的文件系统
  msdos MS-DOS的fat,就是fat16
  vfat windows98常用的fat32
  nfs 网络文件系统
  iso9660 CD-ROM光盘标准文件系统
  ntfs windows NT 2000的文件系统
  hpfs OS/2文件系统
  auto 自动检测文件系统
  -o 指定挂载文件系统时的选项。有些也可用在/etc/fstab中。常用的  有
  codepage=XXX 代码页
  iocharset=XXX 字符集
  ro 以只读方式挂载
  rw 以读写方式挂载
  nouser 使一般用户无法挂载
  user 可以让一般用户挂载设备
  提醒一下,mount命令没有建立挂载点的功能,因此你应该确保执行mount命令时,挂载点已经存在。(不懂?说白了点就是你要把文件系统挂载到哪,首先要先建上个目录。这样OK?)
  例子:windows98装在hda1分区,同时计算机上还有软盘和光盘需要挂载。
  # mk /mnt/winc
  # mk /mnt/floppy
  # mk /mnt/cdrom
  # mount -t vfat /dev/hda1 /mnt/winc
  # mount -t msdos /dev/fd0 /mnt/floppy
  # mount -t iso9660 /dev/cdrom /mnt/cdrom
  现在就可以进入/mnt/winc等目录读写这些文件系统了。
  要保证最后两行的命令不出错,要确保软驱和光驱里有盘。(要是硬盘的磁盘片也可以经常随时更换的话,我想就不会犯这样的错误了 :-> )
如果你的windows98目录里有中文文件名,使用上面的命令挂载后,显示的是一堆乱码。这就要用到 -o 参数里的codepage iocharset选项。codepage指定文件系统的代码页,简体中文中文代码是936;iocharset指定字符集,简体中文一般用cp936或 gb2312。
  当挂载的文件系统linux不支持时,mount一定报错,如windows2000的ntfs文件系统。可以重新编译linux内核以获得对该文件系统的支持。关于重新编译linux内核,就不在这里说了。
  四 、自动挂载

  每次开机访问windows分区都要运行mount命令显然太烦琐,为什么访问其他的linux分区不用使用mount命令呢?
  其实,每次开机时,linux自动将需要挂载的linux分区挂载上了。那么我们是不是可以设定让linux在启动的时候也挂载我们希望挂载的分区,如windows分区,以实现文件系统的自动挂载呢?
  这是完全可以的。在/etc目录下有个fstab文件,它里面列出了linux开机时自动挂载的文件系统的列表。我的/etc/fstab文件如下:
  /dev/hda2 / ext3 defaults 1 1
  /dev/hda1 /boot ext3 defaults 1 2
  none /dev/pts devpts gid=5,mode=620 0 0
  none /proc proc defaults 0 0
  none /dev/shm tmpfs defaults 0 0
  /dev/hda3 swap swap defaults 0 0
  /dev/cdrom /mnt/cdrom iso9660 noauto,codepage=936,iocharset=gb2312 0 0
  /dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
  /dev/hdb1 /mnt/winc vfat defaults,codepage=936,iocharset=cp936 0 0
  /dev/hda5 /mnt/wind vfat defaults,codepage=936,iocharset=cp936 0 0
  在/etc/fstab文件里,第一列是挂载的文件系统的设备名,第二列是挂载点,第三列是挂载的文件系统类型,第四列是挂载的选项,选项间用逗号分隔。第五六列不知道是什么意思,还望高手指点。
  在最后两行是我手工添加的windows下的C;D盘,加了codepage=936和iocharset=cp936参数以支持中文文件名。参数defaults实际上包含了一组默认参数:
  rw 以可读写模式挂载
  suid 开启用户ID和群组ID设置位
  dev 可解读文件系统上的字符或区块设备
  exec 可执行二进制文件
  auto 自动挂载
  nouser 使一般用户无法挂载
  async 以非同步方式执行文件系统的输入输出操作

  大家可以看到在这个列表里,光驱和软驱是不自动挂载的,参数设置为noauto。(如果你非要设成自动挂载,你要确保每次开机时你的光驱和软驱里都要有盘,呵呵。)

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(147)
发表于:2008-7-4 16:16:29
标签:无标签

0

系统学习Linux的十一点建议

  随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windows的经验往往有一些茫然的感觉:不知从何处开始学起。这里介绍学习Linux的一些建议。

  随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windows的经验往往有一些茫然的感觉:不知从何处开始学起。这里介绍学习Linux的一些建议。
  
   一、从基础开始

  常常有些朋友在Linux论坛问一些问题,不过,其中大多数的问题都是很基础的。例如:为什么我使用一个命令的时候,系统告诉我找不到该目录,我要如 何限制使用者的权限等问题,这些问题其实都不是很难的,只要了解了Linux的基础之后,应该就可以很轻易的解决掉这方面的问题。而有些朋友们常常一接触 Linux就是希望构架网站,根本没有想到要先了解一下Linux的基础。这是相当困难的。
  
   二、Linux命令是必须学习

  虽然Linux桌面应用发展很快,但是命令在Linux中依然有很强的生命力。Linux是一个命令行组成的操作系统,精髓在命令行,无论图形界面发 展到什么水平这个原理是不会变的,Linux命令有许多强大的功能:从简单的磁盘操作、文件存取、到进行复杂的多媒体图象和流媒体文件的制作。举一个例子 inux 的常用命令find,察看man文档,初学者一定会觉得太复杂而不原意用,但是你一旦学会就爱不释手.它的功能实在太强了,在配合 exec参数或者通过管道重定向到xargs命令和grep命令,可以完成非常复杂的操作,如果同样的操作用图形界面的工具来完成,恐怕要多花十几陪的时 间。

  不同版本的Linux命令数量不一样,这里笔者把它们中比较重要的和使用频率最多的命令,按照它们在系统中的作用分成几个部分介绍给大家,通过这些基础命令的学习我们可以进一步理解Linux系统:

  安装和登录命令:login、shutdown、halt、reboot、mount、umount、chsh

  文件处理命令:file、mkdir、grep、dd、find、mv、ls、diff、cat、ln

  系统管理相关命令:df、top、free、quota、at、lp、adduser、groupaddkill、crontab、tar、unzip、gunzip、last

  网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rloginrcp、finger、mail、nslookup

  系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo、pswho
  

  三、选择一本好的工具书

  工具书对于学习者而言是相当重要的。一本错误观念的工具书却会让新手整个误入歧途。目前国内关于Linux的书籍有很多不过精品的不多,笔者强烈建议阅读影印本的“O'Reilly原版Linux图书http://www.oreilly.com.cn/”,而且出版社还提供了一个非常好的路线图:http://www.oreilly.com.cn/guide/guide_linux.php

  
   四、选择一个适合你的Linux发行版本

  目前全球有超过一百多个Linux发行版本,在国内也能找到十几个常见版本。如何选择请根据你的需求和能力,RedhatLinux和 DebianLinux是网络管理员的理想选择。对于英语不是很好的读者红旗 Linux、中标Linux这些中文版本比较适合。现在一些Linux网站有一些Linux版本的免费下载,这里要说的是并不适合Linux初学者。

  五、养成在命令行下工作

  一定要养成在命令行下工作的习惯,要知道X-window只是运行在命令行模式下的一个应用程序。在命令行下学习虽然一开始进度较慢,但是熟悉后,您 未来的学习之路将是以指数增加的方式增长的。从网管员来说,命令行实际上就是规则,它总是有效的,同时也是灵活的。即使是通过一条缓慢的调制解调器线路, 它也能操纵几千公里以外的远程系统。

  六、选择一个适合你的Linux社区

  随着Linux应用的扩展,出现了不少Linux社区。其中有一些非常优秀的社区:www.linuxforum.net(国内最高水平GNU站点)、http://www.chinaunix.net/(中国最大的Unix技术社区),但是这几个论坛往往是Linux高手的舞台,如果在探讨高级技巧的论坛张贴非常初级的问题经常会没有结果。推荐适于初学者的Linux社区:Linux伊甸园http://www.linuxeden.com/,中国Linux公社http://www.linuxfans.org/nuke/index.php
  
   七、勤于实践

  要增加自己Linux的技能,只有通过实践来实现了。所以,赶快找一部计算机,赶快安装一个Linux发行版本,然后进入精彩的Linux世界,相信 对于你自己的Linux能力必然大有斩获。对Linux命令熟悉后,你可以开始搭建一个小的Linux网络,这是最好的实践方法。Linux是网络的代名 词,Linux网络服务功能非常强大,不论是邮件服务器、Web服务器、DNS服务器等都非常完善。当然你不需搭建所有服务,可以慢慢来。自己多动手,不 要非等着别人帮你解决问题。
  

  八、如何得到联机帮助

  和私有操作系统不同,各个Linux的发行版本的技术支持时间都较短,这对于Linux初学者是往往不够的。其实当你安装了一个完整的Linux系统后其中已经包含了一个强大的帮助,只是可能你还没有发现和使用它们的技巧。

  1.主流Linux发行版都自带非常详细的文档(包括手册页和FAQ),从系统安装到系统安全,针对不同层次的人的详尽文档,仔细阅读文档后40%问题都可在此解决。

  2.查阅经典工具书和Howto,特别是Howto是全球数以万计的Linux、Unix的经验总结非常有参考价值通常40%的问题同样可以解决。

  九、在Linux论坛获取帮助

  如果上面的措施没有解决问题,此时你就需要Linux社区的帮助了。 Linux的使用者一般都是专业人士,他们有着很好的电脑背景且愿意协助他人,Linux高手更具有鼓励新手的文化精神。如何在Linux社区获得帮助, 需要说明的是你要有周全的思考,准备好你的问题,不要草率的发问,否则只会得到到草率的回答或者根本得不到任何答案。越表现出在寻求帮助前为解决问题付出 的努力,你越能得到实质性的帮助。最好先搜寻一下论坛是否有您需要的文章。这样可以获得事半功倍的效果。

  下面笔者在论坛看到的一个好问题: “安装红旗4.0后,系统紫光输入法自带的双拼方案和我的习惯不一样,如何自定义双拼方案解决?谢谢?”这个问题很简练,笔者五分钟后就给出了解决方法: “首先备份原文件到其他目录,然后删掉/usr/local/unispim/unispimsp.ksc,编辑 /usr/local/unispim/unispimsp.ini,最后重启动计算机,生成新的unispimsp.ksc。”另外得到回复后如果问题 解决,向帮助过你的人发个说明,让他们知道问题是怎样解决的,这种补充有助于他人在邮件列表/新闻组/论坛中搜索对你有过帮助的完整解决方案,这可能对他 们也很有用。

  下面看看一个让人无法回答的问题:“救命各位高手,向你们请教一些问题:如何在Linux下配制HTTP、FTP、Samba、DNS、DHCP、Sendmail服务器,谢谢”这样的问题我想即使Linux高手也很难快速准确精练的回答你。

  你需要提供精确有效的信息。这并不是要求你简单的把成吨的出错代码或者数据完全转储摘录到你的提问中。如果你有庞大而复杂的测试条件,尽量把它剪裁得 越小越好。可能你会遇到这种情况,对于一个问题会出现不同内容回答,这时你需要通过实践来验证。另外把这个问题放在其他Linux社区请求帮助也是一种选 择。如果得不到答案,请不要以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。这时换一个社区是不错的选择。

  另外发问的时候一定要注意到某些礼节。因为Linux社区是一个松散的组织、也不承担回复每个帖子的义务。它不是技术支持。

  
   十、用Unix思维学习Linux

  Linux是参照Unix思想设计的,理解掌握Linux必须按照Unix思维来进行。思想性的转变比暂时性的技术提高更有用,因为他能帮助你加快学习速度。
  
   十一、学习专业英文

  如果你想深入学习Linux,看不懂因为文档实在是太难了。写的最好的、最全面的文档都是英语写的,最先发布的技术信息也都是用英语写的。即便是非英 语国家的人发布技术文档,也都首先翻译成英语在国际学术杂志和网络上发表。安装一个新的软件时先看README,再看INSTALL然后看FAQ, 最后才动手安装,这样遇到问题就知道为什么。如果说明文档不看,结果出了问题再去论坛来找答案反而浪费时间。
  
   附:Linux学习的路线图
  
   1.掌握至少50个以上的常用命令。
   2.熟悉Gnome/KDE等X-windows桌面环境操作。
   3.掌握.tgz、.rpm等软件包的常用安装方法
   4.学习添加外设,安装设备驱动程序(比如网卡)
   5.熟悉Grub/Lilo引导器及简单的修复操作。
   6.熟悉Linux文件系统?和目录结构。
   7.掌握vi,gcc,gdb等常用编辑器,编译器,调试器?。
   8.理解shell别名、管道、I/O重定向、输入和输出以及shell脚本编程。
   9.学习Linux环境下的组网。

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(214)
发表于:2008-7-2 13:09:09
标签:无标签

0

u-boot 命令大全

Printenv 打印环境变量。

Uboot> printenv
baudrate=115200
ipaddr=192.168.1.1
ethaddr=12:34:56:78:9A:BC
serverip=192.168.1.5
Environment size: 80/8188 bytes

Setenv 设置新的变量

Uboot> setenv myboard AT91RM9200DK
Uboot> printenv
baudrate=115200
ipaddr=192.168.1.1
ethaddr=12:34:56:78:9A:BC
serverip=192.168.1.5
myboard=AT91RM9200DK
Environment size: 102/8188 bytes

Saveenv 保存变量

命令将当前定义的所有的变量及其值存入flash中。用来存储变量及其值的空间只有8k字节,应不要超过。

Loadb 通过串口Kermit协议下载二进制数据。

Tftp 通过网络下载程序,需要先设置好网络配置

Uboot> setenv ethaddr 12:34:56:78:9A:BC
Uboot> setenv ipaddr 192.168.1.1
Uboot> setenv serverip 192.168.1.254    
tftp服务器的地址)
下载
bin文件到地址0x20000000处。
Uboot> tftp 20000000 application.bin application.bin应位于tftp服务程序的目录)

Uboot> tftp 32000000 vmlinux
把server(IP=环境变量中设置的serverip)中/tftpdroot/ 下的vmlinux通过TFTP读入到物理内存32000000处。

Md 显示内存区的内容。

Mm 修改内存,地址自动递增。

Nm 修改内存,地址不自动递增。

Mw 用模型填充内存

mw 32000000 ff 10000(把内存0x32000000开始的0x10000字节设为0xFF)

Cp 拷贝一块内存到另一块

Cmp 比较两块内存区

这些内存操作命令后都可加一个后缀表示操作数据的大小,比如cp.b表示按字节拷贝。

Protect 写保护操作

protect on 1:0-3(就是对第一块FLASH的0-3扇区进行保护)
protect off 1:0-3取消写保护

Erase 擦除扇区。

erase: 删除FLASH的扇区
erase 1:0-2(就是对每一块FLASH的0-2扇区进行删除)

DataFlash的操作

U-Boot在引导时如果发现NPCS0NPCS3上连有DataFlash,就会分配虚拟的地址给它,具体为 :
0xC0000000---NPCS0
0xD0000000---NPCS3

run 执行设置好的脚本

Uboot> setenv flashit tftp 20000000 mycode.bin\; erase 10020000 1002FFFF\;
cp.b 20000000 10020000 8000
Uboot> saveenv
Uboot> run flashit

bootcmd 保留的环境变量,也是一种脚本

如果定义了该变量,在autoboot模式下,将会执行该脚本的内容。

Go 执行内存中的二进制代码,一个简单的跳转到指定地址

Bootm 执行内存中的二进制代码

要求二进制代码为制定格式的。通常为mkimage处理过的二进制文件。
起动UBOOT TOOLS制作的压缩LINUX内核, bootm 3200000

Bootp 通过网络启动,需要提前设置好硬件地址。

得到所有命令列表

help  help usb, 列出USB功能的使用说明

ping  注:只能开发板PING别的机器

usb

usb start:  起动usb 功能
usb info:  列出设备
usb scan:  扫描usb storage(u 盘)设备

kgo  起动没有压缩的linux内核

kgo 32000000

fatls 列出DOS FAT文件系统

fatls usb 0列出第一块U盘中的文件

fatload 读入FAT中的一个文件

fatload usb 0:0 32000000 aa.txt 把USB中的aa.txt 读到物理内存0x32000000处!

flinfo 列出flash的信息

nfs

nfs 32000000 192.168.0.2:aa.txt
把192.168.0.2(LINUX 的NFS文件系统)中的NFS文件系统中的aa.txt 读入内存0x32000000处。

点击此处查看原文 >>

系统分类: ARM   |    用户分类:    |    来源: 整理

评论(0) | 阅读(145)
发表于:2008-6-17 12:54:43
标签:无标签

0

便携式应用中的音频接口

  针对不同的数字音频子系统,催生出几种微处理器或DSP(数字信号处理器)与音频器件间用于数字转换的接口。受系统实际性能的限制,通常情况下接口的选择 取决于音频通道数目、数据处理及采样率等参数。对便携式系统来说,功率耗散与物理器件的尺寸通常是同等重要的。本文将介绍目前市场中存在的几种音频接口规 格。
PCM规格
   最简单的音频接口之一是所谓的PCM(脉冲编码调制)接口。严格地说,所有数字信号进行传输都要经过PCM,并且需要仔细参照用于数字电话的单声道机 制。PCM接口由时钟脉冲(BCLK)、帧同步信号(FS)及数据队列组成,每个PCM对应一个将要接收或将要发送的数据。
   在FS信号的上升沿,数据传输从MSB(Most SignificantBit)字开始,FS频率等于采样率。FS信号之后开始数据字的传输,单个的数据位按顺序进行传输,1个时钟周期传输1个数据字。 发送MSB时,信号的等级首先降到最低,以避免在不同终端的接口使用不同的数据方案时造成MSB的丢失。除了在应用中正在衰落的RJ(Right- justified)格式外,目前这种方法已经用于大部分音频接口中。
    PCM接口很容易实现,原则上能够支持任何数据方案和任何采样率,但需要每个音频通道获得一个独立的数据队列,这种属性会使PCM在数字电话等初级目标应用系统中成为极受欢迎的选择。
I2S规格
   I2S接口(Inter-IC Sound)在20世纪80年代首先被飞利浦用于消费音频,并在一个称为LRCLK(Left/RightCLOCK)的信号机制中经过多路转换,将两路 音频信号成单一的数据队列。当LRCLK为高时,左声道数据被传输;LRCLK为低时,右声道数据被传输。与PCM相比,I2S更适合于立体声系统。对于 多通道系统,在同样的BCLK和LRCLK条件下,并行执行几个数据队列也是可能的。
   然而,便携式系统中的Hi-Fi音频要求高于立体声。首先,更复杂的音频IC通常通过写入内部寄存器而得到控制。由于I2S、PCM和类似的音频接口不 能提供寄存器入口,因此需要独立的控制接口,如在控制器上增加音频IC的管脚数目。第二,在不同采样率下执行音频的能力很关键,44.1kHz(音频CD 的标准频率)和48kHz(计算机音频标准频率)都是应用非常广泛的频率。
   对I2S和它的衍生系列而言,系统要么在不同的频率下产生Low-jitterBCLK和LRCLK(在PCM情况下也可以是FS),要么在软件环境中 将所有的音频流转换成单一的采样率。第一种情况要求至少有一个模拟锁相环(PLL)和两个同步反馈,并在不同频率上进行记录。而且在评估接口的功效时,必 须将增加的功耗计算在内。第二种情况虽然加强了计算能力,但也使处理器的功耗显著增加。而且当这个处理器同时执行用户应用程序时,整个系统运行速度会变 慢,在音频打开时甚至停止运行。
   现在越来越多的消费者希望从数码相机、数码摄像机、MP3播放器、手提DVD机、便携式多媒体播放器及多媒体处理器中获取更好的听觉效果和更多的功能。 欧胜公司为此扩大了解码器的工作范围,近期推出的WM897x系统I2S音频协议不但提高了系统的集成度,也提高了系统的音频质量。
    以立体声WM8980及单声道WM8982为例,可以通过屏幕显示直接与电视机相连。在便携式系统中,与高质量的音频功能相同的视频功能需要额外的视频功放来实现,WM8978系统就是对2004年10月推出的WM8974系统的全面立体声功能的升级。
   三款产品以DSP微处理器为内核,可将风声等过滤,来提高音频系统的录音功能,特别是在可视化系统中的作用更明显。另外,新产品还采用了5波段与3D音 频系统的均衡来提高音频输出以及可编程阻态滤波器消除噪声。这些系统通常也支持时钟频率在12MHz~19MHz的麦克风及手机喇叭的驱动部分,可进一步 减少产品中元器件的数量。为满足高质量音频喇叭以及压电型喇叭的功耗可以达到900mW,数字式录音回放限制器防止喇叭的过量输出,三款解码器产品的模拟 部分需要的供电电压低达2.5V,数字部分的供电电压低达1.6V。
    随着移动产品需求的急剧增加,通过把两种接口技术应用于一体,可以将简单的传输单声道音频的形式与诸如Hi-Fi功能的可拓展标准相融合,这种结合方式大大提高了电池的使用寿命,并可以整合资源,比如在MP3回放时可以轻松地处理来电。
    WM8753L将IIS协议中的立体声Hi-Fi模数转换器与独立的单声道PCM数模转换技术集成在一个芯片中,并且具有IIS协议及PCM接口都具备的数模转换功能,这就使得MP3、对话及其他音频功能可以共同工作。
   MAX8753L是少数融合了PCM/Hi-Fi功能的模拟部分工作电压低于1.8V、数字部分工作电压低于1.42V的解码器。在1.8V的工作电压 下,解码器在进行立体声回放时最低功耗是7mW,在PCM工作状态的最低功耗小于6mW。该系统集成了为连接不同扩音器的双接口技术,其中包括喇叭、耳机 以及听筒的驱动部分。外部器件已经不再需要分离的耳机或者耳机放大器部分,cap-less接口方式可以连接所有负载。嵌入式数字信号处理系统可以对音 调、低音强化、自动调整耳机音量或模/数转换器进行控制。这两种模数转换方式能够对双DSP系统进行噪音消除或进行立体声的存储。
   在主时钟频率为12MHz~24MHz的具有USB接口的系统、19.2MHz的移动系统以及标准的256fs比率12.288MHz及 24.576MHz的系统中,WM8753LHi-Fi模数转换器既可以作为控制部分,也可以作为被控部分。其内部的缩相环系统可以产生满足PCM及Hi -Fi转换所需要的时钟频率。如果音频系统中需要的时钟频率已经存在,锁相环可以用作其他的用途。
AC'97/AC-Link规格
   AC'97(音频编码1997)标准是Intel公司为计算机音频而指定的。与PCM和I2S不同,AC'97不只是一种数据格式,用于音频编码的内部 架构规格,它还具有控制功能。众所周知的AC-Link接口包括位时钟(BITCLK)、同步信号校正(SYNC)和从编码到处理器及从处理器中解码 (SDATDIN与SDATAOUT)的数据队列。AC'97数据帧以SYNC脉冲开始,包括12个20位时间段(时间段为标准中定义的不同的目的服务) 及16位“tag”段,共计256个数据序列。例如,时间段“1”和“2”用于访问编码的控制寄存器,而时间段“3”和“4”分别负载左、右两个音频通 道。“tag”段表示其他段中哪一个包含有效数据。把帧分成时间段使传输控制信号和仅通过4根线到达9个音频通道或转换成其他数据流成为可能。与具有分离 控制接口的I2S方案相比,AC'97明显减少了整体管脚数。
    例如在44.1kHz频段上播放音频,在超过12帧的一帧处各个时间段被标记为无效,有效数据点通过编码器中的D/A转换器被均匀地分布到每个时间段形成低失真模拟信号,这种方法与PLL或有采样率转换的情况相比具有相当少的功耗。
   AC'97的复杂度在于更高的门数和接口本身的功耗,通过系统级措施,如内置多速率电源,AC'97的功耗仍比较大,因此AC'97适合于使用不止一个 采样率的复杂系统,如电话机和多媒体PDA。其固有的20位数据解决方案和最高48kHz的采样率在便携式应用中是非常难得的,这些应用中电池的寿命和小 尺寸与音频质量同样重要。
   与I2S不同的是,AC'97在传输无音频附加数据码时具有特有的带宽及传输协议。因此,当AC'97系统使用时就不需要再增加额外的数字式触摸屏。欧 胜公司已经利用这特点为诸如WM9712的系统提供了集成的触摸屏接口技术、片内显示驱动技术、高保真立体声技术、声音及铃音管理技术。笔写检测以及压力 检测能力可以利用一个4管脚AC-link总线及数据接口实现音频系统与PDA便携式系统的数据传输。
   从尽可能增加电池的使用寿命方面考虑,这种将AC'97及PCM系统集成在微型PC机、掌上电脑及智能手机中的情况类似于I2S/PCS系统。欧胜公司 的WM9713产品在WM9712基础上增加了一个音频解码器用来进行手机对话管理,以尽可能地延长电池的使用寿命。
Azalia规格进入计算机和消费者音频中
   在计算机和消费音频中,AC'97规格正被近来由Intel发展起来的Azalia规格所代替。这种新的标准是对AC'97规格的加强,它包括32位解 决方案、高达192kHz的采样率,能够灵活地配置输入/输出管脚和接到插座传感器上的耳机、激活插入单个插座中的扬声器。另外,使用27.576kHz (是AC'97的两倍)的位时钟引起的额外功耗是延长电池寿命的一大障碍。因此,如果不考虑在其他市场进行发展,Azalia在便携应用中成为主流的机会 很小。
MIPI正推动音频接口规格发展
    移动工业联盟(MIPI)正针对LML(Low-Speed、Multi-dropLink)下一代移动电话推动第一种音频接口规格的发展。尽管这种开放 式规格还处于初级阶段,却很有可能用较少的管脚数将音频接口、控制接口集成在一起。这与目前可以使用的任何一种规格有所不同,正逐渐被IC业主认可和采 纳。

点击此处查看原文 >>

系统分类: 接口电路   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(241)
发表于:2008-6-13 13:03:58
标签:无标签

0

RAM和ROM的介绍

  凡是对电脑有所了解的朋友都知道内存这玩意,可是,可能有不少朋友对内存的认识仅仅局限在SDRAM和DDRSDRAM这两种类型,事实上,内存的种类是 非常多的,从能否写入的角度来分,就可以分为RAM(随机存取存储器)和ROM(只读存储器)这两大类。每一类别里面有分别有许多种类的内存。以下就让我 们看看内存到底有些什么种类吧!


一、RAM(Random Access Memory,随机存取存储器)
  RAM的特点是:电脑开机时,操作系统和应用程序的所有正在运行的数据和程序都会放置其中,并且随时可以对存放在里面的数据进行修改和存取。它的工作需要由持续的电力提供,一旦系统断电,存放在里面的所有数据和程序都会自动清空掉,并且再也无法恢复。

根据组成元件的不同,RAM内存又分为以下十八种:

01.DRAM(Dynamic RAM,动态随机存取存储器)
  这是最普通的RAM,一个电子管与一个电容器组成一个位存储单元,DRAM将每个内存位作为一个电荷保存在位存储单元中,用电容的充放电来做储存动作,但 因电容本身有漏电问题,因此必须每几微秒就要刷新一次,否则数据会丢失。存取时间和放电时间一致,约为2~4ms。因为成本比较便宜,通常都用作计算机内 的主存储器。

02.SRAM(Static RAM,静态随机存取存储器)
  静态,指的是内存里面的数据可以长驻其中而不需要随时进行存取。每6颗电子管组成一个位存储单元,因为没有电容器,因此无须不断充电即可正常运作,因此它可以比一般的动态随机处理内存处理速度更快更稳定,往往用来做高速缓存。

03.VRAM(Video RAM,视频内存)

  它的主要功能是将显卡的视频数据输出到数模转换器中,有效降低绘图显示芯片的工作负担。它采用双数据口设计,其中一个数据口是并行式的数据输出入口,另一个是串行式的数据输出口。多用于高级显卡中的高档内存。

04.FPM DRAM(Fast Page Mode DRAM,快速页切换模式动态随机存取存储器)
  改良版的DRAM,大多数为72Pin或30Pin的模块。传统的DRAM在存取一个BIT的数据时,必须送出行地址和列地址各一次才能读写数据。而 FRMDRAM在触发了行地址后,如果CPU需要的地址在同一行内,则可以连续输出列地址而不必再输出行地址了。由于一般的程序和数据在内存中排列的地址 是连续的,这种情况下输出行地址后连续输出列地址就可以得到所需要的数据。FPM将记忆体内部隔成许多页数Pages,从512B到数KB不等,在读取一 连续区域内的数据时,就可以通过快速页切换模式来直接读取各page内的资料,从而大大提高读取速度。在96年以前,在486时代和PENTIUM时代的 初期,FPM DRAM被大量使用。

05.EDO DRAM(Extended Data Out DRAM,延伸数据输出动态随机存取存储器)
  这是继FPM之后出现的一种存储器,一般为72Pin、168Pin的模块。它不需要像FPM DRAM那样在存取每一BIT数据时必须输出行地址和列地址并使其稳定一段时间,然后才能读写有效的数据,而下一个BIT的地址必须等待这次读写操作完成 才能输出。因此它可以大大缩短等待输出地址的时间,其存取速度一般比FPM模式快15%左右。它一般应用于中档以下的Pentium主板标准内存,后期的 486系统开始支持EDODRAM,到96年后期,EDO DRAM开始执行。。

06.BEDO DRAM(Burst Extended Data Out DRAM,爆发式延伸数据输出动态随机存取存储器)
  这是改良型的EDODRAM,是由美光公司提出的,它在芯片上增加了一个地址计数器来追踪下一个地址。它是突发式的读取方式,也就是当一个数据地址被送出 后,剩下的三个数据每一个都只需要一个周期就能读取,因此一次可以存取多组数据,速度比EDO DRAM快。但支持BEDODRAM内存的主板可谓少之又少,只有极少几款提供支持(如VIA APOLLO VP2),因此很快就被DRAM取代了。

07.MDRAM(Multi-Bank DRAM,多插槽动态随机存取存储器)
  MoSys公司提出的一种内存规格,其内部分成数个类别不同的小储存库 (BANK),也即由数个属立的小单位矩阵所构成,每个储存库之间以高于外部的资料速度相互连接,一般应用于高速显示卡或加速卡中,也有少数主机板用于L2高速缓存中。

08.WRAM(Window RAM,窗口随机存取存储器)
  韩国Samsung公司开发的内存模式,是VRAM内存的改良版,不同之处是它的控制线路有一、二十组的输入/输出控制器,并采用EDO的资料存取模式,因此速度相对较快,另外还提供了区块搬移功能(BitBlt),可应用于专业绘图工作上。

09.RDRAM(Rambus DRAM,高频动态随机存取存储器)
  Rambus公司独立设计完成的一种内存模式,速度一般可以达到500~530MB/s,是DRAM的10倍以上。但使用该内存后内存控制器需要作相当大的改变,因此它们一般应用于专业的图形加速适配卡或者电视游戏机的视频内存中。

10.SDRAM(Synchronous DRAM,同步动态随机存取存储器)
  这是一种与CPU实现外频Clock同步的内存模式,一般都采用168Pin的内存模组,工作电压为3.3V。 所谓clock同步是指内存能够与CPU同步存取资料,这样可以取消等待周期,减少数据传输的延迟,因此可提升计算机的性能和效率。

11.SGRAM(Synchronous Graphics RAM,同步绘图随机存取存储器)
  SDRAM的改良版,它以区块Block,即每32bit为基本存取单位,个别地取回或修改存取的资料,减少内存整体读写的次数,另外还针对绘图需要而增加了绘图控制器,并提供区块搬移功能(BitBlt),效率明显高于SDRAM。

12.SB SRAM(Synchronous Burst SRAM,同步爆发式静态随机存取存储器)
  一般的SRAM是非同步的,为了适应CPU越来越快的速度,需要使它的工作时脉变得与系统同步,这就是SB SRAM产生的原因。

13.PB SRAM(Pipeline Burst SRAM,管线爆发式静态随机存取存储器)
  CPU外频速度的迅猛提升对与其相搭配的内存提出了更高的要求,管线爆发式SRAM取代同步爆发式SRAM成为必然的选择,因为它可以有效地延长存取时脉,从而有效提高访问速度。

14.DDR SDRAM(Double Data Rate二倍速率同步动态随机存取存储器)
  作为SDRAM的换代产品,它具有两大特点:其一,速度比SDRAM有一倍的提高;其二,采用了DLL(Delay Locked Loop:延时锁定回路)提供一个数据滤波信号。这是目前内存市场上的主流模式。

15.SLDRAM (Synchronize Link,同步链环动态随机存取存储器)
  这是一种扩展型SDRAM结构内存,在增加了更先进同步电路的同时,还改进了逻辑控制电路,不过由于技术显示,投入实用的难度不小。

16.CDRAM(CACHED DRAM,同步缓存动态随机存取存储器)
  这是三菱电气公司首先研制的专利技术,它是在DRAM芯片的外部插针和内部DRAM之间插入一个SRAM作为二级CACHE使用。当前,几乎所有的CPU 都装有一级CACHE来提高效率,随着CPU时钟频率的成倍提高,CACHE不被选中对系统性能产生的影响将会越来越大,而CACHEDRAM所提供的二 级CACHE正好用以补充CPU一级CACHE之不足,因此能极大地提高CPU效率。

17.DDRII (Double Data Rate Synchronous DRAM,第二代同步双倍速率动态随机存取存储器)
  DDRII 是DDR原有的SLDRAM联盟于1999年解散后将既有的研发成果与DDR整合之后的未来新标准。DDRII的详细规格目前尚未确定。

18.DRDRAM (Direct Rambus DRAM)
  是下一代的主流内存标准之一,由Rambus 公司所设计发展出来,是将所有的接脚都连结到一个共同的Bus,这样不但可以减少控制器的体积,已可以增加资料传送的效率。



二、ROM(READ Only Memory,只读存储器)

  ROM是线路最简单半导体电路,通过掩模工艺,一次性制造,在元件正常工作的情况下,其中的代码与数据将永久保存,并且不能够进行修改。一般应用于PC系 统的程序码、主机板上的 BIOS (基本输入/输出系统Basic Input/OutputSystem)等。它的读取速度比RAM慢很多。

根据组成元件的不同,ROM内存又分为以下五种:

1.MASK ROM(掩模型只读存储器)
  制造商为了大量生产ROM内存,需要先制作一颗有原始数据的ROM或EPROM作为样本,然后再大量复制,这一样本就是MASK ROM,而烧录在MASK ROM中的资料永远无法做修改。它的成本比较低。

2.PROM(Programmable ROM,可编程只读存储器)
  这是一种可以用刻录机将资料写入的ROM内存,但只能写入一次,所以也被称为“一次可编程只读存储器”(One TimeProgarmmingROM,OTP-ROM)。PROM在出厂时,存储的内容全为1,用户可以根据需要将其中的某些单元写入数据0(部分的 PROM在出厂时数据全为0,则用户可以将其中的部分单元写入1), 以实现对其“编程”的目的。

3.EPROM(Erasable Programmable,可擦可编程只读存储器)
  这是一种具有可擦除功能,擦除后即可进行再编程的ROM内存,写入前必须先把里面的内容用紫外线照射它的IC卡上的透明视窗的方式来清除掉。这一类芯片比 较容易识别,其封装中包含有“石英玻璃窗”,一个编程后的EPROM芯片的“石英玻璃窗”一般使用黑色不干胶纸盖住, 以防止遭到阳光直射。

4.EEPROM(Electrically Erasable Programmable,电可擦可编程只读存储器)
  功能与使用方式与EPROM一样,不同之处是清除数据的方式,它是以约20V的电压来进行清除的。另外它还可以用电信号进行数据写入。这类ROM内存多应用于即插即用(PnP)接口中。

5.Flash Memory(快闪存储器)
  这是一种可以直接在主机板上修改内容而不需要将IC拔下的内存,当电源关掉后储存在里面的资料并不会流失掉,在写入资料时必须先将原本的资料清除掉,然后才能再写入新的资料,缺点为写入资料的速度太慢。


SDRAM、DDR见第一大类的第10和第14小类。
参考资料:http://www.ithard.com/info_detail.asp?infoid=28757

点击此处查看原文 >>

系统分类: 嵌入式   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(170)
发表于:2008-6-6 14:09:57
标签:无标签

1

台湾主要芯片厂商及网址

台北市     
八达创新     www.8tec.com
加达士科技     www.gatax.com.tw
巨有科技     www.pgc.com.tw
巨华积体电路     www.aplusinc.com.tw
安茂微电子     www.analogmicro.com
安国国际科技     www.alcormicro.com
旭展电子     www.thine.com.tw
系晶科技     www.syschips.com
旺玖科技     www.prolific.com.tw
亮发科技     www.incomm.com.tw
冠宇国际电子     www.icnexus.com
红隼科技     www.redfalcon.com.tw
倚强科技     www.sq.com.tw
凌泰科技     www.averlogic.com.tw
凌翔科技     www.waveplus.com
产晶积体电路     www.inno.com.tw
盛群半导体     www.holtek.com.tw
麦肯积体电路     www.mdtic.com.tw
创品电子     www.trumpion.com.tw
创艦科技     www.isoft.com.tw
富微科技     www.addmtek.com
扬智科技     www.ali.com.tw
晶宏半导体     www.ultrachip.com
晶捷科技     www.mrti.com.tw
晶通科技     www.gemstone.com.tw
晶磊半导体     www.smartasic.com
华昕电子     www.hsmc.com.tw
瑞积电子     www.evercorp.com.tw
诠华电子     www.aslic.com.tw
嘉矽电子     www.muchip.com
硕颉科技     www.bitech.com.tw
德鑫科技     www.destiny.com.tw
锐相科技     www.ic-media.com.tw
擎亚国际科技     www.coasia.com.tw
联合聚晶     www.ist4u.com
艺高科技     www.3itechs.com.tw
台北县     
一华半导体     www.mosdesign.com.tw
十速科技     www.tenx.com.tw
三合微科     www.samhop.com.tw
台湾半导体     www.ts.com.tw
台湾类比科技     www.aatech.com.tw
巨盛电子     www.chesen.com.tw
其朋半导体     www.cdt.com.tw
拓码科技     www.xtramus.com
矽诚科技     www.semitech.com.tw
信亿科技     www.acard.com
冠西电子企业     www.cosmo-ic.com
威盛电子     www.viatech.com.tw
威瀚科技     www.viatech.com.tw
威腾光电     www.viatech.com.tw
研通科技     www.vtac.com.tw
美丽微半导体     www.formosams.com.tw
茂昇电子     www.mosanalog.com.tw
振玮科技     www.mstcweb.com
泰视科技     www.tascorp.com.tw
崇茂科技     www.sg.com.tw
通泰积体电路     www.tontek.com.tw
连顾科技     www.linkas.com.tw
杰霖科技     www.jeilin.com.tw
创惟科技     www.genesyslogic.com
博旭科技     www.procomp.com.tw
富晶半导体     www.fsc.com.tw
普诚科技     www.princeton.com.tw
晶致半导体     www.amtek-semi.com.tw
华矽半导体     www.mosart.com.tw
华瑞科技     www.cetsemi.com
瑞新电子     www.smartchip.com.tw
维拓科技     www.neodio.com.tw
慧荣科技     www.siliconmotion.com.tw
优讯科技     www.ayuttha.com.tw
镓葳科技     www.gawell.com.tw
桃园地区     
京典矽旺公司     www.gigarams.com.tw
汰捷科技     www.smarteng.com.tw
德硕半导体科技     www.techsoft.com.tw
南亚科技     www.nanya.com
新竹地区     
九旸电子     www.icplus.com.tw
九旺科技     www.ememory.com.tw
力威国际科技     www.powervision.com.tw
力原通讯     www.terax.com.tw
力晶半导体     www.psc.com.tw
力华电子     www.syntronix.com.tw
上元科技     www.admtek.com.tw
大纮科技     www.airwave.com.tw
工业技术研究院 系统晶片中心     www.stc.itri.org.tw
天钰科技     www.eureka.com.tw
太和科技     www.ktc.com.tw
太欣半导体     www.stk.com.tw
世界先进积体电路     www.vis.com.tw
世纪民生科技     www.myson.com.tw
世纪创新     www.innochip.com.tw
台晶记忆体科技     www.tmtech.com.tw
台湾茂矽电子     www.moselvitelic.com
正盈半导体     www.tiwin.com.tw
立锜科技     www.richtek.com
兆腾科技     www.opciel.com
全磊微机电     www.metrodyne.com.tw
吉联积体电路     www.glinktech.com
合邦电子     www.avid.com.tw
宇庆科技     www.utron.com.tw
安普生科技     www.ampson.com.tw
佑华微电子     www.ealpha.com.tw
宏三科技     www.f3.com.tw
宏齐科技     www.harvatek.com.tw
我想科技     www.icreate.com.tw
沛亨半导体     www.analog.com.tw
育陞半导体     www.winson.com.tw
迅杰科技     www.ene.com.tw
迅慧科技     www.hba.com
亚太优势微系统     www.apmsinc.com
亚全科技     www.himark.com.tw
亚信电子     www.asix.com.tw
其乐达科技公司     www.cheertek.com.tw
宜霖科技     www.elecvision.com
旺宏电子     www.macronix.com
易亨电子     www.anachip.com.tw
易码科技     www.chipmast.com.tw
松翰科技     www.sonix.com.tw
矽成积体电路     www.icsi.com.tw
矽统科技     www.sis.com.tw
矽创电子     www.sitronix.com.tw
芯传国际     www.silicon-data.com
金丽半导体     www.rdc.com.tw
长茂科技     www.emt.com.tw
前讯系统     www.actrans-inc.com
勇领科技     www.accfast.com.tw
威凯科技     www.vtera.com.tw
威鑫科技     www.candysign.com.tw
思源科技     www.springsoft.com.tw
科统科技     www.koltek.com.tw
科雅科技     www.goya.com.tw
美商颖想     www.incentia.com
致新科技     www.gmt.com.tw
茂达电子