MTD 分区与文件系统联系

1 篇文章 0 订阅

MTD(memory technologe devicec 内存技术设备) 引入 MTD是为了?



MTD是 memory technology device的简称 (奇怪的中文译名内存技术设备)
个人理解:MTD实际上是跟VFS差不多的东西,VFS是虚拟文件系统,在VFS中有对各种具体文件系统的接口,将虚拟文件系统向上能提供的接口完成,通过调用下层具体文件系统接口即可实现。
MTD即提供统一的上层接口,由下层具体设备分别实现即可形成虚拟的存储设备访问接口。关键在于只要上层存在对MTD实现接口的下层具体存储设备的实现(或说驱动程序)存在即可。

那么问题来了:
存在分区与文件系统关系的问题 分区是对整块存储器而言,存储器分区意义在哪里?
存储器分区即可以实现对不同的分区使用不同的文件系统。这就是分区与文件系统的关系。
文件系统是建立于管理存储器的一种程序,分区是将存储器分别管理的一种做法。
补充:文件系统实际上是什么?
        文件系统是一个程序,管理harddisk的程序。实际上文件系统应该包含两部分,一部分是软件逻辑,另一部分是记录文件归档所需要的数据结构。
        软件逻辑实际上可以作为操作系统内核的一部分而存在。是提供操作系统访问存储器的软件接口。
        在linux中,文件系统不是一种运行中的软件,而是一堆等待被调用的代码,有点像驱动,但又不纯粹是驱动,感觉它并没有直接操控硬件。再用户需要存储文件的时候,如使用touch命令
                touch test.c ;    
        这个时候就会创建一个文件,这个文件有目录(path),文件名,等各种文件信息。对应不同的文件系统就会以不同的数据组织方式登记在存储器分区中了。而登记和文件信息的组织方式就是再调用文件系统的那一堆驻留内核的 代码来完成的。
        而记录文件归档所需要的数据结构则是在实际的存储器空间之外的存在harddisk固定位置的一堆数据,每次存取文件或一切改变文件归档的操作都会对这里的数据结构产生修改。恩,大概文件系统就是这样子的东西了。这样应该还满清楚的。



嗯,大致就是这样子的。 
在linux下的/dev/sda 表示的就是一块硬盘,sda表示的是sata接口的硬盘,还有什么hda或者mmcblk之类的嵌入式里面使用的各种存储器。然后通常可以看到会有sda1,sda2等等设备文件,这些文件则表示这个硬盘的分区,那它是怎么得到的呢,通过读取硬盘的前64字节(MBR分区信息)来获取分区信息。要使用分区,则需要格式化你要使用的分区。
        mkfs.ext3 /dev/sda1 ,如果没记错,这样就可以了。linux下有VFS这种通用的虚拟接口,可以直接mount /dev/sda1 /mnt  下使用该分区。

而在windows下通常是无须挂载这一过程的,系统会自动“挂载”并分配盘符。但是分区信息跟文件系统都是一种标准是通用的。
另外还有一种分区的标准是gpt。


       现在,我们可以翻回头看上面程序中的MTD分区了。MTD分区中的uboot分区明显对应了uboot分区中的bios分区(从0开始,大小为128K),而MTD分区中的kernel和yaffs2分区的起始地址和大小也分别对应uboot分区中的kernel和root分区。而因为我们不需要uboot分区中的其他部分,所以在MTD分区中出现了这一部分空隙。但为什么这么安排呢?

 

       回想我们在烧写程序时候的操作,比如我们选择烧写内核镜像,此时,uboot实际执行了一条语句,类似于

 

#define kernel 0x00200000

memcpy(kernel,0x30000000,SZ_3M)

 

       这里我们烧写程序的入口地址是0x30000000,也就是说,uboot的下载模式将我们烧写到内存0x30000000处的数据,搬到了NAND flash的kernel处,保存了起来,因此,这里要清楚,我们烧写程序时,实际是将程序先烧写到了内存当中,然后由内存搬运到NAND flash中,如果此时我们的MTD分区与uboot中的分区是一致的,那么内核将来运行时可以很方便的找到内核程序所在的位置,同样,对文件系统的yaffs2分区也是如此,而且,与内核分区相比,文件系统的分区将显得更加重要,因为将直接影响到根文件系统能否挂载,这里是因为上面提到的一行

 

bootargs=noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0

 

       这里,uboot指定了根文件系统的代码来自于mtdblock2,也就是MTD分区的第三个分区(第一个编号为0),也就是我上面说到的,uboot完成初始化后,加载内核,而内核要完成文件系统的挂载,他从哪里找文件系统?就是这里!/dev/mtdblock2!

       所以,现在我们看到,MTD分区的原因,而且最关键的在这里,其他分区如果与uboot的分区不一致还情有可原,但如果MTD分区中文件系统的分区与uboot中的root分区不一致,将会直接导致系统无法启动!


uboot 中有一个分区  这个分区对应着MTD中的分区  uboot中的分区更细一些



  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值