u-boot-2014.10移植第23天----nand flash启动(一)
硬件平台:tq2440 开发环境:Ubuntu-3.11 u-boot版本:2014.10 本文允许转载,请注明出处:http://blog.csdn.net/fulinus 在Nand flash中保存环境变量u-boot中的环境变量可以通过pri命令可以查看,可以通过set(setenv)命令设置一个参数,设置之后的参数仅仅是保存在SDRAM中,掉电后丢失, 使用save命令可以保存参数到Nor flash或Nand flash中去,但是u-boot默认是保存到Nor flash中去,下面修改u-boot,使其保存的环境变量保存到 Nand flash中去。 在include/configs/tq2440.h文件中修改: + #if NONE_FLAG #define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x070000) #define CONFIG_ENV_IS_IN_FLASH #define CONFIG_ENV_SIZE 0x10000 + #else + #define CONFIG_ENV_IS_IN_NAND + #define CONFIG_ENV_OFFSET 0x40000 /* 256K for u-boot */ + #define CONFIG_ENV_SIZE 0x20000 /* 128K for environment */ + #endif 编译、烧录到SDRAM中去,运行。演示: *** Warning - bad CRC,using default environment这条提示说明没有没有环境变量,使用默认的环境变量,使用pri查看有哪些环境变量: [TQ2440 #] pri 使用save命令保存默认的环境变量: [TQ2440 #] save 再次烧录运行,就没有上面的警告了。在tq2440.h头文件中设置环境变量: #define CONFIG_NETMASK 255.255.255.0 + #define CONFIG_IPADDR 192.168.169.9 + #define CONFIG_SERVERIP 192.168.169.8 + #define CONFIG_ETHADDR 12:34:56:78:9A:BC 添加mtd分区命令修改tq2440.h文件,使能该命令宏: /* * File system */ + #if NONE_FLAG #define CONFIG_CMD_FAT #define CONFIG_CMD_EXT2 #define CONFIG_CMD_UBI #define CONFIG_CMD_UBIFS #define CONFIG_CMD_MTDPARTS #define CONFIG_MTD_DEVICE #define CONFIG_MTD_PARTITIONS #define CONFIG_YAFFS2 #define CONFIG_RBTREE + #else + #define CONFIG_CMD_MTDPARTS + define CONFIG_MTD_DEVICE #endif 编译、烧录到SDRAM中去,运行。演示: [TQ2440 #] mtd mtdids not defined,no default present上述提示位于common/cmd_mtdparts.c文件1751行 if (mtdids_default) { debug("mtdids variable not defined,using defaultn"); ids = mtdids_default; setenv("mtdids",(char *)ids); } else { printf("mtdids not defined,no default presentn"); return 1; }mtdids_default为假时错误打印该条信息,mtdids_default变量在该文件中定义如下: /* default values for mtdids and mtdparts variables */ #if defined(MTDIDS_DEFAULT) static const char *const mtdids_default = MTDIDS_DEFAULT; #else static const char *const mtdids_default = NULL; #endif #if defined(MTDPARTS_DEFAULT) static const char *const mtdparts_default = MTDPARTS_DEFAULT; #else static const char *const mtdparts_default = NULL; #endif现在这里的mtdids_default=NULL,因为未定义MTDIDS_DEFAULT宏。下面定义MTDIDS_DEFAULT宏和MTDPARTS_DEFAULT宏,参考该文件中最上面注释部分内容: ?* Examples: 在tq2440.h头文件中定义: #else #define CONFIG_CMD_MTDPARTS #define CONFIG_MTD_DEVICE + #define MTDIDS_DEFAULT "nand0=tq2440-0" + #define MTDPARTS_DEFAULT "mtdparts=tq2440-0:1m(u-boot)," + "4m(kernel)," + "-(rootfs)" #endif编译、烧录到SDRAM中去,运行。演示: [TQ2440 #] pri [TQ2440 #] mtdparts device nand0 <tq2440-0>,# parts = 3 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |