当前位置: 技术问答>linux和unix
NAND Flash分区的问题
来源: 互联网 发布时间:2016-11-08
本文导语: 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 n...
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
就出现问题了:
一这样烧写文件系统,在启动时就会提示无法加载内核,似乎是把之前烧写进去的内核给覆盖了,这是怎么回事?
在系统启动过程中可以看到如下信息:
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。