u-boot 2016.03支持nand flash boot

工作背景:

目标板:imx6ul SOC+底板    u-boot:uboot2016.03

nand flash: Micron MT29F8G08ABABAWP 1G

kernel启动过程中关于nand flash的打印信息如下:

===============================

nand: device found, Manufacturer ID: 0x2c, Chip ID: 0x38
nand: Micron MT29F8G08ABABAWP
nand: 1024 MiB, SLC, erase size: 512 KiB, page size: 4096, OOB size: 224
gpmi-nand 1806000.gpmi-nand: enable the asynchronous EDO mode 4

Scanning device for bad blocks
8 ofpart partitions found on MTD device gpmi-nand
Creating 8 MTD partitions on "gpmi-nand":
0x000000000000-0x000000800000 : "boot"
0x000000800000-0x000000a00000 : "logo"
0x000000a00000-0x000000b00000 : "ENV"
0x000000b00000-0x000000e00000 : "DTB"
0x000000e00000-0x000001600000 : "kernel"
0x000001600000-0x000001700000 : "DTBbak"
0x000001700000-0x000001f00000 : "kernelbak"
0x000001f00000-0x000040000000 : "rootfs"

gpmi-nand 1806000.gpmi-nand: driver registered.

===================================

但是u-boot 2016.03在引导OS启动过程中关于nand flash 会有如下报错:

NAND read from offset 600000 failed -74

*** Warning - readenv() failed, using default environment

NAND read from offset 800000 failed -74

0 bytes read: ERROR

NAND read from offset e00000 failed -74

0 bytes read: ERROR

NAND read from offset b00000 failed -74

0 bytes read: ERROR

从打印信息的read error 来看,是我们从nand flash的 每个偏移位置都没有读到有效数据,

但是执行md 0x80800000 0x100 会发现已经从flash(这样测试的是0xb00000偏移位置读)读出数据到ram了,部分读出数据如下:


跟踪到这步我依然不确定问题出现在那了,

接下来,我将整个uboot擦除:

=> nand erase.chip

之后在uboot中就可以正确读取nand flash 中的数据。


擦除过程就是写入全ff,所以读取均是ff。


当我将u-boot 2016.03源码根目录下的文件include/configs/mx6ul_14x14_evk.h 做如下修改后:

第一条报错问题解决。

事实上我在kernel中(dts中)对nand flash进行了分区,我在u-boot的env中将flash分区规划同kernel中对mtd 分区规划保持一致。

但是u-boot对nand 的每一个物理偏移的读 都不正确。

----------------------------------------------------------------------------------------------------------

事实上,以上我所描述的问题,对于我来说是个必然,原因是我没有搞清楚 nand 控制器 hw ecc/soft ecc的原理。我是SD卡引导烧写的:ramdisk(而且我是用的linux 3.14.18版SDK中的ramdisk) 中通过linuxrc 脚本进行的flash erase/nand write,reset/reboot后进行的nand read,也即是写入的ecc和我读出的ecc不一致。上来饶了一大圈,瞎搞,无知者要命。

继续我以下正确的调试步骤:

1. 将要烧写到nand flash上的image loading to SD card, 在u-boot 2016.03中进行如下操作:


2. 

3. 


4. 


5. 


发现在u-boot中对裸设备(不带任何fs)nand进行write/read是没有failed -74的问题的,证明了NXP提供的u-boot 2016.03中的nand flash驱动是没问题,ecc逻辑也是没问题的,不用在扎到源代码中出不来了!!!

在u-boot中更新dtb和kernel,事先我将rootfs已经解压到nand flash的第7的分区:

update kernel:


update dtb:


=> run nandargs

=> run bootnand

本篇到此结束哈哈!

给自己的关键提示:核心原理不明确,以及工作习惯有时会给自己带来灾难,老妈子我歇了三年,快把自己歇菜了,必须得加快进步速度!

并且时刻想着分析代码时、运行时问题。






  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
u-boot-2016.11.tar.bz2是一个开源软件项目的压缩文件。该压缩文件是u-boot引导加载程序的源代码和相关文件的打包形式。u-boot(Universal Bootloader)是一款用于嵌入式系统的开源引导加载程序,用于初始化硬件并启动操作系统。 u-boot-2016.11.tar.bz2文件的扩展名.tar.bz2表示它是使用tar和bzip2两种工具进行压缩的。.tar是一个常用的文件打包工具,它可以将多个文件和目录打包成一个文件。.bz2是一个压缩工具,可以将文件进行高效压缩。 要使用u-boot-2016.11.tar.bz2文件,首先需要将其解压缩。可以使用tar命令进行解压缩,命令为tar -xjf u-boot-2016.11.tar.bz2。这将解压缩文件,并将源代码和其他相关文件提取到当前目录下。 解压缩后,可以在提取出的文件中找到u-boot引导加载程序的源代码和相关文件。可以根据需要进行定制和编译,生成适合特定硬件平台的引导加载程序。u-boot支持多种处理器架构和开发板,可以根据需要进行配置。 根据u-boot-2016.11.tar.bz2文件的版本号来看,它是2016年11月发布的版本。这意味着该版本已经存在一段时间,并可能具有稳定性和经过验证的特性。对于需要使用u-boot的开发者和嵌入式系统制造商,这个版本可以作为一个可靠的基础进行开发和定制。 总之,u-boot-2016.11.tar.bz2是u-boot引导加载程序的源代码和相关文件的压缩包。解压缩后,可以通过定制和编译源代码,生成适合特定硬件平台的引导加载程序。这个版本已经存在一段时间,并可能具有可靠的特性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值