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.

DM8127的linux调试串口改为uart5的问题



目前有两块DM8127的板子,调试串口的输出分别为uart2和uart5,而ipnc-rdk 3.5中默认为uart0,因此需要对uboot和kernel进行修改。经过代码修改以后,uart2的uboot和kernel均能输出打印信息,uart5则是uboot可以输出打印信息,而kernel不能输出打印信息。

kernel中uart2和uart5有什么区别呢?对于uart5还有什么需要修改?

 

附1:uart2的uboot和kernel的主要修改

uart2的uboot修改主要包括:

1)#define  CONFIG_CONS_INDEX   3;

2)引脚59和61复用的修改

/* 57-60 */     BIT(0), BIT(0), BIT(3), BIT(0),

/* 61-64 */     BIT(3), BIT(0), BIT(0), BIT(0),

uart2的kernel修改则是在

/opt/ipnc/Source/ti_tools/ipnc_psp_arago/kernel/arch/arm/plat-omap/include/plat/uncompress.h中进行如下修改:

/* TI8148IPNC base boards using UART1 */

//modified by qiu

//DEBUG_LL_TI81XX(1, ti8148ipnc);

DEBUG_LL_TI81XX(3, ti8148ipnc);

进行以上修改以后,uboot和kernel均能正常输出打印信息。

 

附2:uart5的uboot和kernel的主要修改

在uboot中没有uart5的相关定义,uart5的修改则相对复杂,主要为:

1)按照uart2增加相关的寄存器等代码;

2)#define  CONFIG_CONS_INDEX   5;

3)引脚41和42复用的修改

/* 41-44 */     BIT(5), BIT(5), BIT(0), BIT(0),

/* 45-48 */     BIT(0), BIT(0), BIT(0), BIT(0),

4)修改时钟源,uart5默认的时钟源为sysclk8,是192M的,因此还得修改为48M的sysclk10,并增加使能代码:

        __raw_writel(0xA8, McBSP_UART_CLKSRC); /*Enable SYSCLK10 for uart3,4,5 */

        while(__raw_readl(McBSP_UART_CLKSRC) != 0xA8);

 

        __raw_writel(0x2, CM_ALWON_UART_5_CLKCTRL);

        while(__raw_readl(CM_ALWON_UART_5_CLKCTRL) != 0x2);

进行上述修改以后,uboot可以正常输出打印信息。

 

kernel的修改仿照uart2,先增加DEBUG_LL_TI814X( )函数,然后在

/opt/ipnc/Source/ti_tools/ipnc_psp_arago/kernel/arch/arm/plat-omap/include/plat/uncompress.h中进行如下修改:

/* TI8148IPNC base boards using UART1 */

//modified by qiu

//DEBUG_LL_TI81XX(1, ti8148ipnc);

//DEBUG_LL_TI81XX(3, ti8148ipnc);

DEBUG_LL_TI814X(6, ti8148ipnc);

进行以上修改以后, kernel不能正常输出打印信息。

 

进一步地做了如下尝试:

1)修改kernel中uart5的时钟源与uart2一致,即

/* UART5 Functional Clock(final) */

static struct clk uart6_fck = {

         .name                = "uart6_fck",

         .parent              = &sysclk10_ck,

         .ops          = &clkops_ti81xx_dflt_wait,

         .enable_reg      = TI814X_CM_ALWON_UART_5_CLKCTRL,

         .enable_bit       = TI81XX_MODULEMODE_SWCTRL,

         .clkdm_name   = "alwon_l3_slow_clkdm",

         .recalc               = &followparent_recalc,

};

2)取消kernel中的管脚复用的代码,保留uboot中的管脚复用状态

即注释掉

/opt/ipnc/Source/ti_tools/ipnc_psp_arago/kernel/arch/arm/mach-omap2/mux81xx.c

/opt/ipnc/Source/ti_tools/ipnc_psp_arago/kernel/arch/arm/mach-omap2/mux814x.c

中管脚复用的代码

 

但是,经过这些尝试以后,uart5还是没有串口打印信息输出。

 

  • 这个问题往前推进了一步。

    修改/opt/ipnc/Source/ti_tools/ipnc_psp_arago/kernel/arch/arm/mach-omap2/include/mach/debug-macro.S文件

    10:

                      /* added by qiu */

                      cmp \rp, #TI814XUART6  @ ti814x UART offsets different

                      beq  86f                     @ configure UART6

     

     

    81:            mov \rp, #UART_OFFSET(TI81XX_UART1_BASE)

                      b       98f

    82:            mov \rp, #UART_OFFSET(TI81XX_UART2_BASE)

                      b       98f

    83:            mov \rp, #UART_OFFSET(TI81XX_UART3_BASE)

                      b       98f

                      /* added by qiu */

    86:            ldr    \rp, =UART_OFFSET(TI814X_UART6_BASE)

                      b       98f

    通过以上修改,串口可以输出信息,但是出现乱码


    这又是什么问题呢?

  • 串口输出乱码如下图

  • 出现乱码以后,如果断开secureCRT,重新连接,那么信息输出恢复正常。

    这是什么原因呢?

  • 请问你的那个uart5的问题解决了,我现在的情况和你的一样,如果可以的话可以分享一下解决方案吗

  • 没有解决,后来改硬件了,还是用uart0