利用mtd工具升级系统,其实说白了,就是:
- 用flasherase擦除数据
先用flasherase擦除对应mtd分区中的内容
- 用nandwrite写入数据
然后将对应的数据(uboot或uImage或rootfs)用nandwrite写入到对应的mtd中对应的位置即可。
前面介绍过了,对于常见的是把uboot(和kernel)放到nor flash中,而把kernel和rootfs放在nand flash中的。
而我此处的举的例子,是另外一种,即全部内容都放在nand flash上的。
但是,不论是是nor flash,还是nand flash,都在Linux的MTD框架下,管理起来,都是一样的。都是可以用对应的mtd的工具去操作的。所以,如果你本身是要升级对应的uboot(和kernel)到nor flash,对于整个过程,也是一样的,自己照葫芦画瓢即可。
关于我此处举例所用的MTD的分区是如何的,此处先给出相关部分的代码:
#define UBOOT_SIZE (SZ_1M)
#define KERNEL_SIZE (SZ_8M)
#define ROOTFS_SIZE (SZ_1M*200)
#define TEMP_SIZE (SZ_1M*64)
#define BEFORE_DATA_PARTION_SIZE \
(ROOTFS_SIZE + KERNEL_SIZE + UBOOT_SIZE + TEMP_SIZE)
。。。
static struct mtd_partition XXX_default_nand_part[] = {
[0] = {
.name = "U-Boot",
.offset = 0,
.size = UBOOT_SIZE,
},
[1] = {
.name = "Kernel",
.offset = UBOOT_SIZE,
.size = KERNEL_SIZE
},
[2] = {
.name = "Root filesystem",
.offset = UBOOT_SIZE + KERNEL_SIZE,
.size = ROOTFS_SIZE,
},
[3] = {
.name = "Temp",
.offset = UBOOT_SIZE + KERNEL_SIZE + ROOTFS_SIZE,
.size = TEMP_SIZE,
},
[4] = {
.name = "Data",
.offset = BEFORE_DATA_PARTION_SIZE,
.size = 0, /* set in XXX_init_nand_partion() */
},
};
对应的用图表来说明,如下:
下面就来介绍,如何一步步升级uboot,kernel和rootfs。






