目前有两块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还是没有串口打印信息输出。
