读书笔记《Building embedded linux system》Chapter 7 存贮设备操作

  最近进度有些慢,需要加快,终于在一周内看完这一章。对于嵌入式操作系统通常不使用我们的磁盘,例如使用固体盘flash chip或者disk,这个需要在kernel编译中配置并支持,同时也需要一些辅助的工具。我最大的迷惑在于我对这些闪存不熟悉(不晓),我也在学习moblin,我一直想知道MID中使用的是哪种类型的闪存,虽然我也听过SD、CF卡什么的,知道的只是它们的size和接口不一样,仅此而已。所以这一章节看得不轻松。

   对于这些存贮设备,可以通过MTD(Memory technology device)工具。它的安装在之前的文章中实践过。传统的character和block两种类型都不能很好地适配MTD,去操作这些“raw”设备的基本方式是通过一个c设备/dev/mtdN。有很多“traslation layers”将设备装扮为普通的硬件设备,例如mtdblock驱动,提供/dev/mtdblockN的设备。

  有这几种MTD设备:/dev/mtdN,是MTD设备或者某个分区,/dev/mtdrN 是/dev/mtdN的只读,/dev/mtdblockN和/dev/mtdN匹配的block设备。/dev/nftlLN,NFTL(NAND Flash Translation Layer)设备,L从a、b、c顺序排下,例如nftlb3,是第二个NFTL设备的第二个分区。inftlLN(Inverse NFTL) ,ftlLN,rfd_ftlLN,ssfdcLN(SmartMedia FTL)和nftLN类同。

  对MTD的支持,需在kernel的config中进行设置。对于host,最好配置为module的方式,但是对于target,我们需要将其编译在kernel中,使得root文件系统可以mount在固态存储设备上。MTD需要安装MTD工具,包括host和target。

   中小型号的非x86的嵌入式系统通常使用CFI,而x86的通常是用DiskOnChip。对于CFI的falsh,需要在kernel的 menuconfig中将相关的选项配置为(*),而不作为(M),直接在img中编译,而表示kerne modules。这些选项至少应包括:

  1. MTD支持
  2. MTD分区支持(如果需要对MTD进行分区),对于CFI的分区,和传统的磁盘不一样,不能通过fdisk之类的工具来操作,它是在mapping driver的硬编码(hardcoded),需要直接在的驱动的C源代码中或者OpenFirmware设备数中修改信息。
  3. Direct char
  4. Cache Block
  5. 在RAM/ROM flash chip driver的子菜单中,选择“dectect flash chops by CFI probe"
  6. 在Mapping dirver for chip access的子菜单中,选择目标板块上的CFI闪存device-mapping driver 没一个分区对立对应一个设备号。

  下面是一个例子,有两个分区,我们需要在/dev下面建立设备节点。

crw-rw-r-- 1 root root 90, 0 Aug 23 17:19 mtd0
crw-rw-r-- 1 root root 90, 2 Aug 23 17:20 mtd1
brw-rw-r-- 1 root root 31, 0 Aug 23 17:17 mtdblock0
brw-rw-r-- 1 root root 31, 1 Aug 23 17:17 mtdblock1

  对于CFI设备的擦除操作,可以使用eraseall /dev/mtd3来进行,也可以通过flash_erase,flash_eraseall命令。写入通过flashcp命令,写出可通过dd命令。

   DiskOnChip(DOC)在x86的嵌入式操作系统中很常见。使用NFTL来模拟传统的磁盘。在内核配置中,可以选择(*),也可以选择(M)。在配置中,选择至少以下的条目:MTD支持,MTD分区、Direct char ,NFTL支持,NFTL的写支持,NAND支持并在其子目录下面的DiskOnChip 2000,Millennium and Millennium Plus。DOC有一个坏块表,在我们进行擦除操作之前,需要将该表进行备份,在擦除后重新导入。可以通过M-Stytems的dformat DOS工具,或者使用doc_loadbios,ntlm_format这些MTD工具。同样,我们需要在/dev中创建设备节点。nftl和通用的磁盘分区类似,例如如果一个DOC设备上面我们建立一个主分区,可以通过以下的命令
#mknod mtd0 c 90 0
#mknod nftla b 93 0
#mknod nftla1 b 93 1
  对DOC的分区操作可以使用fdisk。

   除了这些外,还有Disk设备,例如CompactFlash,可以当作普通磁盘(硬盘 hard disk)来进行处理,但是要注意的是,我们尽量不要使用闪存上的swap,因为这会经常不断地进行读写操作。

   我注意到在netbook是没有安装MTD的,而Ubuntu的MID版本上面有MTD工具,但是在MID中似乎没有启用。我检查了其中一台MID,命令cat /proc/scsi/scsi,给出的信息有:Version ATA  Modules:SanDisk pSSD 8GB Rev: SSD。也就是pSSD。似乎可以认为是Disk设备。上网查了一下资料:

  NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年,东芝公司发表了NAND flash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。

  NAND: Samsung、TOSHIBA和Fujistu支持NAND技术Flash Memory。这种结构的闪速存储器适合于纯数据存储和文件存储,主要作为SmartMedia卡、CompactFlash卡、PCMCIA ATA卡、固态盘的存储介质,并正成为闪速磁盘技术的核心。 它的耗电非常低,能够进行读和写操作,是一种常驻存储方案。NAND的读写檫需要MTD。

  2006年,三星电子已经发布了一款基于NAND的硬盘替代产品。这款产品被称作“世界上第一款固态硬盘(Solid State Disk,SSD)”。晟碟SanDisk 推出最新的 pSSD-P2 及 pSSD-S2,这些新的 pSSD 具备SATA接口以配合 Netbook 设计。晟碟SanDisk 第二代 pSSD 提供四种内存储存容量,包括8GB、16GB、32GB 和 64GB 。根据晟碟SanDisk 的说法,pSSD 具有 SATA 接口可以增加读写速度。但实际情况还是有待进一步的发展啰!作为替代传统硬盘的SanDisk全新第二代模块具备SATA接口,以配合全新的 Netbook设计。SATA接口能够显著的提升硬盘效能,而在关键的层面上,相比传统硬盘,具备SATA接口的固态硬盘的效能提升幅度更快。例如,在开启计算机或执行应用程序时,固态硬盘能比传统硬盘节省一半时间。SanDisk第二代pSSD固态硬盘将于2009年2月面世,并由公司可靠的43 纳米多层式芯片 (Multi-Level Cell,简称MLC) 闪存研发而成。该技术由SanDisk位于日本四日市的工厂生产而成,该工厂为SanDisk及其伙伴东芝共同拥有。

你可能感兴趣的:(linux,Flash,读书,System,磁盘,嵌入式操作系统)