u-boot2010.06的移植(5)——支持nandflash、分区及环境参数的设
发布时间:2020-12-15 07:20:10 所属栏目:百科 来源:网络整理
导读:nandflash应该算是研究了很长时间了,但是还是有的地方没搞懂,有知道的大侠还望不吝键盘。 我用的是K9F2G08U0A,貌似第三节已经介绍过了。在此不费口舌。直接切入重点难点。 在此移植过程中,犯了一个低级的错误,导致我花了半年的时间捣鼓nand(有点夸张哈
nandflash应该算是研究了很长时间了,但是还是有的地方没搞懂,有知道的大侠还望不吝键盘。
我用的是K9F2G08U0A,貌似第三节已经介绍过了。在此不费口舌。直接切入重点难点。 在此移植过程中,犯了一个低级的错误,导致我花了半年的时间捣鼓nand(有点夸张哈 ),马虎害死人啊。 s3c 2440和s3c2410的nand寄存器不一样,需要拿两者的芯片对照修改。寄存器不一样导致了底层寄存器操作不一样。需要修改其底层函数。主要修改的初始化函数和读写 控制?函数。 初始化函数:对于下面的代码,需要注意的是局部变量cfg的初始化,因为cfg要被写入NFCONF寄存器中,若不初始化,根据c语言知识,他会是一个不确定的数,写入寄存器的话会干扰寄存器其他位。 点击(此处)折叠或打开
点击(此处)折叠或打开
2410的原始代码是这样的: 点击(此处)折叠或打开
Skipping bad block at ?0x00000000 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Skipping bad block at ?0x00020000 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Skipping bad block at ?0x00040000 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Skipping bad block at ?0x00060000 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Skipping bad block at ?0x00080000 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Skipping bad block at ?0x000a0000 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Skipping bad block at ?0x000c0000 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Skipping bad block at ?0x000e0000 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Skipping bad block at ?0x00100000 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Skipping bad block at ?0x00120000 ... ... 出现此现象的原因还不是很清楚,没有查到什么样的具体操作会导致这个。只能先暂时总结下出现此现象的解决办法了: 1、网上说的,nand scrub。 2、刚才我说的,底层函数不对。 3、环境参数不对。在配置文件smdk2440.h中,有几个关于环境参数的宏,定义了环境参数的保存地址,用于执行saveenv时保存在flash的一块区域中。通过查找 do_saveenv()函数,可知道,如果要环境参数保存在nor中,要定义 #define CONFIG_ENV_IS_IN_FLASH 1 以及相关的宏,如果环境参数要保存在nand中,就定义#define CONFIG_ENV_IS_IN_NAND 1 以及相关函数。 暂时修改为下: #define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x070000) /* addr of environment */ #define CONFIG_ENV_IS_IN_FLASH 1 #define CONFIG_ENV_SIZE 0x10000 /* Total Size of Environment Sector */ 将上述宏改为 #define CONFIG_ENV_IS_IN_NAND 1 #define CONFIG_CMD_SAVEENV #define CONFIG_ENV_OFFSET 0X40000 #define CONFIG_ENV_RANGE CONFIG_ENV_OFFSET #define CONFIG_ENV_SIZE 0x20000 /* Total Size of Environment Sector */ 之所以说“暂时”是因为还没有给nand分区,所以还不能执行saveenv命令,因为执行saveenv可能会破坏代码的结构。shell中查看分析信息用mtdparts,u-boot还没此命令,需要在源码里添加,具体的添加过程比较简单,略了。分区信息如下: 256k(u-boot),128k(params),4m(kernel),-(rootfs) 仅供参考。 分区完后再裁剪(这个u-boot已经很小了,也就没裁剪),才能设置环境参数的这几个宏。可以计算得到,存放参数的这块区域起始地址以及大小。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |