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

本文探讨了嵌入式操作系统中使用的闪存技术,包括CFI和DiskOnChip等不同类型的闪存设备,以及如何在Linux内核中配置MTD支持以管理和操作这些设备。

  最近进度有些慢,需要加快,终于在一周内看完这一章。对于嵌入式操作系统通常不使用我们的磁盘,例如使用固体盘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及其伙伴东芝共同拥有。

There's a great deal of excitement surrounding the use of Linux in embedded systems -- for everything from cell phones to car ABS systems and water-filtration plants -- but not a lot of practical information. Building Embedded Linux Systems offers an in-depth, hard-core guide to putting together embedded systems based on Linux. Updated for the latest version of the Linux kernel, this new edition gives you the basics of building embedded Linux systems, along with the configuration, setup, and use of more than 40 different open source and free software packages in common use. The book also looks at the strengths and weaknesses of using Linux in an embedded system, plus a discussion of licensing issues, and an introduction to real-time, with a discussion of real-time options for Linux. This indispensable book features arcane and previously undocumented procedures for: * Building your own GNU development toolchain * Using an efficient embedded development framework * Selecting, configuring, building, and installing a target-specific kernel * Creating a complete target root filesystem * Setting up, manipulating, and using solid-state storage devices * Installing and configuring a bootloader for the target * Cross-compiling a slew of utilities and packages * Debugging your embedded system using a plethora of tools and techniques * Using the uClibc, BusyBox, U-Boot, OpenSSH, thttpd, tftp, strace, and gdb packages By presenting how to build the operating system components from pristine sources and how to find more documentation or help, Building Embedded Linux Systems greatly simplifies the task of keeping complete control over your embedded operating system.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值