一 配置Uboot:
编译配置时选择make CROSS_COMPILE=arm-none-linux-gnueabi- da850sdi_tl_config,使用默认配置da850sdi_tl_config,查找对应的配置文件。
1. make da850sdi_tl_config分析
%_config:: unconfig
@$(MKCONFIG) -A $(@:_config=)
等于执行:/mkcoinfig –A da850sdi_tl
然后查看mkconfig文件,是个脚本文件
2. line=`egrep -i"^[[:space:]]*${2}[[:space:]]" boards.cfg`
3. board.cfg 文件中
da850sdi_tl arm arm926ejs da8xxevm davinci davinci da850sdi:SPL_MMC_LOAD,SPL_NAND_LOAD
4. 执行echo "Configuring for ${BOARD_NAME} - Board: ${CONFIG_NAME},Options: ${options}"
5. # Create link to architecturespecific headers
然后ln -s ../arch/${arch}/include/asm asm,在include目录下建立asm的链接
6. # Create include file for Make,创建/include/config.mk文件,> config.mk
7. # Create board specific headerfile,创建/include/config.h文件,> config.h
8. 往config.h中添加内容#define等,自动生成
#define CONFIG_SPL_MMC_LOAD 1
#define CONFIG_SPL_NAND_LOAD 1
#define CONFIG_BOARDDIR board/davinci/da8xxevm
#include
#include
#include
#include
9. mkconfig脚本执行结束。
二 Uboot里的nand flash里分区表
根据配置文件找到需要 修改地址include/configs/da850sdi.h
1 查看是否开启nanf flash
#define CONFIG_DRIVER_TI_EMAC
#define CONFIG_MAC_ADDR_DIEID
#ifndef CONFIG_USE_NAND
#define CONFIG_USE_NAND
#endif
2 配置u-boot参数存储在nand flash 第一块 长度为128K ,地址范围为0x00~0x20000
#define CONFIG_ENV_IS_IN_NAND /* U-Boot env in NAND Flash */
#define CONFIG_ENV_OFFSET 0x0 /* Block 0--not used by bootcode */
#define CONFIG_ENV_SIZE (128 << 10)
3配置u-boot.bin存储在nand flash 第一块分区 长度为496K ,地址范围为0x28000~0xA0000
#define CONFIG_SYS_NAND_U_BOOT_OFFS 0x28000 /* used UBL part */
#define CONFIG_SYS_NAND_U_BOOT_SIZE (0x80000 - 0x8000)/* max size is 512KB */
注意 如果编译生成的是u-boot.ais 是程序有自动转码了的,在u-boot.bin文件 加入了AIS编码。关于AIS编码具体信息可以参考https://blog.csdn.net/j00362/article/details/50069349此微博。AIS存在nand flash的地址为0x20000~0x28000.
三 内核里的nand flash里分区表
内核里的分区表位于文件linux-3.3archarmmach-davincioard-da850-evm.c
static struct mtd_partition da850_evm_nandflash_partition[] = {
{
.name = "u-boot env",
.offset = 0,
.size = SZ_128K,
.mask_flags = MTD_WRITEABLE,
},
{
.name = "UBL",
.offset = MTDPART_OFS_APPEND,
.size = 4 * SZ_128K,
.mask_flags = 0,
},
{
.name = "u-boot",
.offset = MTDPART_OFS_APPEND,
.size = 4 * SZ_128K,
.mask_flags = 0,
},
{
.name = "kernel",
.offset = MTDPART_OFS_APPEND,
.size = SZ_4M,
.mask_flags = 0,
},
#if defined(CONFIG_MACH_OMAPL138_CFGZ)
{
.name = "filesystem",
.offset = MTDPART_OFS_APPEND,
.size = SZ_32M,
.mask_flags = 0,
},
{
.name = "data",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
.mask_flags = 0,
},
#else
{
.name = "filesystem",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
.mask_flags = 0,
},
#endif
};
编译生成u-boot.ais文件, 烧写到指定地址范围。
四 启动内核后的引导分区表
0-0x20000: 保存 U-Boot 环境变量,128KB 大小(0x20000)。
0x20000-0xa0000: 保存 u-boot.ais 镜像,512KB 大小(0x80000)。
0xa0000-0x120000: 预留区域,512KB 大小(0x80000)。因为之前 U-Boot 和 SPL 需要占
用两个分区,目前已将 U-Boot 和 SPL 合成为一个 U-Boot 镜像 u-boot.ais,所以此区域暂
时预留。
0x120000-0x520000:保存内核镜像 uImage,4MB 大小(0x400000)。
0x520000-0x20000000:保存文件系统,506MB 大小(0x1FAE0000)。