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.

[参考译文] Linux/AM3352:内核引导问题

Guru**** 2615655 points

Other Parts Discussed in Thread: AM3352

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/658579/linux-am3352-kernel-boot-issue

器件型号:AM3352

工具/软件:Linux

大家好、

第一版:

我们已经制作了一个具有 AM3352处理器、1GB DDR3和512MB NAND 闪存的定制板。 在我们的第一版定制板上、由于以太网部分的一些硬件问题、我们已开始 第二版的设置。   我们在第一个修订版中完成了 SD 卡引导。  

SYSBOOT: 0000001000110011 - NAND  NANDI2C MMC0 UART0

第二版:

我们已经制作了一个具有 AM3352处理器、1GB DDR3和8GB eMMC 闪存的定制板。 这是我们的第二版定制板。 更改在以太网部分中完成、并从 NAND 闪存更改为 eMMC 闪存。  

SYSBOOT: 0000000000110111 - MMC0  SPI0 UART0  USB0

但是,当我们使用相同的设置时,Booting 会在启动内核时挂起....  。  


问题出在哪呢?

必须在 U-boot 或内核中进行任何更改?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您使用的是哪种 Linux 版本? eMMC 连接在何处? 您是否仍然从第二块板上的 SD 卡引导?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Biser、

    1.您使用的是哪种 Linux 版本?

    Linux 版本- 4.4.41

    2. eMMC 连接在哪里?

    eMMC 连接到 MMC1

    SD 卡 连接到 MMC0

    3. 您是否仍从第二块板上的 SD 卡引导?

    是的。

    此致、

    Avinash N

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否在 u-boot 提示符中共享 bootlog 和 printenv 的输出?

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、在"正在启动内核..."处停止引导 通常表示 DTB 错误。 您是否还可以共享旧版本和新版本的 DTS?

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

    Yordan、您好!

    启动日志:

    U-Boot SPL 2017.11-rc3-00022-g43ede0b-m脏(2017年11月7日- 13:14:21)
    尝试从 MMC1引导
    ***警告- CRC 错误,使用默认环境

    正在读取 u-boot.img
    正在读取 u-boot.img
    正在读取 u-boot.img
    正在读取 u-boot.img


    U-Boot 2017.01-00319-geae4602-脏(2018年1月24日- 11:56:36 +0530)

    CPU:AM3352
    DRAM:1 GiB
    警告:未启用缓存
    MMC:OMAP SD/MMC:0、OMAP SD/MMC:1.
    ***错误-未找到有效的环境区域
    ***警告- CRC 错误,使用默认环境

    IN:串行@44e09000
    输出:串行@44e09000
    ERR:串行@44e09000
    未设置。 验证第一个电子保险丝 MAC
    NET:启用 MII 模式...完成。
    I = 5
    检测到 PHY ID = 0x221450
    PHY ID = 0x221450
    CPsw 连接到通用 PHY
    CPsw
    按任意键停止自动引导:0
    =>
    =>
    =>引导
    切换到分区#0,确定
    mmc0是当前器件
    在器件0上找到 SD/MMC
    正在读取 BOOT.SCR
    **无法读取文件 boot.scr **
    正在阅读 uEnv.txt
    **无法读取文件 uEnv.txt **
    切换到分区#0,确定
    mmc0是当前器件
    正在扫描 MMC 0:1...
    切换到分区#0,确定
    mmc0是当前器件
    在器件0上找到 SD/MMC
    在495ms (5.9 mB/s)内读取3049432字节
    35ms 内读取的35428字节(996.1 KiB/s)
    ###展开的设备树 blob、88000000
    使用0x88000000处的 FDT blob 进行引导
    正在将设备树加载到8fff4000,结束8ffb8f... 好的

    正在启动内核...

    2.打印机:

    arch = ARM
    args_mmc=run finduid;setenv bootargs console=${console}${optargets}root=PARTUUID =${uuid}rw rootfstype=${mmcrootfstype}
    波特率=115200
    Board_name=A335BNLT
    Board_rev=000c
    Board_serial=1315BBBK1334
    boot_a_script=load ${devtype}${devnum}:${distro_bootpart}${scriptaddr}${prefix}${script};source ${scriptaddr}
    boot_efi_binary=load ${devtype}${devnum}:${distro_bootpart}${kernel_addr_r}efi/boot/bootarm.EFI;如果 fdt addr ${fDT_addr_r};则 bootefi ${kernel_addr_r}${fdt_addr_r}${ddr_addr_r}
    ontroladdr};fi
    boot_extlinux=sysboot ${devtype}${devnum}:${distro_bootpart}任何${scriptaddr}${prefix}extlinux/extlinux.conf
    BOOT_FDT=尝试
    BOOT_FIT = 0
    BOOT_NET_USB_START=USB 启动
    boot_nars=//boot/
    boot_script_dhcp=boot.scr.uimg
    boot_scripts=boot.scr.uimg boot.scr
    boot_targets=mmc0 legacy_mmc0 mmc1 legacy_mmc1 nand0 PXE DHCP
    bootcmd=if test ${boot_fit}-eq 1;然后运行 update_to _fit;fi;运行 findfdt;运行 init_console;运行 envboot;运行 distro bootcmd
    bootcmd_dhcp=run boot_net_usb_start;如果 DHCP ${scriptaddr}${boot_script_dhcp};则源${scriptaddr};fi;setenv efi_fdtfile ${fdtfile};如果 test -z "${fdtfile}"-a -n "${soc}";然后是 EFI setv 文件
    soc }-->{board}${boardver}.dtb;fi;setenv efi_old_dr ${bootp_vci};setenv efi_old_arch${bootp_arch};setenv bootp_vci vci eclient:arch:00010:UNDI:003000;setenv eftbootp_arch 0xA;if dhcp_adp;then ${kernel_adp}
    启动${FDT_addr_r}dtB/${EFI_fdtfile};如果 FDT addr ${FDT_addr_r};则启动${kernel_addr_r}${FDT_addr_r};否则启动${kernel_addr_r}${fdtf_addr_r}${fpodr};设置 vci vci;vci
    P_ARCH${EFI_OD_ARCH};setenv EFI_fdtfile;setenv EFI_OD_ARCH;setenv EFI_OD_VCI;
    bootcmd_legacy_mmc0=setenv mmcdev 0;setenv bootpart 0:2;运行 mmcboot
    bootcmd_legacy_mmc1=setenv mmcdev 1;setenv bootpart 1:2;运行 mmcboot
    bootcmd_mmc0=setenv devnum 0;运行 MMC_boot
    bootcmd_mmc1=setenv devnum 1;运行 MMC_boot
    bootcmd_nand=运行 nandboot
    bootcmd_PXE=运行 boot_net_usb_start;DHCP;如果 PXE 获得;然后是 PXE 引导;fi
    BOOTCOUNT=1
    BOOTDELAY=2
    bootdir=/boot
    bootenvfile=uEnv.txt
    BootFile=zImage
    BOOTM_SIZE=0x10000000
    bootpart=0:2
    bootscript=echo 正在从 MMC${mmcdev}...;源${loadaddr}运行的 bootscript
    console=ttyO0、115200n8
    CPU=armv7
    DFU_alt_INFO_eMMC=rawemmc RAW 0 3751936
    dfu_alt_info_mmc=boot part 0 1;rootfs part 0 2;mlo fat 0 1;ml.raw 0x100 0x100;u-boot.img.raw 0x300 0x400;spl-os-args.raw 0x80 0x80;spl-os-image.splraw 0x900;spl-os-args-os -args 0x2000;spl-os-args;fat 0
    Age fat 0 1;u-boot.img fat 0 1;uEnv.txt fat 0 1
    dfu_alt_info_nand=SPL 零件0 1;SPL.Backup1零件0 2;SPL.Backup2零件0 3;SPL.Backup3零件0 4;u-boot 零件0 5;u-boot-spl-OS 零件0 6;内核零件0 8;rootfs 零件0 9
    dfu_alt_info_ram=内核 ram 0x80200000 0x4000000;fdt ram 0x80f80000 0x80000;ramdisk ram 0x81000000 0x4000000
    distro_bootcmd=用于${boot_targets}中的目标;请运行 bootcmd_${target};完成
    EFI_dtb_nefins=//dtb//dtb/current
    envboot=MMC dev ${mmcdev};如果 MMC 重新扫描;然后回显在器件${mmcdev}上找到的 SD/MMC;如果运行 loadbootscript;然后运行 bootscript;否则运行 loadbootenv;然后从${bootenvfile}回显加载的 env;运行 importboo
    tenv;fi;如果测试-n $uenvcmd;然后回显正在运行的 uenvcmd ...;运行 uenvcmd;fi;fi;fi;fi;fi;
    eth1addr=38:D2:69:AC:d0:BD
    ethact=cpsw
    ethaddr=38:d2:69:ac:d0:bb
    FDT_addr_r=0x88000000
    fdtaddr=0x88000000
    fdtcontrolladdr=bdf45780
    fdtfile=未定义
    findfdt=if test $board_name = A335BONE;then setenv fdtfile AM335x-bon.dtb;fi;if test $board_name = A335BNLT;then setenv fdtfile AM335x-bonebine.dtb;fi;if test $board_name = BBG1;then setdtv 文件
    AM335x-bonegreen.dtb;fi;如果测试$board_name = A33515BB;然后 setenv fdtfile AM335x-EVM.dtb;fi;如果测试$board_name = A335X_SK;然后 setenv fdtfile AM335x-evmsk.dtb;如果测试的名称= a335_ice_sk
    n setenv fdtfile am335x-icev2.dtb;fi;如果 test $fdtfile = undefined;则回显警告:无法确定要使用的设备树;fi;
    finduuid=part uuid MMC ${bootpart}uuid
    fit_bootfile=fitImage
    fit_loadaddr=0x87000000
    importbootenv=echo 从 MMC${mmcdev}导入环境...;env 导入-t ${loadaddr}${filesize}
    init_console=if test $board_name = a335_ice;然后 setenv 控制台 ttyO3、115200n8;否则 setenv 控制台 ttyO0、115200n8;fi;
    kernel_addr_r=0x82000000
    load_efi_dtb=load ${devtype}${devnum}:${distro_bootpart}${fDT_addr_r}${prefix}${efi_fdtfile}
    loadaddr=0x82000000
    loadbootenv=fatload MMC ${mmcdev}${loadaddr}${bootenvfile}
    loadbootscript=load MMC ${mmcdev}${loadaddr}boot.scr
    loadfdt=load ${devtype}${bootpart}${fdtaddr}${bootdir}/${fdtfile}
    loadfit=run args_mmc;bootm ${loadaddr}#${fdtfile};
    loadimage=load ${devtype}${bootpart}${loadaddr}${bootdir}/${bootfile}
    loadramdisk=load MMC ${mmcdev}${rdaddr}ramdisk.gz
    MMC_BOOT=if MMC dev ${devnum};然后 setenv devtype MMC;运行 scan_dev_for_boot_part;fi
    mmcboot=MMC dev ${mmcdev};setenv devnum ${mmcdev};setenv devtype MMC;如果 MMC 重新扫描;然后回显器件${mmcdev}上的 SD/MMC;如果运行 loadimage;然后测试${boot_fit}-eq 1;然后运行 loadfit;否则运行
    mmcloados;fi;fi;fi;
    mmcdev=0
    mmclaros=run args_mmc;如果测试${boot_FDT}= yes ||测试${boot_FDT}=试用;如果运行 loadfdt;则 bootz ${loadaddr}-${fdtaddr};否则测试${boot_FDT}=试用;然后是 bootz;否则、回显警告:无法加载
    dT;fi;fi;else bootz;fi;
    mmcrootfstype=ext4 rootwait
    mtdds=nand0=nand.0
    mtdparts=mtdparts=nand.0:128k (NAND.SPL)、128k (NAND.SPL.Backup1)、128k (NAND.NANT.Backup2)、128k (NAND.NANT.Backup3)、256k (NAND.u-boot-spl)、1m (NAND-boot)、128k (NAND-Boot)、8nA (NAND-Boot)、128k (NAND-v-v-v-v-v-v-boot.1m (v-v-v-v-nA)
    Nd.kernel)、-(NAND.file-system)
    nandargs=setenv bootargs console=${console}${optargets}root=${nandroot}rootfstypy=${nandrootfstype}
    nandboot=echo Booting from nand ...;运行 nandargs;nand read ${fdtaddr}nand.u-boot-spl-OS;nand read ${loadaddr}NAND.kernel;bootz ${loadaddr}-${fdtaddr}
    nandroot=ubi0:rootfs rw ubi.mtd=NAND.file-system、2048
    nandrootfstype=ubifs rootwait=1
    netargs=setenv bootargs console=${console}${optargets}root=/dev/nfs nfsroot=${serverip}:${rootpath}、${nfsopts}RW IP=DHCP
    netboot=echo Booting from network...;setenv autoload no;dhcp;run netloadimage;run netloadfdt; 运行 netargs;bootz ${loadaddr}-${fdtaddr}
    netloadfdt=tftp ${fdtaddr}${fdtfile}
    netloadimage=tftp ${loadaddr}${bootfile}
    nfsopts=nolock
    partitions=uuid_disk=${uid_gppt_disk};name=rootfs、start=2MiB、size=-、uid=${uid_gppt_rootfs}
    pxefile_addr_r=0x80100000
    ramargs=setenv bootargs console=${console}${optargets}root=${ramroot}rootfstypy=${ramrootfstype}
    ramboot=echo 从 ramdisk 引导...;运行 ramargs;bootz ${loadaddr}${rdaddr}${fdtaddr}
    ramdisk_addr_r=0x88080000
    ramroot=/dev/ram0 rw
    ramrootfstype=ext2
    读数地址= 0x88080000
    rootpath=/export/rootfs
    scan_dev_for_boot=echo 扫描${devtype}${devnum}:${distro_bootpart}...;用于${boot_drefix}中的前缀;运行 scan_dev_for_extlinux;运行 scan_dev_for_scripts;完成;运行 scan_dev_for_EFI;
    scan_dev_for_boot_part=part list ${devtype}${devnum}-bootable devplist;env 存在 devplist || setenv devplist 1;用于${devplist}中的 distro_bootpart;如果 fstype ${devtype}${devnum}:${distro_bootpart}、请执行
    otfstype;然后运行 scan_dev_for_boot;fi;完成
    scan_dev_for_efi=setenv efi_fdtfile ${fdtfile};如果测试-z "${fdtfile}"-a -n "${soc}";则 setenv efi_fdtfile ${soc}-${board}${boardver}.dtb;fi;如果是${efix _dtb}、则为前缀;如果是${eft dt_dtb}-tb、则为${tb
    ${devnum}:${distro_bootpart}${prefix}${efi_fdtfile};然后运行 load_efi_dtb;fi;done;if test -e ${devtype}${devnum}:${distro_bootpart}efi/bootar.EFI;然后找到可移动 EFI 介质二进制/b
    ot/bootarm.EFI;运行 boot_efi_binary;回显 EFI 加载失败:继续...;fi;setenv efi_fdtfile
    scan_dev_for_extlinux=if test -e ${devtype}${devnum}:${distro_bootpart}${prefix}extlinux/extlinux.conf;然后回显找到${prefix}extlinux/extlinux.conf;运行 boot_extlinux;回显脚本失败:继续...
    ;fi
    scan_dev_for_scripts=用于${boot_scripts}中的脚本;如果测试-e ${devtype}${devnum}:${distro_bootpart}${prefix}${script}、则执行;然后回显找到的 U-Boot 脚本${prefix}${prefix}${prefix};运行 boot_a_script;回显脚本
    失败:继续...;fi;完成
    脚本地址=0x80000000
    SoC=am33xx
    args=setenv bootargs console=${console}${optargets}root=${spiroot}spifstypy=${rootrootfstype}
    spiboot=echo Booting from SPI ...;运行 spiargs;SF 探测器${spibusno}:0;SF 读取${loadaddr}${spisrcadr}${spiimgsize};bootz ${loadaddr}
    spibusno=0
    spiimgsize=0x362000
    spiroot=/dev/mtdblock4 rw
    rootspifstype=jffs2.
    spisrcaddr=0xe0000
    static_ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off
    stderr=串行@44e09000
    stdin =串行@44e09000
    stdout=串行@44e09000
    update_TO_fit=setenv loadaddr ${fit_loadaddr};setenv 引导文件${fit_bootfile}
    USB_boot=USB start;如果 USB dev ${devnum};则 setenv devtype USB;运行 scan_dev_for_boot_part;fi
    USBnet_devaddr=38:D2:69:ac:d0:bb
    ver=U-Boot 2017.01-00319-geae4602-niT脏(2018年1月24日- 11:56:36 +0530)

    环境大小:9097/131067字节

    3. dtb:

    我们对新旧电路板使用相同的 DTB。

    此致、
    Avinash N

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

    [引述]3. DTB:

    我们对新旧电路板使用相同的 DTB。[/QUERP]

    您应该更改 DTS 文件以匹配您的新板、这反映了硬件更改:
    "我们已经制作了一个具有 AM3352处理器、1GB DDR3和8GB eMMC 闪存的定制板。 这是我们的第二版定制板。 更改在以太网部分中完成、并从 NAND 闪存更改为 eMMC 闪存。 "

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

    Yordan、您好!

    在 DTB 中必须执行哪些更改。 在我们的第二个修订板中、我们启用了 eMMC 闪存部分。  

    您能否为启用 eMMC 的 DTB 文件提供任何样本 DTB。

    此致、

    Avinash N

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

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

    Yordan、您好!

    我已附上 DTS 和 dtsi filese2e.ti.com/.../U_2D00_BOOT_5F00_DTS.zip。  

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

    DTS 看起来不错。 您能否确认您没有修改电路板中的任何其他内容(某些电源或类似的内容)?

    您能否在 menuconfig 中启用早期调试打印:
    内核黑客攻击->
    [*]内核低级调试函数
    [*]早期打印

    此致、
    Yordan