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/66AK2G12:SD 引导在退出时挂起(&quot);等待根设备(&quot);

Guru**** 2551110 points
Other Parts Discussed in Thread: 66AK2G12

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/802042/linux-66ak2g12-sd-boot-hangs-on-waiting-for-root-device

器件型号:66AK2G12

工具/软件:Linux

您好!

我有一个使用66AK2G12的定制设计。  我们将 Linux SDK 5与 U-Boot 2018.01和 Linux 4.14.40搭配使用。  我让系统从 SD 卡接口(MMCSD0)加载 U-Boot。 从 U-Boot 中、我可以将引导文件加载到存储器中并引导 Linux、但内核引导会在"等待根设备 PARTUUUUUUUUID=239df219-02..."处挂起。

我在其他论坛帖子中看到、这个问题通常是由芯片检测问题引起的。 (https://e2e.ti.com/support/processors/f/791/t/553707)

由于设计限制、本设计中没有芯片检测线。  我已向设备树节点添加了 broken-cd,尝试绕过此操作,但从 SD 卡加载 rootfs 失败。

该卡使用 SDK 提供的工具进行了格式化,并包含用于 U-Boot 的 FAT 分区和用于 rootfs 的 EXT3分区。

我的 bootargs 是 bootargs=console=ttyS0、115200n8 ignore_loglevel root=PARTUUID =239df219-02 RW rootfstype=ext3 rootwait

附件是我的引导日志。

如果您能提供任何指导来说明我的系统为何不能识别 rootfs、我们将不胜感激。  如果需要其他信息、请告诉我。

谢谢、

Jeffe2e.ti.com/.../0412.bootlog.txt

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

    我将查看日志并提供我的输入。
    您是否还可以为您的电路板共享 DTS 文件? 如果无法共享整个 DTS、则只需使用与 mmcsd 相关的数据块(pinmux 和设置以及用作 CD 信号的 GPIO 都可以)。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外,如果您可以在 u-boot 中共享 printenv 的输出,也会很有用。

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

    对于 CD 信号、您可以尝试并破解 sdhci.c 驱动程序、以认为 CD 信号存在:
    /*首先检查卡是否存在*/
    Present = MMMC->ops->get_CD (MMC);

    从您的日志中、我还可以看到以下错误消息:
    [6.074430] mmc0:硬件不报告任何支持电压。
    来自 sddhci.c. 确保 DTS 定义了 SD 卡电压、您可以参阅 k2g EVM DTS 节点:
    mmc0{(&M)
    pinctrl-names ="default";
    pinctrl-0 =<&mmc0_PINs>;
    VMMC-supply =<&vcc3v3_dcin_reg>;
    vqmmc-supply =<&vcc3v3_dcin_reg>;
    CD-GPIO =<&GPIO1 12 GPIO_ACTIVE_LOW>;
    状态="正常";
    };

    vcc3v3_dcin_reg:fixedreguler-vcc3v3-dcin{
    兼容="稳压器固定";
    稳压器名称="mmc0_fixed";
    稳压器最小微伏=<3300000>;
    稳压器最大值微伏=<3300000>;
    稳压器常开;
    };

    此外、请深入了解内核源代码、以了解以下 WP 警告:
    [6.048334] of_get_named_gpio_FLAGS:无法解析节点'/soc/mmc@230000[0]的'wP-GPIO'属性
    [6.064077] sdhci-OMAP 23000.mmc:查找 GPIO WP 失败
    [6.069992] sdhci:未设置写保护标志
    这不应该很重要、但要确保不设置 WP。

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

    Yordan、

    我已将 Get_CD 的所有实例更改为"true"分配、但系统仍无法引导。  有趣的是、添加稳压器后、有关支持电压的警告仍然存在。  我将不断挖掘并在此处发布我的发现。

    我已附上我的 DTS 和 u-boot 环境供您查看。

    谢谢、

    Jeffe2e.ti.com/.../3364.filesForForum.zip

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

    我在内核启动序列期间启用了动态调试、并找到了一些更有用的信息。  我不确定所有这一切意味着什么、但看起来器件可能未正确加电。  此处显示了 bootlog 的 SDMMC 相关部分:

    [12.153252] PM:移动平台:23000000.MMC 到列表末
    尾[12.153257]平台23000000.MMC:从延迟列表中重试
    [12.153517]总线:'platform':driver_probe_device:matched device 23000000.OMAP with driver sdhci-mctrl
    [12.153527]总线:'platform':reform_probe:reprobe_mce_probe:12.230000.mmctrampinx.0_mc1000 mctrampinx.0[12.15230.mmctrl_mctrampinx.0]
    0x120002
    [12.15351] pinctrl-single 2621000.pinmux:pinmux_mmc0_pins 索引:0x314值:0x120002
    [12.153578] pininctrl-single 262100.pinmux:pinmux_mmc0_pinmc0_pinmu02
    :0x120002 [12.153585] pinmux_pinmux pinmutrl:0x3001.pinmux pinmux pinmux
    
    :0x3000-pinmux pinmux pinmux pinmux:0x3002.pinmux pinmux pinmux pintrl:0x3002.pinmux pinmux pinmux pin32.0_pinmux pinmux pinmux pin32.0_pinmux pinmux
    添加1个 pinctrl 映射
    [12.153633] pinctrl-single 2621000.pinmux:找到 pinmux_mmc0_pins
    [12.153641] sdhci-OMAP 23000000.MMC:无初始化 pinctrl 状态
    [12.153650] pinc197-single 2621000.pinmux:请求单个 IN262196] pintrl [12.15362.pintrl] p2196]
    pintrl [12.26160.pintrl [12.26160.mc1.mc1.mc1.mctrl:请求单个 IN2196] pintrl [12.26160.pintrl [12.26160.pin p
    请求23000000.mmc 的引脚195 (PIN195)
    [12.153668] pinctrl-single 262100.pinmux:请求23000000.mmc 的引脚194 (PIN194)
    [12.153673] pinctrl-single 262100.pinmux:请求23000000.mmc 的引脚193 (PIN193)
    [12.153192] pintrl-368421.pintrl
    (pinmctrl):请求单个引脚261000.pinmu.mcr (pin261001.pinmux:请求单个引脚192] pin261001.mctrl 引脚261000.pin160.pinmux:请求单个引脚192] pinmc1.mc
    无睡眠 pinctrl 状态
    [12.153700] sdhci-OMAP 23000.MMC:无空闲 pinctrl 状态
    [12.153712]的说明:**器件/soc/mmc@23000000 **
    [12.153721]的翻译:/soc
    [12.153730]上的总线默认值(na=1、ns=1)[ 12.153730]的说明:父总线默认值(na=2、12.15372ns
    )、[12.372ns、[12.3724]的范围:
    [ 12.153739]、共:默认映射、CP=8000000000、s=8000000000、da=80000000
    [ 12.153742]共:偏移量:0
    [ 12.153746]共:到达根节点
    [ 12.153751] DMA_addr (80000000) CPU_adci (800000000)大小(8000000)(823000000
    
    ) MMc)非相干 OMAP-300000.153700M [12.153768]
    器件不在 iommu
    [ 12.153791] devices_kset 之后:将23000000.MMC 移至列表末
    尾[12.153811] sdhci-OMAP 23000000.mmc:添加到 PM 域 ti_sci_pd
    [12.153816] sdhci-OMAP 23000000.mmc:genpd_add_device ()[12.165070=0x0000.mc2]0x0000=0x0000.mc2=0x0000.mc2=0x0000.mc2=0x0000.mc2=0x0000.mc
    主机掩码[0x0000=0x0000.mc24=0x0000.00012=0x0000.mc2=0x0000.mc
    
    [12.165149]、共:of_IRQ_parse_one:dev=/soc/mmc@23000000、index=0
    [12.165167]、共:parent=/interrupt-controller@
    
    @02561000、intsize=3 [ 12.165173]、共:of_IRQ_186_raw:ipars=/interrupt-size = 3[12.165173]、
    
    共:[12.165179]、dr = 12.1651000<= 12.165179]、共:
    [12.165238] sdhci-OMAP 23000000.MMC:GPIO 查找消费者 WP
    [12.165243] sdhci-OMAP 23000000.MMC:使用器件树进行 GPIO 查找
    [12.165254] of_get_named_gpio_FLAGS:无法
    解析节点'/soc/mmc@/soc/mmc@23000000[0]的'wP-gpio'属性[12.5266]_gpio'[12.165261]:无法解析节点's_de_gp20000.[12.52400_g_gp_gp'[12.162400]_g_g_gp_gp'[12.51651651624]的'_gp_gp_gp_gp_g
    使用查找表进行 GPIO 查找
    [12.165272] sdhci-OMAP 23000000.mmc:查找 GPIO WP 失败
    [12.165307]、其中:比较 fck 与 fck
    [12.165327] sdhci-OMAP 23000000.mmc:无法获取 pbias 稳压器-19
    [12.165359] sdhcq-2123ti.mmc:0x000000 mc=0x24000=0x10000_mc=0x2900_mc=1210000_mc=1210000_shd_mc=0x240001000.mc=0x10000_g=0x10000_mc=0x24000100b_sh_shr_g=0x24000100b_g=0x100b_g=0x24
    
    超出恢复延迟、53542ns
    [ 12.165427] sdhci:未设置写保护标志
    [ 12.165433] sdhci-OMAP 23000000.mmc:未找到 VMMC 稳压
    器[ 12.165438] sdhci-OMAP 230000.mmc:未找到 vqmmc 稳压器
    [ 12.165444] mmc0:sdhci:版本:0x000000
    :0x000000 mmcap:0x0000.0002400] mmcap:0x0000.0001mmc00:0x0000.0001mmc00:0x0000.0001c00:0x0000.0001 0x20e90080 | Caps_1:0x00000f77
    [ 12.165463]:CMA_alloc (CMA c108ac28、count 1、align 0)
    [ 20.621924] CMA:CMA_alloc ():returned d7f89900
    [ 20.626498] mmc0:sshci:Auto-CMD23 unavailable
    [ 20.631924] MMc6不
    支持硬件压轮询[20.636]。mmc6:mmc6不支持硬件压降[20.63669610]
    [ 20.642541] CMA
    
    
    
    清理:CMA_RELEASE (page d7f89900)[ 20.646738] sdhci-OMAP 23000000.MMC:genpd_runtime_suspend ()[ 20.652434] ti-sci 2921c00.PMMC:MSGHDR:type=0x0200 host=0x00 seq=0x00 flags=0x66000flags=0x6700s=0x00000006400032]
    (超过)对象[20.67603900](mc206700ms)[20.67604ms:[206700_mc206700](超过)[206760243600_mc2060243600](mc0](超过)[2060d100mc2060d100ms)[206760d100ms:[120]
    个对象:[120](mc206760d 空闲名称
    [ 20.683501] sdhci-OMAP 23000000.mmc:从 PM 域 ti_sci_pd
    [ 20.690031] sdhci-OMAP 23000000.mmc:genpd_remove_device()
    [ 20.695553] kernfs 23000000.mmc:删除
    [20.699578] kernfs 驱动程序:删除
    [20.7030189.mmc 拒绝匹配[mmc-dhci-probe 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我能够使用以下更改使系统引导:

    在文件 sdhci-omap.c 中、函数 sdhci_omap_set_Capabilities 我注释掉了行"if (regulator _is_supported_voltage (vqmmc、IOV_3V3、IOV_3V3)"以强制向权能寄存器添加 CAPA_VS33。

    我不确定这一变化是否会产生负面影响。 我还注意到、器件树的更改似乎不会更改驱动程序报告的功能。 我想使用一些功能、但我看不出进行更改、如"broken CD (中断 CD)"和"disable-wP"会有任何效果。 我想禁用任何挂起功能、禁用写保护和禁用卡检测。

    详细调试显示了一些更多信息、但我不确定它是否会导致任何问题。

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

    SD 不支持"B中断-CD"和"disable-wP"条目、这就是它们不会产生任何效果的原因。

    至于强制使用 CAPA_VS33、这只是增加了3.3V 支持。 这不应导致 MMC 出现问题、因为 K2G EVM DTB 接口实际使用3.3V 电源。

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

    好的、谢谢。   

    我的主要问题是驱动程序未找到 VMMC 和 vqmmc 稳压器。  我觉得这可能是一个更深层次的问题。  我更喜欢使用器件树修复此问题、这样我就不必在每次升级到新 SDK 时修改驱动程序。

    Jeff