当前位置: 技术问答>linux和unix
如何确定内核的烧写地址?
来源: 互联网 发布时间:2016-10-29
本文导语: 现在要往flash种烧写内核。 如何确定内核烧在flash的什么地址范围呢? | 看kernel,以s3c2410或s3c6410为例,一般在mach-smdk6410.c中会定义nand flash的分区。如 struct mtd_partition s3c_partition_info[] = { ...
现在要往flash种烧写内核。 如何确定内核烧在flash的什么地址范围呢?
|
看kernel,以s3c2410或s3c6410为例,一般在mach-smdk6410.c中会定义nand flash的分区。如
struct mtd_partition s3c_partition_info[] = {
{
.name = "Bootloader",
.offset = 0,
.size = (512*SZ_1K),
/* .mask_flags = MTD_CAP_NANDFLASH, */
},
{
.name = "Kernel",
.offset = (512*SZ_1K),
.size = (8*SZ_1M),
/* .mask_flags = MTD_CAP_NANDFLASH, */
},
{
.name = "File System",
.offset = (8*SZ_1M + 512*SZ_1K),
.size = (128*SZ_1M),
},
{
.name = "User",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
}
};
这个就定义了nand flash 的分区。
struct mtd_partition s3c_partition_info[] = {
{
.name = "Bootloader",
.offset = 0,
.size = (512*SZ_1K),
/* .mask_flags = MTD_CAP_NANDFLASH, */
},
{
.name = "Kernel",
.offset = (512*SZ_1K),
.size = (8*SZ_1M),
/* .mask_flags = MTD_CAP_NANDFLASH, */
},
{
.name = "File System",
.offset = (8*SZ_1M + 512*SZ_1K),
.size = (128*SZ_1M),
},
{
.name = "User",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
}
};
这个就定义了nand flash 的分区。
|
你烧写在哪,真正决定的是在bootloader里,但内核中的分区一般又要求与bootloader是一致的,因为当bootloader引导结束,控制权将送到内核,所以此时调用内核的地址是bootloader它自己认为的地址,而且它也烧写到了这,所以内核肯定能够起来。然后内核根据内核源码nand分区地址去调用rootfs,如果你bootloader烧写到nand地址并非是内核中所要求的地址,将产生kernel panic。