电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者电子文章arm嵌入式关于嵌入式设备上的Linux 系统开发

关于嵌入式设备上的Linux 系统开发

11-20 15:52:47 | http://www.5idzw.com | arm嵌入式 | 人气:998
标签:arm嵌入式系统,arm系统,arm开发,http://www.5idzw.com 关于嵌入式设备上的Linux 系统开发,http://www.5idzw.com

  Ext2fs 是为象 IDE 设备那样的块设备设计的,这些设备的逻辑块大小是 512 字节,1 K 字节等这样的倍数。这不太适合于扇区大小因设备不同而不同的闪存设备。

  Ext2 文件系统没有提供对基于扇区的擦除/写操作的良好管理。在 Ext2fs 中,为了在一个扇区中擦除单个字节,必须将整个扇区复制到 RAM,然后擦除,然后重写入。考虑到闪存设备具有有限的擦除寿命(大约能进行 100,000 次擦除),在此之后就不能使用它们,所以这不是一个特别好的方法。

  在出现电源故障时,Ext2fs 不是防崩溃的。

  Ext2 文件系统不支持损耗平衡,因此缩短了扇区/闪存的寿命。(损耗平衡确保将地址范围的不同区域轮流用于写和/或擦除操作以延长闪存设备的寿命。)

  Ext2fs 没有特别完美的扇区管理,这使设计块驱动程序十分困难。

  由于这些原因,通常相对于 Ext2fs,在嵌入式环境中使用 MTD/JFFS2 组合是更好的选择。

  用 Ramdisk 挂装 Ext2fs

  通过使用 Ramdisk 的概念,可以在嵌入式设备中创建并挂装 Ext2 文件系统(以及用于这一目的的任何文件系统)。

  清单 6. 创建一个简单的基于 Ext2fs 的 Ramdisk

  mke2fs -vm0 /dev/ram 4096

  mount -t ext2 /dev/ram /mnt

  cd /mnt

  cp /bin, /sbin, /etc, /dev ... files in mnt

  cd ../

  umount /mnt

  dd if=/dev/ram bs=1k count=4096 of=ext2ramdisk

  mke2fs 是用于在任何设备上创建 ext2 文件系统的实用程序 — 它创建超级块、索引节点以及索引节点表等等。

  在上面的用法中, /dev/ram 是上面构建有 4096 个块的 ext2 文件系统的设备。然后,将这个设备( /dev/ram )挂装在名为 /mnt 的临时目录上并且复制所有必需的文件。一旦复制完这些文件,就卸装这个文件系统并且设备( /dev/ram )的内容被转储到一个文件(ext2ramdisk)中,它就是所需的 Ramdisk(Ext2 文件系统)。

  上面的顺序创建了一个 4 MB 的 Ramdisk,并用必需的文件实用程序来填充它。

  一些要包含在 Ramdisk 中的重要目录是:

  /bin ― 保存大多数象 init 、 busybox 、 shell 、文件管理实用程序等二进制文件。

  /dev― 包含用在设备中的所有设备节点

  /etc― 包含系统的所有配置文件

  /lib― 包含所有必需的库,如 libc、libdl 等

  日志闪存文件系统,版本 2(JFFS2)

  瑞典的 Axis Communications 开发了最初的 JFFS,Red Hat 的 David Woodhouse 对它进行了改进。 第二个版本,JFFS2,作为用于微型嵌入式设备的原始闪存芯片的实际文件系统而出现。JFFS2 文件系统是日志结构化的,这意味着它基本上是一长列节点。每个节点包含有关文件的部分信息 ― 可能是文件的名称、也许是一些数据。相对于 Ext2fs,JFFS2 因为有以下这些 优点而在无盘嵌入式设备中越来越受欢迎:

  JFFS2 在扇区级别上执行闪存擦除/写/读操作要比 Ext2 文件系统好。

  JFFS2 提供了比 Ext2fs 更好的崩溃/掉电安全保护。当需要更改少量数据时,Ext2 文件系统将整个扇区复制到内存(DRAM)中,在内存中合并新数据,并写回整个扇区。这意味着为了更改单个字,必须对整个扇区(64 KB)执行读/擦除/写例程 ― 这样做的效率非常低。要是运气差,当正在 DRAM 中合并数据时,发生了电源故障或其它事故,那么将丢失整个数据集合,因为在将数据读入 DRAM 后就擦除了闪存扇区。JFFS2 附加文件而不是重写整个扇区,并且具有崩溃/掉电安全保护这一功能。

  这可能是最重要的一点:JFFS2 是专门为象闪存芯片那样的嵌入式设备创建的,所以它的整个设计提供了更好的闪存管理。

  因为本文主要是写关于闪存设备的使用,所以在嵌入式环境中使用 JFFS2 的 缺点很少:

  当文件系统已满或接近满时,JFFS2 会大大放慢运行速度。这是因为垃圾收集的问题(更多信息,请参阅 参考资料)。

  创建 JFFS2 文件系统

  在 Linux 下,用 mkfs.jffs2 命令创建 JFFS2 文件系统(基本上是使用 JFFS2 的 Ramdisk)。

  清单 7. 创建 JFFS2 文件系统

  mkdir jffsfile

  cd jffsfile

  /* copy all the /bin, /etc, /usr/bin, /sbin/ binaries and /dev entries

  that are needed for the filesystem here */

  /* Type the following command under jffsfile directory to create the JFFS2 Image */

  ./mkfs.jffs2 -e 0x40000 -p -o ../jffs.image

  上面显示了 mkfs.jffs2 的典型用法。 -e 选项确定闪存的擦除扇区大小(通常是 64 千字节)。 -p 选项用来在映像的剩余空间用零填充。 -o 选项用于输出文件,通常是 JFFS2 文件系统映像 ― 在本例中是 jffs.image。一旦创建了 JFFS2 文件系统,它就被装入闪存中适当的位置(引导装载程序告知内核查找文件系统的地址)以便内核能挂装它。

  tmpfs

  当 Linux 运行于嵌入式设备上时,该设备就成为功能齐全的单元,许多守护进程会在后台运行并生成许多日志消息。另外,所有内核日志记录机制,象 syslogd、dmesg 和 klogd,会在 /var 和 /tmp 目录下生成许多消息。由于这些进程产生了大量数据,所以允许将所有这些写操作都发生在闪存是不可取的。由于在重新引导时这些消息不需要持久存储,所以这个问题的解决方案是使用 tmpfs。

  tmpfs 是基于内存的文件系统,它主要用于减少对系统的不必要的闪存写操作这一唯一目的。因为 tmpfs 驻留在 RAM 中,所以写/读/擦除的操作发生在 RAM 中而不是在闪存中。因此,日志消息写入 RAM 而不是闪存中,在重新引导时不会保留它们。tmpfs 还使用磁盘交换空间来存储,并且当为存储文件而请求页面时,使用虚拟内存(VM)子系统。

  tmpfs 的 优点包括:

  动态文件系统大小 ― 文件系统大小可以根据被复制、创建或删除的文件或目录的数量来缩放。使得能够最理想地使用内存。

  速度 ― 因为 tmpfs 驻留在 RAM,所以读和写几乎都是瞬时的。即使以交换的形式存储文件,I/O 操作的速度仍非常快。

  tmpfs 的一个 缺点是当系统重新引导时会丢失所有数据。因此,重要的数据不能存储在 tmpfs 上。

  挂装 tmpfs

  诸如 Ext2fs 和 JFFS2 等大多数其它文件系统都驻留在底层块设备之上,而 tmpfs 与它们不同,它直接位于 VM 上。因而,挂装 tmpfs 文件系统是很简单的事:

  清单 8. 挂装 tmpfs

  /* Entries in /etc/rc.d/rc.sysinit for creating/using tmpfs */

  # mount -t tmpfs tmpfs /var -o size=512k

  # mkdir -p /var/tmp

  # mkdir -p /var/log

  # ln -s /var/tmp /tmp

  上面的命令将在 /var 上创建 tmpfs 并将 tmpfs 的最大大小限制为 512 K。同时,tmp/ 和 log/ 目录成为 tmpfs 的一部分以便在 RAM 中存储日志消息。

  如果您想将 tmpfs 的一个项添加到 /etc/fstab,那么它可能看起来象这样: tmpfs /var tmpfs size=32m 0 0

  这将在 /var 上挂装一个新的 tmpfs 文件系统。

  图形用户界面(GUI)选项

  从用户的观点来看,图形用户界面(GUI)是系统的一个最至关重要的方面:用户通过 GUI 与系统进行交互。所以 GUI 应该易于使用并且非常可靠。但它还需要是有内存意识的,以便在内存受限的、微型嵌入式设备上可以无缝执行。所以,它应该是轻量级的,并且能够快速装入。

  另一个要考虑的重要方面涉及许可证问题。一些 GUI 分发版具有允许免费使用的许可证,甚至在一些商业产品中也是如此。另一些许可证要求如果想将 GUI 合并入项目中则要支付版税。

  最后,大多数开发人员可能会选择 XFree86,因为 XFree86 为他们提供了一个能使用他们喜欢的工具的熟悉环境。但是市场上较新的 GUI,象 Century Software 的 Microwindows(Nano-X)和 Trolltech 的 QT/Embedded,与 X 在嵌入式 Linux 的竞技舞台中展开了激烈竞争,这主要是因为它们占用很少的资源、执行的速度很快并且具有定制窗口构件的支持。

  让我们看一看这些选项中的每一个。

  Xfree86 4.X(带帧缓冲区支持的 X11R6.4)

上一页  [1] [2] [3] [4] [5]  下一页

,关于嵌入式设备上的Linux 系统开发
关于《关于嵌入式设备上的Linux 系统开发》的更多文章