您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术嵌入式设备上的 Linux 系统开发 正文
嵌入式设备上的 Linux 系统开发

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

点击数:7382 次   录入时间:03-04 11:51:55   整理:http://www.55dianzi.com   嵌入式系统-技术
            size    :  0x00100000,         /* Size */ 
            offset : MTDPART_OFS_APPEND,   /* Append after bootloader section */ 
            mask_flags : MTD_WRITEABLE     /* This partition is not writable */ 
      },  
      {                                    /* Third partition */ 
            name : JFFS2,                  /* JFFS2 filesystem */ 
            size    :  MTDPART_SIZ_FULL,   /* Occupy rest of flash */ 
            offset :  MTDPART_OFS_APPEND   /* Append after kernel section */ 
      }
 }
 


上面的分区表使用了 MTD_BLOCK 接口对闪存设备进行分区。这些分区的设备节点是: 


简单闪存分区的设备节点
 User      device node         Major number    Minor number
  Bootloader    /dev/mtdblock0          31              0 
  Kernel        /dev/mtdblock1          31              1 
  Filesystem    /dev/mtdblock2          31              2 
 


在本例中,引导装载程序必须将有关 root 设备节点(/dev/mtdblock2)和可以在闪存中找到文件系统的地址(本例中是 FLASH_BASE_ADDRESS + 0x04000000 )的正确参数传递到内核。一旦完成分区,闪存设备就准备装入或挂装文件系统。 

Linux 中 MTD 子系统的主要目标是在系统的硬件驱动程序和上层,或用户模块之间提供通用接口。硬件驱动程序不需要知道象 JFFS2 和 FTL 那样的用户模块使用的方法。所有它们真正需要提供的就是一组对底层闪存系统进行 read 、 write 和 erase 操作的简单例程。  



嵌入式设备的文件系统

系统需要一种以结构化格式存储和检索信息的方法;这就需要文件系统的参与。Ramdisk(请参阅 参考资料)是通过将计算机的 RAM 用作设备来创建和挂装文件系统的一种机制,它通常用于无盘系统(当然包括微型嵌入式设备,它只包含作为永久存储媒质的闪存芯片)。 

用户可以根据可靠性、健壮性和/或增强的功能的需求来选择文件系统的类型。下一节将讨论几个可用选项及其优缺点。

第二版扩展文件系统(Ext2fs)

Ext2fs 是 Linux 事实上的标准文件系统,它已经取代了它的前任 ― 扩展文件系统(或 Extfs)。Extfs 支持的文件大小最大为 2 GB,支持的最大文件名称大小为 255 个字符 ― 而且它不支持索引节点(包括数据修改时间标记)。Ext2fs 做得更好;它的 优点是: 

Ext2fs 支持达 4 TB 的内存。 
Ext2fs 文件名称最长可以到 1012 个字符。 
当创建文件系统时,管理员可以选择逻辑块的大小(通常大小可选择 1024、2048 和 4096 字节)。 
Ext2fs 了实现快速符号链接:不需要为此目的而分配数据块,并且将目标名称直接存储在索引节点(inode)表中。这使性能有所提高,特别是在速度上。 
因为 Ext2 文件系统的稳定性、可靠性和健壮性,所以几乎在所有基于 Linux 的系统(包括台式机、服务器和工作站 ― 并且甚至一些嵌入式设备)上都使用 Ext2 文件系统。然而,当在嵌入式设备中使用 Ext2fs 时,它有一些 缺点: 

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 文件系统好。 

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


本文关键字:嵌入式  开发  Linux  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术