(转贴)Linux2.6内核的vivi分区及内核MTD分区

 

  博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

<script> <!-- navHover = function() { var lis = document.getElementById("navmenu").getElementsByTagName("LI"); for (var i=0; i<lis.length; i++) { lis[i].οnmοuseοver=function() { this.className+=" iehover"; } lis[i].οnmοuseοut=function() { this.className=this.className.replace(new RegExp(" iehover//b"), ""); } } } function NewWindows(shref){ var xx=(window.screen.width-450)/2; var yy=(window.screen.height-200)/2; pp=window.open(shref,"win","menubar=no,location=no,resizable=no,scrollbars=no,status=no,left="+xx+",top="+yy+",Width=450,Height=200"); } function $(s){return document.getElementById(s);} //--> </script>

joshuazzh

路漫漫其修远兮 吾将上下而求索
  joshuazzh.cublog.cn

<script> function $(s){return document.getElementById(s);} function ShowHideDiv(divid,iImg){ if($(divid).style.display == "none"){ iImg.src="../../templates/tech/images/dot2.gif"; $(divid).style.display = "block"; iImg.title="收起"; }else{ iImg.src="../../templates/tech/images/dot4.gif"; $(divid).style.display = "none"; iImg.title="展开"; } } if (window.attachEvent) window.attachEvent("onload", navHover); </script>


关于作者
姓名:zzh
职业:在读
年龄:1985
位置:北京
个性介绍:
路漫漫其修远兮,吾将上下而求索!
||<<2009年4月己丑年(牛)>>||



1
愚人节
2
初七
3
初八
4
清明
5
初十
6
十一
7
十二
8
十三
9
十四
10
十五
11
十六
12
十七
13
十八
14
十九
15
二十
16
廿一
17
廿二
18
廿三
19
廿四
20
谷雨
21
廿六
22
廿七
23
廿八
24
廿九
25
4月小
26
初二
27
初三
28
初四
29
初五
30
初六









<script src="http://blog.chinaunix.net/templates/newtech/mdate.js"></script> <script> var arrArtdate=new Array('20080415','20080512','20080519','20080530','20080531','20080603','20080612','20080616','20080624','20080625','20080626','20080627','20080628','20080630','20080714','20080828','20081031','20081107','20090312'); initial("ttdiv"); </script>
我的分类
<script src="http://blog.chinaunix.net/templates/newtech/tree.js"></script> <script> ContentsTree = new CTree("ContentsTree"); ContentsTree.bAutoClose = false; ContentsTree.stTarget = ""; a0 = ContentsTree.AddNode(null, "我的文章分类", "article.html"); a0.bOpen=true; p0 = ContentsTree.AddNode(null, "我的图片分类", "photo.html"); p0.bOpen=true; f0 = ContentsTree.AddNode(null, "我的链接分类", "links.html"); f0.bOpen=true; m0 = ContentsTree.AddNode(null, "我的音乐分类", "music.html"); m0.bOpen=true; //document.write(ContentsTree.GetHTMLCode()); document.getElementById("lefttree").innerHTML=ContentsTree.GetHTMLCode(); </script>


Linux2.6内核的vivi分区及内核MTD分区
Linux2.6内核的vivi分区及内核MTD分区
来源:电子产品世界 作者:解放军理工大学 通信工程学院 梁千帆 陈 时

 	与Linux2.4内核相比,Linux2.6内核在性能、模块支持、可用性、可测量性等方面有大幅度的提高。
Linux2.6内核取代2.4内核是大势所趋。
 ARM9 S3C2410微处理器是一款由SAMSUNG公司为手持终端设计的低价格、低功耗、高性能,基于ARM920T
核的微处理器。它与Linux的结合越来越紧密,逐渐在嵌入式领域得到广阔的应用。目前,在PDA、移动通信、
路由器、工业控制等领域都可以看到S3C2410与Linux相结合的身影。
  当前市场上基于S3C2410微处理器的开发板绝大部分都是用Nand Flash作为主存储器。Nand Flash是一
种可在系统上进行电擦写,掉电后信息不丢失的存储器。
  开发板从上电到内核启动需要一个引导程序,在嵌入式Linux系统下称为Boot loader。vivi是韩国
MIZI公司为其ARM9系列产品研发的Boot Loader。
  MTD(存储技术器件)是Linux内核采纳的一种设备子系统,它为底层的存储芯片提供了统一的设备接口。
  然而,vivi的Nand Flash分区(简称vivi分区)并不适合Linux2.6内核的需求,必须作出修改。
而内核MTD分区是与vivi分区相对应的,随着vivi分区的改变也须重新定制。
  本文在分析vivi分区与内核MTD分区的基本概念及两者关系的基础上,详细介绍了基于S3C2410开发板
的Linux2.6内核下的vivi及内核MTD分区方法。
  
Vivi分区和内核MTD分区的解析
Vivi分区解析
  Vivi分区指的是给引导程序、内核映像、文件系统等在Nand Flash上分配空间及起始地址。在vivi的
命令模式下输入命令:part show,可得vivi分区信息。未作修改的vivi分区信息如表1。
                                 
  从信息中可知,vivi把Nand Flash分为4个区,分别为vivi、param、kernel、root。
信息中的offset表示各分区在Nand Flash中的起始位置,size及的后面128k、64k、768k、1M+256k表示各分区
的大小,flag为标识符。
未修改的vivi给放置内核映像文件zImage的kernel分区只有768k,但2.6内核的映像文件 一般都超过1M。另外,
MIZI公司针对其自身产品所设计的vivi只对略大于2M的Nand Flash空间进行了分区;然而,S3C2410开发板的
Nand Flash容量为一般为32M或64M的,还有很大的空间可用。所以,重新定制vivi分区十分必要。
 	
内核MTD分区解析
Linux2.6内核的MTD能够支持ROM、RAM、FLASH(NOR和NAND)等存储芯片。MTD同时可提供两类MTD驱动程序,
一类是MTD设备地址空间的映射,提供直接访问设备的操作;另一类则为建立文件系统提供基础。
在基于Linux2.6内核的S3C2410开发板上,Nand Flash上各段存储空间都被定义成MTD分区来管理的,
各分区都可以通过Linux系统中的设备文件来访问。
所以在内核中必须有MTD对引导程序、内核映像、文件系统在Nand Flash上的分区信息。
vivi分区与内核MTD分区的关系 
从Nand Flash启动时,S3C2410硬件会自动把NandFlash前4K代码拷贝芯片内部RAM空间,CPU其实是从
内部RAM开始执行代码的,所以vivi必须放到NandFlash顶端。vivi开始执行后将初始化硬件设备、建立
内存空间映射表,为调用内核做好准备;然后把压缩的内核映像加载到SDRAM中;最后跳转到内核映像入口,
启动内核。
	内核MTD分区必须与vivi分区相一致。因为,vivi分区中的地址是引导程序、内核映像及文件系统
下载到Nand Flash的真正地址;而内核启动时,内核并不是去读vivi分区中的地址,而是去读内核MTD分区
设定的地址;所以,如果内核MTD分区与vivi分区不相同,很可能导致不能正常启动内核及读取文件系统。
  	
vivi和内核MTD的重新分区
  vivi的重新分区
  根据开发板的Nand Flash大小及开发用途确定新的vivi分区,如表2。
         
  打开vivi源代码下的arch/s3c2410/smdk.c文件,在函数:
“mtd_partition_default_mtd_partitions[]={}”中可以看到vivi默认的Nand Flash分区信息。
根据表2的新分区信息,在上述函数中以相同的格式修改原有分区信息即可完成vivi的重新分区。
  
内核MTD的重新分区
  在给内核MTD重新分区之前,有一点应该注意,2.6.16(含)以前内核与2.6.17(含)以后内核的MTD重新
分区方法是不一样的,前者是需要增加新的分区信息,而后者源代码初始文件中已含分区信息,需要
的是修改分区信息。
  
Linux2.6.16(含)以前内核的MTD重新分区
  首先,在内核源代码arch/arm/mach-s3c2410/devs.c文件下增加头文件:
“linux/mtd/partitions.h”、“asm/arch/nand.h”、“linux/mtd/nand.h”。
注意,因为头文件之间也有先后关联的关系,所以要把这三句放到#include“devs.h”下面。
若放在其他地方,编译可能报错。 然后,同样在devs.c文件下,根据表2添加新的分区信息:
  Static struct mtd_partition partition_info[]={ 
  {name:“vivi”,size:0x00020000,offset:0,} 
  {name:“param”,size:0x00010000,offset:0x00020000,}, 
  {name:“kernel”,size:0x001d0000,offset:0x00030000,}, 
  {name:“root”,size:0x00400000,offset:0x00200000,mask_flags:mtd_writeable,}, 
  {name:“program”,size:0x03a00000,offset:0x00600000,} 
  }; 
 
 Struct s3c2410_nand_set
nandset={nr_partitions:5,partitions:partition_info,};
struct s3c2410_platform_nand   
superlpplatform={tacls:0,twrph0:30,twrph1:0,sets:& nandset, nr_sets:1,};
  最后,在devs.c文件的
s3c_device_nand函数中增加:“.dev={.platform_data=&superlpplatform}”;在
arch/arm/mach-s3c2410/mach-smdk2410.c文件的“static structplatform_device*smdk2410_
devices[]_initdata={}”中增加“&s3c_device_nand”。目的是使内核在启动时初始化nand flash
信息。
  
Linux2.6.17(含)以后内核的MTD重新分区
  Linux2.6.17(含)以后内核的MTD分区要比Linux2.6.16(含)以前内核简单很多,因为源代码的初始
文件中已含分区信息,只要修改一下就行了。 在源代码arch/arm/mach-s3c2410/common-smdk.c文件下
的函数“mtd_partition smdk_default_nand_part[]={}”中,可以看到默认的MTD分区。根据表1,
以相同的格式修改原分区信息即可完成MTD的重新分区。
  	
结语
  基于Linux2.6内核的Linux与ARM9 S3C2410的结合将会在嵌入式领域得到广泛的应用。
vivi分区与内核MTD分区是两者进行联合开发的基础。
  
参考文献:
  1、 嵌入式Linux系统开发技术详解—基于ARM,孙纪坤、张小全,人民邮电出版社,2006 
  2、 ARM9嵌入式技术及Linux高级实践教程,陈赜,北京航空航天大学出版社,2005 
  3、 中国Linux公社论坛,《Linux2.6.10以后版本对S3C2410的支持》 
  4、 Mizi公司网站http://www.mizi.com/developer/s3c2410 
  5、 Linux MTD网站http://www.linux-mtd.infradead.org

 

 原文地址 http://203.208.37.104/search?q=cache:1n_B81Rpv04J:www.gd-emb.org/detail/id-49881.html+MTD%E5%88%86%E
发表于: 2008-06-24,修改于: 2008-07-15 09:30,已浏览332次,有评论0条 推荐 投诉


网友评论
 发表评论
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值