免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1070 | 回复: 0
打印 上一主题 下一主题

Linux2.6内核的vivi分区及内核MTD分区 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-16 11:01 |只看该作者 |倒序浏览

                  引言
  与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

件会自动把Nand Flash前4K代码拷贝芯片内部RAM空间,CPU其实是从内部RAM开始执行代码的,所以vivi必须放到Nand
Flash顶端。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
struct platform_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
              
                          
            
         
            
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/84780/showart_1901344.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP