linux nandflash分区,NAND Flash分区的问题

NAND Flash的分区表信息是在内核中还是在bootloader中?

在系统启动过程中可以看到如下信息:

NAND device: Manufacturer ID: 0xec, Chip ID: 0xf1 (Samsung NAND 128MiB 3,3V 8-bit)

Scanning device for bad blocks

Using static partitions on nandflash...

Creating 2 MTD partitions on "NAND 128MiB 3,3V 8-bit":

0x00000000-0x02000000 : "kernel"

0x02000000-0x40000000 : "os"

mtd: partition "os" extends beyond the end of device "NAND 128MiB 3,3V 8-bit" -- size truncated to 0x6000000

soc nand flash init complete

那是否可以理解为在/dev目录下有mtd0和mtd1两个设备文件?

现在问题是:

devcp tftp://172.16.14.107:/vmlinux /dev/mtd0

这条命令可以将内核烧写到flash中

但是在烧写文件系统的时候:

devcp tftp://172.16.14.107:/rootfs.jffs2 /dev/mtd1

就出现问题了:

一这样烧写文件系统,在启动时就会提示无法加载内核,似乎是把之前烧写进去的内核给覆盖了,这是怎么回事?

|

kernel与文件系统一般都是bootloader烧写到NAND中的,假设你通过bootloader烧写kernel到以地址A开始的一片NAND区域,烧写文件系统到以地址B开始的一片NAND区域。bootloader然后就读取NAND的A地址开始的内容来加载内核,并把控制权交给内核。

内核启动后再通过读取相应的文件系统地址来加载文件系统,这个时候的文件系统地址是以MTD的分区来确认的。也就是楼主的“OS”分区。如果“OS”分区的起始地址0x02000000不等于地址B,那么内核读取的文件系统就是不正确,这样就不能正确加载文件系统的。

所以 如果现在运行的状态是bootloader,那分区就是bootloader的分区;

如果是系统状态,那自然认的是MTD的分区。

楼主把kernel烧写到NAND的地址0开始处,不知道是什么意思?

如果NAND的0地址处有bootloader,这样就覆盖了bootloader的内容。

如果没有bootloader,这样也是不能从NAND中启动kernel的。因为NAND不能XIP。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值