u-boot-2016.11移植nandfalsh(基于s5pv210)

本文档详细介绍了如何将U-Boot 2016.11版本移植到S5PV210处理器上,重点在于NAND Flash的初始化和环境变量的存储。通过修改board_init_r函数,屏蔽CONFIG_ENV_IS_IN_ONENAND,启用CONFIG_ENV_IS_IN_NAND。当从NAND读取环境变量失败时,会执行默认的mtdparts分区并使用saveenv命令将其保存到NAND中。
摘要由CSDN通过智能技术生成

一、移植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);


在smdkv210.h中添加该宏CONFIG_SYS_NAND_DEVICE

/*
 * 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值