This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] OMAP-L138:从 NAND 引导 OMAP L138 Linux

Guru**** 2543970 points
Other Parts Discussed in Thread: OMAP-L138

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/966169/omap-l138-omap-l138-linux-boot-from-nand

器件型号:OMAP-L138

您好!

我们拥有采用 OMAP-L138处理器设计的定制板。 因为软件是很久以前开发的、它使用以下版本的 SDK。

U-Boot 2009.11

内核3.10.12.


现在、我们尝试将其移植到最新的处理器 SDK (U-Boot 2019.01 内核4.19)、但我们仍卡在 u-boot 中。  我们已完成以下步骤来移植 uboot。

 移植的 DDR 配置

2.已配置初始最小引脚复用设置。

3. 更新了 SoC 时钟配置。

4.配置的调试 UART。

我们能够成功刷写 u-boot bin 和环境变量、如下所示

IN:串行
OUT:串行
ERR:串行
NET:未检测到 ETH PHY!!!
错误:以太网初始化失败!
板网初始化失败
DaVinci-EMAC
按任意键停止自动引导:0
=>
=>
=>
=>印刷版
args_mmc=run finduid;setenv bootargs console=${console}${optargets}root=PARTUUID =${uuid}rw rootfstype=${mmcrootfstype}
波特率=115200
BOOT_FDT=是
BOOT_FIT = 0
bootcmd=run envboot;运行 mmcboot;
BOOTDELAY=3.
bootdir=/boot
bootenvfile=uEnv.txt
BootFile=zImage
bootpart=0:2
bootscript=echo 正在从 MMC${mmcdev}...;源${loadaddr}运行的 bootscript
console=ttyS2,115200n8.
envboot=MMC dev ${mmcdev};如果 MMC 重新扫描;然后回显在器件${mmcdev}上找到的 SD/MMC;如果运行 loadbootscript;然后运行 bootscript;否则运行 loadbootenv;然后从${bootenvfile}回显已加载的 env;运行 importbootenv;fi;if test -n $uuccmd;然后运行 envenvcmd;envive...
ethact=Davinci-EMAC
ethaddr=88:27:E2:C7:24:17
fdtaddr=0xc0600000
fdtcontrolladdr=c7e1c480
fdtfile=da850-lcdk.dtb
finduuid=part uuid MMC ${bootpart}uuid
importbootenv=echo 从 MMC${mmcdev}导入环境...;env 导入-t ${loadaddr}${filesize}
loadaddr=0xc0700000
loadbootenv=fatload MMC ${mmcdev}${loadaddr}${bootenvfile}
loadbootscript=load MMC ${mmcdev}${loadaddr}boot.scr
loadfdt=load ${devtype}${bootpart}${fdtaddr}${bootdir}/${fdtfile}
loadimage=load ${devtype}${bootpart}${loadaddr}${bootdir}/${bootfile}
mmcboot=MMC dev ${mmcdev};setenv devnum ${mmcdev};setenv devtype MMC;如果 MMC 重新扫描;然后回显在器件${mmcdev}上找到的 SD/MMC;如果运行 loadimage;然后测试${boot_fit}-eq 1;然后运行 loadfit;否则运行 mmcovados;fi;fi;
mmcdev=0
mmclosados=run args_mmc;如果测试${boot_FDT}= yes ||测试${boot_FDT}=试用;如果运行 loadfdt;则 bootz ${loadaddr}-${fdtaddr};否则测试${boot_FDT}=试用;然后 bootz;否则、回显警告:无法加载 bootz;否则;fi;
mmcrootfstype=ext4 rootwait
scriptaddr=0xc0600000
ver = U-Boot 2019.01 (2020年12月22日- 09:59:33 +0530)

环境大小:1768/65532字节


自定义电路板的引导介质是用于 内核的 NAND、以及用于 uboot 的 rootfs 和 SPI 闪存。 但最新的 uboot 是为 EMMC 引导介质配置的。 如何将引导介质更改为 NAND 和 SPI。

当我尝试擦除 NAND 时、我会遇到以下错误

环境大小:1768/65532字节
=> SF 探头0
SF:检测到 m25p32、页面大小为256字节、擦除大小为64 KiB、总共4个 MIB
=> n 并擦除0x00000000 0x00780000

无可用器件

如何从 NAND 闪存加载 zImage 和 rootfs。  

请提供相同的解决方案。

谢谢、

Sharmila D

 

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sharmila、

    我们的 Linux 团队正在研究这个问题。 我们测试从 NAND 中的 uboot 加载。 您可以参阅 board/Davinci/da8xxevm/README.da850中的步骤

    从硬件角度看,您能否确认 NAND 闪存设置:

    您修改后的设计中使用了什么 NAND 闪存? ONFI 1.0是否与高达4位 ECC 支持兼容。

    是 Uboot 检测到的 NAND 闪存 Micron m25p32系列。 您能否检查是否支持标准"擦除"命令(有关说明、请参阅 NAND 数据表)

    3.您能否确认它已按照引导加载程序应用手册中的建议连接到 EMIFA CS[3]:

    NAND 闪存应连接到 EMIFA 外设的 EMA_CS[3]

     用于从 NAND 中引导 OMAPL!38的其他资源:

    http://software-dl.ti.com/processor-sdk-linux/esd/docs/latest/linux/Foundational_Components_U-Boot.html?highlight=omapl138#nand-boot

    https://training.ti.com/restoring-and-updating-u-boot-nand-omap-l138 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Rahul Prabhu、

    感谢您的回复。 NAND 现在正在 u-boot 中检测。 问题出在总线宽度。 我已配置为16位而不是8位。 更改总线宽度后、NAND 开始检测。 nand info 命令的输出如下所示

    => Nand 信息

    器件0:nand0、扇区大小为128 KiB
    页面大小2048 b.
    OOB 大小64 b
    擦除大小131072 b
    子页大小512 b
    选项0x40000000
    BBT 选项0x00028000

    现在、我尝试从 NAND 闪存加载内核。 执行的步骤如下所示

    1.使用 YMODEM 将 uImage 和 DTB 加载到 RAM 地址

    setenv 引导文件 uImage;loady 0xc2000000

    setenv fdtfile da850-lcdk.dtb;loady 0xC1F00000

    2. 将映像从 RAM 复制到 NAND 闪存  

    NAND 擦除0x20000 0x350000
    NAND 写入0xc2000000 0x20000 0x350000

    NAND 擦除0x380000 0x4EBE
    NAND 写入0xC1F00000 0x380000 0x4EBE

    3、 从 NAND 闪存中读取

    NAND 读取0xc2000000 0x20000 0x350000

    NAND 读取0xC1F00000 0x380000 0x4EBE

    4.按如下方式设置 bootargs

    setenv bootargs 'em=256M console=ttyS2,115200n8 root=/dev/mmcblk0p2 rw rootwait ellyprintk'

    保存

    5.使用以下命令启动

    Bootm 0xc2000000 - 0xC1F00000

    bootm 命令在"正在启动内核..."中挂起 。

    => bootm 0xc2000000 - 0xC1F00000
    ##从 c2000000的旧映像引导内核...
    映像名称:Linux 内核
    映像类型:ARM Linux 内核映像(未压缩)
    数据大小:3414464字节= 3.3 MIB
    载入地址:c2000000
    入口点:c2000000
    正在验证校验和... 好的
    c1f00000处##平展设备树状物
    使用0xc1f00000处的 FDT blob 进行引导
    正在加载内核映像... 好的
    正在将设备树加载到 c7dfd000,结束 c7e04dbd ... 好的

    正在启动内核...

    我觉得问题是 UART 配置或加载映像。

    我的 uImage 的 mkimage 输出如下所示

    $ mkimage -l uImage

    映像名称:Linux 内核
    创建时间:2020年12月30日19:53:38日
    映像类型:ARM Linux 内核映像(未压缩)
    数据大小:3414464字节= 3334.44 KB = 3.26 MB
    载入地址:c2000000
    入口点:c2000000

    请提供有关此问题的一些输入。

    期待您在方便时尽早与您取得联系。

    谢谢、

    此致、

    Sharmila