www.sandisk.cn
www.kingston.com/cn
1./dev/mtdN和/dev/mtdblockN
在linux中nand flash(和nor flash)属于mtd子系统里面的,对应了两种设备,mtd字符设备和mtd块设备:
/dev/mtdN
/dev/mtdblockN
mtdblock0指mtd设备的的分区0
例如在配置了256MB的slc nand的tiny6410里面:
[root@hemei]# cat /proc/partitions
major minor #blocks name
31 0 512 mtdblock0
31 1 5120 mtdblock1
31 2 256512 mtdblock2
[root@hemei]# cat /proc/mtd
dev: size erasesize name
mtd0: 00080000 00020000 "Bootloader"
mtd1: 00500000 00020000 "Kernel"
mtd2: 0fa80000 00020000 "File System"
[root@hemei]# ls -l /dev/mtdblock*
brw-rw---- 1 root root 31, 0 Dec 1 2000 /dev/mtdblock0
brw-rw---- 1 root root 31, 1 Dec 1 2000 /dev/mtdblock1
brw-rw---- 1 root root 31, 2 Dec 1 2000 /dev/mtdblock2
[root@hemei]# ls -l /dev/mtd*
crw-rw---- 1 root root 90, 0 Dec 1 2000 /dev/mtd0
crw-rw---- 1 root root 90, 1 Dec 1 2000 /dev/mtd0ro
crw-rw---- 1 root root 90, 2 Dec 1 2000 /dev/mtd1
crw-rw---- 1 root root 90, 3 Dec 1 2000 /dev/mtd1ro
crw-rw---- 1 root root 90, 4 Dec 1 2000 /dev/mtd2
crw-rw---- 1 root root 90, 5 Dec 1 2000 /dev/mtd2ro
其分区信息正是内核中的所定义:
struct mtd_partition mini6410_nand_part[] = {
{
.name = "Bootloader",
.offset = 0,
.size = (4 * 128 *SZ_1K),
.mask_flags = MTD_CAP_NANDFLASH,
},
{
.name = "Kernel",
.offset = (4 * 128 *SZ_1K),
.size = (5*SZ_1M),
.mask_flags = MTD_CAP_NANDFLASH,
},
{
.name = "File System",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
},
};
在配置了16MB spi nor的hi3518c里面,
# cat /proc/partitions
major minor #blocks name
31 0 256 mtdblock0
31 1 128 mtdblock1
31 2 128 mtdblock2
31 3 3072 mtdblock3
31 4 12800 mtdblock4
# cat /proc/mtd
dev: size erasesize name
mtd0: 00040000 00010000 "boot"
mtd1: 00020000 00010000 "env"
mtd2: 00020000 00010000 "conf"
mtd3: 00300000 00010000 "os"
mtd4: 00c80000 00010000 "rootfs"
# ls -l /dev/mtd*
crw-rw---- 1 root root 90, 0 Jan 1 00:00 /dev/mtd0
crw-rw---- 1 root root 90, 1 Jan 1 00:00 /dev/mtd0ro
crw-rw---- 1 root root 90, 2 Jan 1 00:00 /dev/mtd1
crw-rw---- 1 root root 90, 3 Jan 1 00:00 /dev/mtd1ro
crw-rw---- 1 root root 90, 4 Jan 1 00:00 /dev/mtd2
crw-rw---- 1 root root 90, 5 Jan 1 00:00 /dev/mtd2ro
crw-rw---- 1 root root 90, 6 Jan 1 00:00 /dev/mtd3
crw-rw---- 1 root root 90, 7 Jan 1 00:00 /dev/mtd3ro
crw-rw---- 1 root root 90, 8 Jan 1 00:00 /dev/mtd4
crw-rw---- 1 root root 90, 9 Jan 1 00:00 /dev/mtd4ro
# ls -l /dev/mtdblock*
brw-rw---- 1 root root 31, 0 Jan 1 00:00 /dev/mtdblock0
brw-rw---- 1 root root 31, 1 Jan 1 00:00 /dev/mtdblock1
brw-rw---- 1 root root 31, 2 Jan 1 00:00 /dev/mtdblock2
brw-rw---- 1 root root 31, 3 Jan 1 00:00 /dev/mtdblock3
brw-rw---- 1 root root 31, 4 Jan 1 00:00 /dev/mtdblock4
2./dev/sda1
sata机械硬盘设备,sata ssd
u盘设备
sda指整个硬盘设备或u盘设备,sda1,sda2指其中的分区1,分区2
cat /proc/partitions 可以查看分区信息
u盘
3./dev/mmcblk0p0
---------------------------------------------------------------------------------------------------------------------------------
mmcblk0指整个sd设备或inand设备,mmcblk0p0,mmcblk0平指其中的分区1,分区2。
(如果sd卡通过usb转换器连接到arm,则当做/dev/sda等设备)
cat /proc/partitions 可以查看分区信息
---------------------------------------------------------------------------------------------------------------------------------
sd卡
(Secure Digital Memory Card)安全数码卡
)和micro sd卡
nand+sd controller就构成了sd卡或者micro sd卡(micro sd外壳封装小,适合手机之类的使用)
nand一般使用mlc(2bit/cell) ,而slc(1bit/cell) 太贵,tlc(3bit/cell) 现阶段貌似技术还欠佳(2013-12)
sd controller比如SS6627AAWWE
sd(micro sd)命名规范
---------------------------------------------------------------------------------------------------------------------------------
sd卡,mmbgf08gwaca-ge
---------------------------------------------------------------------------------------------------------------------------------
micro sd,mm4gr512ubca-ma
Samsung SD & MicroSD Card product family
SDA 3.0 specification compliant-Up to High Speed mode
---------------------------------------------------------------------------------------------------------------------------------
几种卡的区别
1、CF卡
CF卡是最早推出的存储卡。我们可以接触的到CF卡分为CF Type I/CF Type II两种类型。由于CF存储卡的插槽可以向下兼容,因此TypeII插槽既可以使CF TypeII卡 又可以使用CF Type I卡;而Type I插槽则只能使用CF Type I卡,而不能使用CF Type II卡,朋友们在选购和使用的时候一定要注意。
2、SD卡
SD卡体积小巧,广泛应用在数码产品上,是目前用得最大的存储卡,是由日本的松下公司、东芝公司和SanDisk公司共同开发的一种全新的存储卡产品,SD卡在外形上同MultiMedia Card卡保持一致,并且兼容MMC卡接口规范。不过注意的是,在某些产品例如手机上,SD卡和MMS卡是不能兼容的。
3、MMC卡
MMC卡是由Sandisk和西门子于1997年联手推出的,它普及还沾了点SD卡的光。后来推出的SD卡标准中保留了设备对MMC卡的兼容,就是说虽然使用MMC卡的设备无法使用SD卡,而使用SD卡的设备却可以毫无障碍地使用MMC卡,在某些时候使得MMC顺利成为SD卡的代替品。
4、SDHC卡
对于一些用户来说,还是个陌生的新名词。学术点说,SDHC是“High Capacity SD Memory Card”的缩写,即“高容量SD存储卡”。2006年5月SD协会发布了最新版的SD 2.0的系统规范,在其中就规定SDHC是符合新的规范、且容量大于2GB小于等于32GB的SD卡。
顾名思义,SDHC标准被指定出来的目的就是解决SD设备日趋增大的容量要求,SDHC最大的特点就是高容量(2GB-32GB)。另外,SD协会还规定SDHC必须采用FAT32文件系统,这是因为之前在SD卡中使用的FAT16文件系统所支持的最大容量仅为2GB,并不能满足专业用户的要求。
5、MicroSD 卡(TF卡)
是一种极细小的快闪存储器卡,其格式源自SanDisk创造,原本这种记忆卡称为 T-Flash,及后改称为TransFlash;而重新命名为microSD的原因是因为被SD协会(SDA) 采立。
---------------------------------------------------------------------------------------------------------------------
sd1.1规范(sd)
sd2.0规范(sdhc)
sd3.0规范(sdxc)
---------------------------------------------------------------------------------------------------------------------
inand
同sd卡一样,nand+sd controller也构成了inand,但是与sd不同之处在于,nand和sd controller全部集成一个芯片上。inand不使用sd规范,而是采用了emmc规范。emmc有8个数据线,比sd的4个多出4个,因此速度更快。eMMC协议是兼容SD的协议的,只是eMMC插入SD卡座后,高4位地址线不起作用。
emmc芯片比sd卡的多了4个数据线:
refer to here
emmc介绍
---------------------------------------------------------------------------------------------------------------------
总之,上面所列,目前所有的存储设备的原始介质都是nandflash(mlc),然后通过不同的控制器引出不同的接口,而不同的接口都遵循老外制定的不同规范,比如sdhc,sata,usb,emmc等
从而演变为大家所熟悉这些东东。
不同的接口具备不同的传输速度,并且在linux下需要有不同驱动来支持这些接口,从而能对其内部的nandflash进行读写。而内部flash的分区和文件系统,不会因为读写接口不同而有所限制。
比如u盘内部nand的文件系统可以是fat32,ext3,sd卡内部nand的文件系统也可以是fat32,ext3
而有的设备是控制器和nandflash集成在了单芯片上面如inand
---------------------------------------------------------------------------------------------------------------------
4.硬盘的结构
磁道:Track,可以理解为一个圆形盘片由许许多多的同心圆组成,每一个同心圆可以认为是一个磁道。(硬盘是一个高速旋转的东西,当磁盘旋转时,磁头若保持在一个位置上不动,则磁头会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道)
柱面:Cylinder,每个盘片的半径均为固定值R的同心圆再逻辑上形成了一个以电机主轴为轴的柱面(Cylinders),从外至里编号为0、1、2……磁盘的柱面数与一个盘面上的磁道数是相等的。
磁头:Head,当然是读取信息用的了。每个盘面都有自己的磁头,如果盘面的双面都记录信息,那么双面都应该有磁头,如果有N个盘片。就有2N个面,对应2N个磁头(Heads),从0、1、2开始编号。
扇区:Sector,每个盘片上的每个磁道又被划分为几十个扇区(Sector),通常的容量是512byte,并按照一定规则编号为1、2、3……磁盘驱动器在向磁盘读取和写入数据时应该以扇区为单位。
所以,硬盘的容量计算公式如下:硬盘的容量=柱面数×磁头数×每磁道扇区数×512(字节数)
主引导扇区
主引导扇区位于整个硬盘的0柱面0磁头1扇区{(柱面,磁头,扇区)|(0,0,1)},bios在执行自己固有的程序以后就会jump到MBR中的第一条指令。将系统的控制权交由mbr来执行。主引导扇区主要由三部分组成:主引导记录 MBR(Master Boot Record或者Main Boot Record)、硬盘分区表 DPT(Disk Partition Table)和结束标志字三大部分组成。
对于硬盘而言,一个扇区可能的字节数为128×2n (n=0,1,2,3)。大多情况下,取n=2,即一个扇区(sector)的大小为512字节。在总共
512byte
的主引导记录中,MBR的引导程序占了其中的前
446
个字节(偏移0H~偏移1BDH),随后的
64
个字节(偏移1BEH~偏移1FDH)为DPT(Disk PartitionTable,硬盘分区表),最后的
2
字节“55 AA”(偏移1FEH~偏移1FFH)是分区有效结束标志。
主引导记录MBR(master boot record)
主引导记录中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序。MBR是由分区程序(如Fdisk)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而能够实现多系统引导。
硬盘分区表DPT(Disk Partition Table)
硬盘分区表占据MBR扇区的64个字节(偏移01BEH--偏移01FDH),可以对四个分区的信息进行描述,其中每个分区的信息占据16个字节。具体每个字节的定义可以参见硬盘分区结构信息。
结束标志字
结束标志字55,AA(偏移1FEH- 偏移1FFH)是MBR扇区的最后两个字节,是检验主引导记录是否有效的标志。
主引导扇区与硬盘分区
从主引导扇区的结构可以知道,它仅仅包含一个64个字节的硬盘分区表。由于每个分区信息需要16个字节,所以对于采用MBR型分区结构的硬盘(其磁盘卷标类型为MS-DOS),最多只能识别4个主要分区。所以对于一个采用此种分区结构的硬盘来说,想要得到4个以上的主要分区是不可能的。这里就需要引出扩展分区了。扩展分区也是Primary partition的一种,但它与主分区的不同在于可以划分为无数个逻辑分区。
扩展分区中逻辑驱动器的引导记录是链式的。每一个逻辑分区都有一个和MBR的分区表结构类似的扩展引导记录(EBR),其分区表的第一项指向该逻辑分区本身的引导扇区,第二项指向下一个逻辑驱动器的EBR。对于Windows系统而言,一般都是只划分一个主分区给系统,剩余的部分全部划为扩展分区。
DBR结构:
refer to
http://blog.csdn.net/kuxinr/article/details/8472385
4.5万字透视FAT32系统
http://blog.csdn.net/zhuo_zhibin/article/details/7621756
---------------------------------------------------------------------------------------------------------------------
低级 格式化
就是将空白的 磁盘
划分出柱面和 磁道
,再将磁道划分为若干个 扇区
,每个扇区又划分出标识部分ID、间隔区GAP和数据区DATA等。可见,低级 格式化
是 高级格式化
之前的一件工作,它不仅能在DOS环境来完成,也能在xp甚至vista系统下完成。而且低级 格式化
只能针对一块硬盘而不能支持单独的某一个分区。每块硬盘在出厂时,已由硬盘生产商进行低级 格式化
,因此通常使用者无需再进行低级格式化操作。其实,我们对一张 软盘
进行的全面 格式化
就是一种低级格式化。
分区:产生MBR。会将分区信息写入MBR.
高级格式化:产生DBR。
linux下分区命令,
---------------------------------------------------------------------------------------------------------------------
nandflash的结构和分区和文件系统
---------------------------------------------------------------------------------------------------------------------
附:虚拟机ubuntu添加一块硬盘
1 接上新硬盘
2 启动Ubuntu,root用户登录。
在终端输入:fdisk -l ,可以看到
----------------------------------------------------------------------------
Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000af383
Device Boot Start End Blocks Id System
/dev/sda1 * 1 1244 9992398+ 83 Linux
/dev/sda2 1245 1305 489982+ 5 Extended
/dev/sda5 1245 1305 489951 82 Linux swap / Solaris
Disk /dev/sdb: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000
Disk /dev/sdb doesn't contain a valid partition table
----------------------------------------------------------------------------
这里可以看到/dev/sdb 就是我们新添加的硬盘,我们需要给新的硬盘分区。
在终端输入:fdisk /dev/sdb
之后键入:m,可以看到帮助信息,
键入:n,添加新分区
键入:p,选择添加主分区
键入:l,选择主分区编号为1,这样创建后的主分区为sdb1
之后,fdisk会让你选择该分区的开始值和结束值,直接回车
最后键入:w,保存所有并退出,完成新硬盘的分区。
3 格式化磁盘
在终端输入:mkfs -t ext3 /dev/sdb1
用ext3格式对/dev/sdb1 进行格式化
4 挂载该分区:
手动挂载:
在终端输入:mkdir /data ,创建新的硬盘的挂载点
在终端键入:mount /dev/sdb1 /data ,将该新分区挂载到/data/这个目录下开机自动挂载
修改/etc/fstab文件,添加如下行:
/dev/sdb1 /data ext3 defaults, 0 1