首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >U引导中的Nand分区

U引导中的Nand分区
EN

Stack Overflow用户
提问于 2011-12-21 06:27:06
回答 2查看 26.1K关注 0票数 12

我正在开发一个嵌入式ARM9开发板。因为我想重新排列我的nand分区。有人能告诉我怎么做吗?

在我的u引导shell中,如果我给出命令mtdparts,它将提供以下信息。

代码语言:javascript
复制
Boardcon> mtdparts      

device nand0 <nandflash0>, # parts = 7

#: name                size            offset          mask_flags
0: bios                0x00040000      0x00000000      0
1: params              0x00020000      0x00040000      0
2: toc                 0x00020000      0x00060000      0
3: eboot               0x00080000      0x00080000      0
4: logo                0x00100000      0x00100000      0
5: kernel              0x00200000      0x00200000      0
6: root                0x03c00000      0x00400000      0

active partition: nand0,0 - (bios) 0x00040000 @ 0x00000000

defaults:
mtdids  : nand0=nandflash0 
mtdparts: mtdparts=nandflash0:256k@0(bios),128k(params),128k(toc),512k(eboot),1024k(logo),2m(kernel),-(root) 

内核引导消息显示如下:

代码语言:javascript
复制
 Creating 3 MTD partitions on "NAND 64MiB 3,3V 8-bit":
 0x000000000000-0x000000040000 : "Boardcon_Board_uboot"
 0x000000200000-0x000000400000 : "Boardcon_Board_kernel"
 0x000000400000-0x000003ff8000 : "Boardcon_Board_yaffs2"

任何人都可以解释一下这两条信息之间的关系。哪个内核或u引导负责在nand闪存上创建partions?据我所知,内核不是在每次引导上创建分区,而是为什么消息“创建3个MTD分区”?

EN

回答 2

Stack Overflow用户

发布于 2014-01-15 08:17:20

对于闪存设备,无论是NAND还是NOR,设备本身都没有分区表。也就是说,您不能在闪存读取器中读取设备并找到一些表,该表指示设备上有多少分区以及每个分区的开始和结束位置。只有一个未区分的区块序列。这是MTD闪存设备与诸如磁盘或FTL设备(如MMC )之间的根本区别。

因此,闪存设备的分区在旁观者的眼中,即U或内核中,并且分区是在旁观者运行时“创建”的。这就是为什么您看到消息Creating 3 MTD partitions。它反映了一个事实,即flash分区实际上只存在于正在运行的内核的MTD系统中,而不存在于闪存设备本身。

这导致了U和内核可以对闪存分区有不同的定义的情况,这显然是OP中发生的情况。

在U中,您可以在mtdparts环境变量中定义闪存分区。在Linux内核中,闪存分区定义在以下位置:

在旧内核中的

  1. (例如,2.6.35用于i.MX28)闪存分区可以在gpmi-nfc-mil.c或其他驱动程序源代码中进行硬编码。在支持设备树的较新的主线内核中,您可以在新内核中的设备树中定义MTD的定义,在较新的内核中,通常使用root=/dev/mmcblk0p2 rootwait console=ttyS2,115200 mtdparts=nand:6656k(all),1m(squash),-(jffs2)

这样的命令行支持内核命令行分区定义。

因此,内核中的分区支持类型取决于您正在使用的闪存类型,它的驱动程序是否支持内核命令行解析,以及内核是否有设备树支持。

无论如何,闪存的U和内核分区之间存在冲突的内在风险。因此,我的建议是在support mtdparts变量中定义闪存分区,并将其传递给support内核命令行中的内核,前提是内核支持此选项。

票数 30
EN

Stack Overflow用户

发布于 2011-12-22 08:48:20

您可以在uboot中设置mtdpart环境变量,并且内核只有在内核引导命令行中传递此变量时才使用该变量,否则它将默认为平台内核源代码中的nand分区结构,在这种情况下,这是3 MTD分区的默认设置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8585864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档