积分规则 网站地图 帮助中心    
嵌入式软件 单 片 机 DSP 存储器 传感控制 光电显示
嵌入式硬件 CPLD/FPGA SOPC AD/DA 接口电路 模拟设计
I C设计 通信产品 汽车电子 电源产品 消费电子 数控系统
工业控制 军工/航天 安防产品 医疗电子 计算机外设 测试测量
供应 I C
求购 公司库

  IC 求购 销售 公司 论文 DATASHEET 参考设计 论坛
当前位置: 电子技术 >> 嵌入式软件 >> LINUX
  相关分类: LINUX | WINCE | UC/OS | Bootloader | 下载 | VXWORKS | 网络协议 | JAVA | 汇编 | 驱动设计 | Symbian | XP Embedded | Nucleus | 新产品 | 相关文章 | 综合技术 |
Linux2.6内核的vivi分区及内核MTD分区
 
作者:解放军理工大学 通信工程学院 梁千帆 陈建华   来源:电子产品世界    点击数:164   更新时间:2008-5-29
您可以添加到网摘 让更多人关注此文章:

    引言

  与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

[1]



相关文章
· 嵌入式Linux操作系统的驱动程序开发要点[69]
· 教你一招 Linux常见紧急情况处理方法[59]
· 基于PXA255的PDA交通管理系统在Linux环境下的实现[253]
· Linux操作系统发展简史(转载)[286]
· Linux发展面临新机遇 产业井喷在即[153]
热门评论排行
·VHDL设计中电路简化问题的
·江苏嵌入式Linux教育培训
·锐极LINUX驱动培训班定于
·基于实时操作系统μC/OS-
·ARM处理器应用开发4步骤

文章评论
    没有任何评论
*只显示最新10条评论。评论内容只代表网友观点,与本站立场无关。更多评论
发表评论
  * 请先[登陆]再进行评论,谢谢。
评分: 1分 2分 3分 4分 5分
内容: *
发帖须知:
一.所发文章必须遵守《互联网电子公告服务管理规定》;
二.严禁发布供求代理信息,公司介绍,产品信息等广告宣传信息;
三.严禁恶意重复发帖;
四.严禁对个人,实体,民族,国家等进行漫骂,污蔑,诽谤。
 
热点新闻 [更多]
 
ARM联手IBM等三家公司开发32n
Hitachi Elect
中国芯片供需缺口达七成
西班牙研发出视觉鼠标 眨眼
首条OLED生产线昆山投产 
宇航服电子元器件:航天员的“生命保护
美研发出可卷曲太阳能电池
美国研发嗅觉感受器获新进展 
首尔半导体就日亚(NICHIA)专利
MIPS 科技授权国家集成
 
热门下载 [更多]
 
[ PCB设计] Protel99教程下载
[ ] 手把手学单片机20个例
[ ] 单片机做的智能台灯
[ ] 单片机入门书
[ ] linux系统移植开发文档
[ ] IC卡的读写程序
[ ] 8051单片机C语言彻底应用
[ 常用软件] 555定时器电路设计软件V1.2
[ 常用软件] 51定时器计算软件
[ ] ARM处理器应用开发4步骤
 
论坛新帖 [更多]
 
写给迷茫中的嵌入式新手...
Arm/DSP/FPGA的比较...
Arm/DSP/FPGA的比较...
Arm/DSP/FPGA的比较...
[分享]逆变器的买与用...
[分享]电力系统直流电源装置的...
单片机如何控制TFT真彩色LC...
请教:2051的C程序...
中国为何没有世界级的企业和企业...
AVR的EEPROM,到底怎么...

 
赞助商 [更多]
 

ICP许可证号:[粤 05056597]
联系电话:010-82517432 82517615 传真: 010-82517615

版权所有 Copyright © 2006 嵌入式技术网