norflash移植及uboot 保存环境变量实验

一、实验环境

实验板:TQ2440开发板

SDRAM:64M

norflash:EN29LV160AB(2M)

nandflash:(256M)

二、移植

    本文不详谈从smdk2410移植到TQ2440的详细过程,只把涉及本文的norflash移植详细阐述。

1、norflash移植

/*-----------------------------------------------------------------------
 * FLASH and environment organization
 */

#define CONFIG_AMD_LV800    1    /* EN29LV160AB与AMD_LV800相似 */
#if 0
#define CONFIG_AMD_LV400    1    /* 不使用AMD_LV400 */
#endif

#define CFG_MAX_FLASH_BANKS    1    /* flash就一块 */
#ifdef CONFIG_AMD_LV800
#define PHYS_FLASH_SIZE        0x00200000 /* flash为2MB */
#define CFG_MAX_FLASH_SECT    (35)    /* EN29LV160AB有35个扇区*/
#define CFG_ENV_ADDR        (CFG_FLASH_BASE + 0x0E0000) /* addr of environment */
#endif
#ifdef CONFIG_AMD_LV400
#define PHYS_FLASH_SIZE        0x00080000 /* 512KB */
#define CFG_MAX_FLASH_SECT    (11)    /* max number of sectors on one chip */
#define CFG_ENV_ADDR        (CFG_FLASH_BASE + 0x070000) /* addr of environment */
#endif

/* timeout values are in ticks */
#define CFG_FLASH_ERASE_TOUT    (5*CFG_HZ) /* Timeout for Flash Erase */
#define CFG_FLASH_WRITE_TOUT    (5*CFG_HZ) /* Timeout for Flash Write */

#define    CFG_ENV_IS_IN_FLASH    1    /*环境变量存在flash中,而非其他*/
#define    CFG_ENV_SIZE        0x10000    /* 通常取一个norflash扇区的大小 */

2、增加调试功能

    在include/common.h中添加“#define DEBUG //调试模式”

3、说明:倘若保持原程序的“#define CFG_MAX_FLASH_SECT (19) "也即扇区数目不正确,将出现以下问题

三、实验

1、编译下载,第一次启动

现象:可以看到在执行完env_init()后,env_valid=0x0;在执行env_relocate()函数时,打印警告信息,选择了默认          环境变量。

原因:从flash中读取的环境变量crc校验错误(第一次上电flash中并没有保存环境变量)

2、查看flash信息并保存环境变量(把内存中环境变量保存到flash中)

现象:EN29LV160AB的39个扇区信息如图所示;saveenv命令成功被执行

3、重启(第二次启动)

现象:可以看到在执行完env_init()后,env_valid=0x1;在执行env_relocate()函数时,不再打印警告信息。

原因:从flash中读取的环境变量通过了crc校验

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PetaLinux是一个基于Yocto Project的嵌入式Linux开发工具,可用于构建自定义Linux发行版。在PetaLinux,uboot是用于启动Linux内核的引导加载程序。在uboot环境变量是一些可以配置uboot行为的参数。 要将uboot环境变量保存到SD卡,可以按照以下步骤进行: 1. 在PetaLinux项目的uboot源代码目录下,找到`include/configs`文件夹,其包含了与硬件平台相关的uboot配置文件。 2. 打开对应的配置文件,例如`zynq_common.h`。 3. 在配置文件,找到`#define CONFIG_ENV_IS_IN`宏定义。该宏定义指定了uboot环境变量的存储位置,默认为“nand”或“nor”等闪存设备。 4. 修改`#define CONFIG_ENV_IS_IN`宏定义为`"sd"`,指定uboot环境变量存储在SD卡。 5. 在配置文件,找到`#define CONFIG_ENV_OFFSET`宏定义。该宏定义指定了uboot环境变量在存储设备的偏移地址。 6. 修改`#define CONFIG_ENV_OFFSET`宏定义为SD卡的偏移地址,例如`0x100000`。 7. 保存并关闭配置文件。 8. 在uboot源代码目录下执行`make clean`命令来清理之前的编译结果。 9. 执行`make`命令重新编译uboot。 10. 将生成的uboot二进制文件烧录到SD卡的启动区域。 11. 将SD卡插入目标设备,启动设备。 12. 在uboot启动时,可以使用命令`printenv`来验证uboot环境变量是否成功保存在SD卡。 通过以上步骤,你可以将uboot环境变量保存到SD卡。这样,在使用SD卡启动设备时,uboot可以从SD卡读取环境变量并进行相应的配置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值