RK3288调试串口

RK3288芯片总共有5路串口,默认情况下:
UART_BB(串口1)、UART_BT(串口0)、UART_GPS(串口3)、UART_EXP(串口4)、UART_DBG(串口2)。默认使用串口2为调试串口,即UART_DBG,UART_DBG不支持自动流控制(auto flow-control,AFC),支持高达115200波特率的红外数据通信标准(SIR 1.0)。
有时需要的串口不够用,需要关闭串口调试,切换调试串口为普通串口:
调试串口就是将普通串口切换成了console来处理,rockchip调试串口的数据处理代码在arch/arm/mach-rockchip/rk_fiq_debugger.c中,其中dts默认参数如下:

fiq-debugger {
        compatible = "rockchip,fiq-debugger";
        rockchip,serial-id = <2>;
        rockchip,signal-irq = <106>;
        rockchip,wake-irq = <0>;
        status = "disabled";
};

rockchip,serial-id = <2>,指定调试串口的串口为串口2.
取消调试串口就是不加载编译这个代码,这样uart2就是默认的普通串口来使用。
因此,sed -i “s/CONFIG_FIQ_DEBUGGER=y/# CONFIG_FIQ_DEBUGGER is not set/g” .config即可
make menuconfig如下:
Device Drivers —>
[*] Staging drivers —>
Android —>
[ ] FIQ Mode Serial Debugger //不选中即可

[arch/arm/mach-rockchip/rk_fiq_debugger.c]
Rk_fiq_debugger.c代码是device代码,而在dts中的compatible = “rockchip,fiq-debugger”代表的就是设备是okay还是disabled,这也就解释了为何当时在测试时fiq-debugger置为disabled时recovery部分就会挂掉,因为在printk输出打印消息时,调试串口的console初始化是成功的,但是却没有对应的writr,read等函数去操作,如下函数最终会被printk,read,write等调用:
这里写图片描述
这样disabled串口的device时,rk_fiq_debugger部分结束:
这里写图片描述
而fiq debugger驱动仍然能够执行,当printk输出消息时,调用到uart_putc(debug_putc)时就会出错,因此不能只将fiq-debugger disabled。
RK提供的fiq debugger功能是将debugger功能和普通uart功能代码集成到了一起,代码中通过CONFIG_FIQ_DEBUGGER_CONSOLE宏来配置fiq debugger调试串口。
这里写图片描述
fiq_debugger_tty_init()函数进行调试串口的初始化。
CONFIG_FIQ_DEBUGGER宏:

#ifdef  CONFIG_FIQ_DEBUGGER
#define CONFIG_FIQ_DEBUGGER_NO_SLEEP
#define CONFIG_FIQ_DEBUGGER_CONSOLE
#define CONFIG_FIQ_DEBUGGER_CONSOLE_DEFAULT_ENABLE
#endif

[arch/arm/mach-rockchip/Makefile]
obj-$(CONFIG_FIQ_DEBUGGER) += rk_fiq_debugger.o

关闭调试串口只需要取消CONFIG_FIQ_DEBUGGER宏的配置。

参考:http://blog.csdn.net/kris_fei/article/details/53928650

猜你喜欢

转载自blog.csdn.net/u014770862/article/details/69400250