Hardware :Nanopi M4
FIQ-Debugger
RK提供的fiq debugger功能是将debugger功能和普通uart功能代码集成到了一起
fiq debugger是集成到内核中的一种系统调试手段。
FIQ在arm架构中相当于nmi中断,fiq debugger把串口注册成fiq中断,在串口fiq中断服务程序中集成了一些系统调试命令。
一般情况下串口是普通的console模式,minicom下输入切换命令"Ctrl + A + F",串口会切换到fiq debugger模式。
因为FIQ是不可屏蔽中断,所以这种调试手段适合调试cpu被hang住的情况,可以在hang住的时候用fiq debugger打印出cpu的故障现场,常用命令是sysrq。
要使用fiq debugger,需要内核配置:
CONFIG_FIQ_DEBUGGER // 使能fiq debugger
CONFIG_FIQ_DEBUGGER_CONSOLE // fiq debugger与console可以互相切换
CONFIG_FIQ_DEBUGGER_CONSOLE_DEFAULT_ENABLE // 启动时默认串口在console模式
CONFIG配置:
CONFIG_FIQ_DEBUGGER=y
CONFIG_FIQ_DEBUGGER_NO_SLEEP=y
CONFIG_FIQ_DEBUGGER_WAKEUP_IRQ_ALWAYS_ON is not set
CONFIG_FIQ_DEBUGGER_CONSOLE=y
CONFIG_FIQ_DEBUGGER_CONSOLE_DEFAULT_ENABLE=y
CONFIG_FIQ_DEBUGGER_TRUST_ZONE is not set
CONFIG_FIQ_DEBUGGER_UART_OVERLAY is not set
CONFIG_FIQ_WATCHDOG is not set
rk3399-nanopi4-common.dtsi
fiq_debugger: fiq-debugger {
compatible = "rockchip,fiq-debugger";
rockchip,serial-id = <2>; //配置UART2
rockchip,signal-irq = <182>;
rockchip,wake-irq = <0>;
rockchip,irq-mode-enable = <1>; /* If enable uart uses irq instead of fiq */
rockchip,baudrate = <115200>; /* Only 115200 and 1500000 */
pinctrl-names = "default";
pinctrl-0 = <&uart2c_xfer>; //配置UART2
};
禁止对应uart节点
&uart2 {
status = "disabled";
};
chosen {
bootargs = "earlycon=uart8250,mmio32,0xff1a0000 swiotlb=1 console=ttyFIQ0 rootwait coherent_pool=1m";
};
UART2 address = FF1A_0000
rk3399.dtsi
uart2c {
uart2c_xfer: uart2c-xfer {
rockchip,pins =
<4 19 RK_FUNC_1 &pcfg_pull_up>,
<4 20 RK_FUNC_1 &pcfg_pull_none>;
};
};
原作者:andyTW3974