一、移植nandflash
nand初始化的函数是在board_init_r中被调用
vim common/board_r.c
#ifdef CONFIG_CMD_NAND
initr_nand,
#endif
#ifdef CONFIG_CMD_ONENAND
initr_onenand, /* modied by Sourcelink */
#endif
u-boot一开始定义了CONFIG_CMD_ONENAND在smdkv210.h中
vim include/configs/smdkv210.h
#define CONFIG_CMD_NAND /* modied by Sourcelink */
#define CONFIG_CMD_REGINFO
#undef CONFIG_CMD_ONENAND /* modied by Sourcelink */
进入init_nand函数中发现调用了nand_init函数,通过追踪发现CONFIG_SYS_NAND_DEVICE没有定义
vim drivers/mtd/nand/nand.c
for (i = 0; i < CONFIG_SYS_MAX_NAND_DEVICE; i++)
nand_init_chip(i);
/*
* NAND Contoller driver
*/
#ifdef CONFIG_CMD_NAND /* add by Sourcelink */
#define CONFIG_SYS_MAX_NAND_DEVICE 1
#endif
编译发现没有定义宏CONFIG_SYS_NAND_BASE
#ifdef CONFIG_CMD_NAND /* add by Sourcelink */
#define CONFIG_SYS_MAX_NAND_DEVICE 1
#define CONFIG_SYS_NAND_BASE 0xB0E00000
#endif
再次编译,还是出错,onenand_mtd和board_nand_init又没有定义,查看common/Makefile
vim common/Makefile
obj-$(CONFIG_ENV_IS_IN_NAND) += env_nand.o
obj-$(CONFIG_ENV_IS_IN_NVRAM) += env_nvram.o
obj-$(CONFIG_ENV_IS_IN_ONENAND) += env_onenand.o
我们需要把环境变量保存到nand,所以屏蔽掉CONFIG_ENV_IS_IN_ONENAND,并定义宏CONFIG_ENV_IS_IN_NAND
vim include/configs/smdkv210.h
#define CONFIG_ENV_IS_IN_NAND 1 /* add by Sourcelink */
#if 0
#define CONFIG_ENV_IS_IN_ONENAND 1
#endif