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.

[参考译文] AM625:将 U-Boot 控制台从 UART0更改为 UART4

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1240439/am625-changing-u-boot-console-from-uart0-to-uart4

器件型号:AM625

您好!

我们的定制板将使用 UART4作为串行控制台。
由于电路板尚未完成、我们正在使用 AM62x-SK EVM 进行实验。

我们对 U-Boot 的 DTS 进行了如下修改:

diff --git a/sdk/u-boot/arch/arm/dts/k3-am62x-sk-common-u-boot.dtsi b/sdk/u-boot/arch/arm/dts/k3-am62x-sk-common-u-boot.dtsi
index b57d9563d87..51397bfdfdd 100644
--- a/sdk/u-boot/arch/arm/dts/k3-am62x-sk-common-u-boot.dtsi
+++ b/sdk/u-boot/arch/arm/dts/k3-am62x-sk-common-u-boot.dtsi
@@ -68,11 +68,11 @@
 	u-boot,dm-spl;
 };
 
-&main_uart0 {
+&main_uart4 {
 	u-boot,dm-spl;
 };
 
-&main_uart0_pins_default {
+&main_uart4_pins_default {
 	u-boot,dm-spl;
 };
 
diff --git a/sdk/u-boot/arch/arm/dts/k3-am62x-sk-common.dtsi b/sdk/u-boot/arch/arm/dts/k3-am62x-sk-common.dtsi
index fd52bb2872e..a899b8394ea 100644
--- a/sdk/u-boot/arch/arm/dts/k3-am62x-sk-common.dtsi
+++ b/sdk/u-boot/arch/arm/dts/k3-am62x-sk-common.dtsi
@@ -14,7 +14,7 @@
 
 / {
 	aliases {
-		serial2 = &main_uart0;
+		serial2 = &main_uart4;
 		mmc0 = &sdhci0;
 		mmc1 = &sdhci1;
 		mmc2 = &sdhci2;
@@ -141,10 +141,10 @@
 };
 
 &main_pmx0 {
-	main_uart0_pins_default: main-uart0-pins-default {
+	main_uart4_pins_default: main-uart4-pins-default {
 		pinctrl-single,pins = <
-			AM62X_IOPAD(0x1c8, PIN_INPUT, 0) /* (D14) UART0_RXD */
-			AM62X_IOPAD(0x1cc, PIN_OUTPUT, 0) /* (E14) UART0_TXD */
+			AM62X_IOPAD(0x0124, PIN_INPUT, 3) /* (A23) MMC2_SDCD.UART4_RXD */
+			AM62X_IOPAD(0x0128, PIN_OUTPUT, 3) /* (B23) MMC2_SDWP.UART4_TXD */
 		>;
 	};
 
@@ -273,8 +273,7 @@
 };
 
 &main_uart0 {
-	pinctrl-names = "default";
-	pinctrl-0 = <&main_uart0_pins_default>;
+	status = "disabled";
 };
 
 &main_uart1 {
@@ -291,7 +290,8 @@
 };
 
 &main_uart4 {
-	status = "disabled";
+	pinctrl-names = "default";
+	pinctrl-0 = <&main_uart4_pins_default>;
 };
 
 &main_uart5 {


然后,在 R5 SPL 中的 serial_find_console_or_paner()发生了恐慌。
原因似乎是 ti_clk_of_xlate ()正在返回一个错误。

arch/arm/dts/k3-am65-main.dtsi 中、UART0和 UART4定义如下:

main_uart0: serial@2800000 {
        compatible = "ti,am64-uart", "ti,am654-uart";
        reg = <0x00 0x02800000 0x00 0x100>;
        interrupts = <GIC_SPI 178 IRQ_TYPE_LEVEL_HIGH>;
        power-domains = <&k3_pds 146 TI_SCI_PD_EXCLUSIVE>;
        clocks = <&k3_clks 146 0>;
        clock-names = "fclk";
};

...

main_uart4: serial@2840000 {
        compatible = "ti,am64-uart", "ti,am654-uart";
        reg = <0x00 0x02840000 0x00 0x100>;
        interrupts = <GIC_SPI 182 IRQ_TYPE_LEVEL_HIGH>;
        power-domains = <&k3_pds 155 TI_SCI_PD_EXCLUSIVE>;
        clocks = <&k3_clks 155 0>;
        clock-names = "fclk";
};

我们假设之所以产生该误差、是因为与此误差相对应的定义 时钟=<&K3_CLKS 155 0> arch/arm/mach-k3/am62x/clk-data.c 中不存在。

static const struct dev_clk soc_dev_clk_data[] = {
...
        DEV_CLK(146, 0, "main_usart0_fclk_sel_out0"),
        DEV_CLK(146, 1, "usart_programmable_clock_divider_out0"),
        DEV_CLK(146, 2, "hsdiv4_16fft_main_1_hsdivout1_clk"),
        DEV_CLK(146, 5, "sam62_pll_ctrl_wrap_main_0_chip_div1_clk_clk"),
...
}

您可以建议如何解决此问题吗?

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

    您好!

    我正在研究这个问题、请留出一些时间给出答复。

    ~朱迪斯

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

    您好!

    <&K3_CLKS 155 0> 根据 https://software-dl.ti.com/tisci/esd/latest/5_soc_doc/am62x/clocks.html#clocks-for-uart4-device 应正确无误。

    我目前正在最后验证这一点。 问题:如何构建 u-boot 并更新引导加载程序?

    你是否在 ttyUSB0上得到任何输出?

    ~朱迪斯

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

    您好!

    感谢您的答复。

    我使用与顶级 Makefile 等效的 Makefile 构建 u-boot 和 sysfw-image、然后我将 tiboot3.bin 存储在 SD 卡中。

    https://software-dl.ti.com/processor-sdk-linux-rt/esd/AM62X/08_06_00_42/exports/docs/linux/Overview/Top_Level_Makefile.html

    我如何在 ttyUSB0上获得输出?

    顺便说一下、我们的自定义板将进行修改、以使用 UART0、因此这个问题不再紧急。 但我认为其他人也会面临同样的问题。

    此致、

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

    您好!

    我如何在 ttyUSB0上获得输出?

    将 USB 电缆连接到 UART 端口(J15)和 Linux 机器。 然后使用 minicom 或 picocom 等打开、查看来自 U-boot 和 Linux 内核的调试图片。

    顺便说一下、我们的自定义板将进行修改、以使用 UART0、因此这个问题不再紧急。 但我认为其他人也会面临同样的问题。

    --当然,一些事情要做:
    1)更新 u-boot 环境
    2) 2)更新 u-boot 器件树、stdout-path 和 bootargs 中的所选节点
    3)更新 Linux 内核的设备树。

    如需更多信息、请参阅以下主题:
    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/944121/am4378-ttys6-9-stands-for-what
    https://e2e.ti.com/support/processors-group/processors/f/processors-forum/965944/j721exsomxevm-linux-kernel-hangs-at-starting-kernel

    ~朱迪斯

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

    您好!

    我理解 ttyUSB0意味着 U-Boot 和 Linux 的串行控制台输出。
    没有串行输出(ttyUSB0)、因为 U-Boot 初始化串行控制台时会出现紧急情况。

    (1)抱歉、我没有尝试过、但我看不到任何与以下内容相对应的定义 <&K3_CLKS 155 0>  即使是最新的消息来源,所以我假设情况是一样的。  arch/arm/mach-k3/am62x/clk-data.c

    DEV_CLK(146, 0, "main_usart0_fclk_sel_out0"),
    DEV_CLK(146, 1, "usart_programmable_clock_divider_out0"),
    DEV_CLK(146, 2, "hsdiv4_16fft_main_1_hsdivout1_clk"),
    DEV_CLK(146, 5, "sam62_pll_ctrl_wrap_main_0_chip_div1_clk_clk"),
    DEV_CLK(157, 20, "clkout0_ctrl_out0"),

    (2)我是否需要更改 stdout-path 中的内容?  我认为引导参数是 Linux 启动参数、不会影响 U-Boot。  arch/arm/dts/k3-am62x-r5-sk-common.dtsi

    chosen {
            stdout-path = "serial2:115200n8";
            tick-timer = &timer1;
    };

    (3)由于在 U-Boot 阶段出现恐慌、我认为 Linux 内核设备树无关紧要。

    我不介意这个问题是否已经结束、但我认为它没有得到解决。

    此致、

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

    您好!

    明天就会看到它并作出响应。

    ~朱迪斯

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

    尊敬的胜宏:

    负责 AM62x 时钟树的工程师已经外出度假、不会再来了。 当它们恢复时、我将更新为什么我们在 AM62x 的自动生成文件中没有该时钟。 很抱歉耽误你的时间。

    ~朱迪斯

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

    你好,胜宏

    您能否尝试以下文件并重试。

    e2e.ti.com/.../dev_2D00_data.c

    e2e.ti.com/.../clk_2D00_data.c

    ~朱迪斯

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

    您好!

    感谢您提供文件。

    将 arch/arm/mach-K3/mach-k3/am62x/clk-data.c 和 arch/arm/mach-K3/am62x/dev-data.c 替换为您提供的文件后,串行控制台初始化期间不再出现紧急情况。

    但是,k3_sysfw_loader()中出现了另一个恐慌。

    SDK 08.05.00.21中包含的 U-Boot 也出现了同样的问题、其中我仅替换了 clk-data.c 和 dev-data.c。 这是串行输出和调试器的屏幕截图。

    U-Boot SPL 2021.01-00001-g5b0d5e5347-dirty (Jul 07 2023 - 18:55:06 +0900)
    alloc space exhausted
    k3_system_controller sysctrler: k3_of_to_priv: Acquiring boot_notify channel failed. ret = -19
    k3_system_controller sysctrler: k3_sysctrler_probe: Probe failed with error -19
    rproc failed to be initialized (-19)
    
    resetting ...

    我也尝试了 SDK08.06.00.42、但构建失败、出现以下错误。

    ~/ti-processor-sdk-linux-rt-am62xx-evm-08.06.00.42$ make u-boot
    
    ...
    
      COPY    spl/u-boot-spl.bin
    /home/ijp/ti-processor-sdk-linux-rt-am62xx-evm-08.06.00.42/board-support/u-boot-2021.01+gitAUTOINC+2ee8efd654-g2ee8efd654/tools/k3_gen_x509_cert.sh -c 16 -b spl/u-boot-spl.bin \
                            -o tiboot3.bin -l 0x43c00000 -r 1 -k ""
     SWRV = 1
    spl/u-boot-spl.bin exceeds file size limit:
      limit:  0x30220 bytes
      actual: 0x30558 bytes
      excess: 0x338 bytes
    /home/ijp/ti-processor-sdk-linux-rt-am62xx-evm-08.06.00.42/board-support/u-boot-2021.01+gitAUTOINC+2ee8efd654-g2ee8efd654/Makefile:1929: recipe for target 'spl/u-boot-spl.bin' failed
    make[2]: *** [spl/u-boot-spl.bin] Error 1
    make[2]: *** Deleting file 'spl/u-boot-spl.bin'
    make[2]: Leaving directory '/home/ijp/ti-processor-sdk-linux-rt-am62xx-evm-08.06.00.42/board-support/u-boot_build/r5'
    Makefile:167: recipe for target 'sub-make' failed
    make[1]: *** [sub-make] Error 2
    make[1]: Leaving directory '/home/ijp/ti-processor-sdk-linux-rt-am62xx-evm-08.06.00.42/board-support/u-boot-2021.01+gitAUTOINC+2ee8efd654-g2ee8efd654'
    Makefile:244: recipe for target 'u-boot-r5' failed
    make: *** [u-boot-r5] Error 2

    不幸的是、我很难进一步调查此问题。

    此 致、

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

    您好!

    malloc 中的空间用尽。 将尝试发送另一个已修剪的.c 文件。

    ~朱迪斯

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

    您好!

    尝试以下源文件:
    e2e.ti.com/.../2350.clk_2D00_data.c
    e2e.ti.com/.../6518.dev_2D00_data.c

    ~朱迪斯

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

    您好!

    再次感谢您提供文件。

    我已经尝试过它们、R5内核上的 U-Boot SPL 似乎运行到最后。

    由于我们是在 SK-EVM 上尝试它们、我无法看到 UART4的输出、但它们似乎运行良好。

    感谢您的帮助。 我希望这个主题对其他人有所帮助。

    此致。