Rk3399—调试串口用于普通串口

在开发过程中,有时遇到外设较多,串口不够的情况,而另外扩展串口又极为不便,此时可以使用调试串口(log信息打印串口)做为普通串口通讯!

Linux中调试串口的配置是通过bootargs环境变量传递的,通过该参数告诉内核使用哪个串口以及波特率作为调试串口,bootargs可以在设备树(dts)下配置,chosen里有属性项bootargs,启动linux时,内核会使用chosen中定义的bootargs,如果没有定义bootargs,linux会使用kernel默认的bootcmdline。如果bootcmdline为空,那么内核会使用UBOOT的环境变量bootargs

好了,我们知道了串口配置参数的传递过程,下面就一步一步来实现吧。

修改设备树

在kernel\arch\arm64\boot\dts\rockchip文件夹下有个rk3399-android.dtsi,找到如下内容:

chosen {
    bootargs = “”/*"earlycon=uart8250,mmio32,0xff1a0000 swiotlb=1";*/
};

earlycon表示的就是linux启动前的console设备主要用于在系统启动阶段的内核打印输出,由于linux内核实际设备驱动模型还没有加载完成,所以早期的启动信息需要一个特殊的console用于输出log这就是设备树中bootargs的参数配置,直接将其屏蔽,这样设备树中就传递了一个空的字符给bootargs,就不会进行调试串口配置!

将kernel 的config中的debug相关配置关闭

#CONFIG_FIQ_DEBUGGER=y
#CONFIG_FIQ_DEBUGGER_NO_SLEEP=y
#CONFIG_FIQ_DEBUGGER_CONSOLE=y
#CONFIG_FIQ_DEBUGGER_CONSOLE_DEFAULT_ENABLE=y

这些是FIQ debug串口的开关,即rk_fiq_debugger.c文件是否编译进内核以及是否启用控制台调试。也可将设备树fiq_debugger中的status改为disables,如下:

fiq_debugger: fiq-debugger {
		status = "disabled";		//禁用
        compatible = "rockchip,fiq-debugger";
		rockchip,serial-id = <2>;		//指定调试串口为串口2
		rockchip,signal-irq = <182>;	//中断号
		rockchip,wake-irq = <0>;
		rockchip,irq-mode-enable = <1>;  /* If enable uart uses irq instead of fiq */
		rockchip,baudrate = <1500000>;   /* Only 115200 and 1500000 */
		pinctrl-names = "default";
		pinctrl-0 = <&uart2c_xfer>;
	};

修改printk.c文件

printk.c是内核与打印相关的文件,所有的打印都在这个文件中定义,该文件在linux/printk下,修改其中call_console_drivers函数如下:

for_each_console(con) {
		if (exclusive_console && con != exclusive_console)
			continue;
		if (!(con->flags & CON_ENABLED))
			continue;
		if (!con->write)
			continue;
		if (!cpu_online(smp_processor_id()) &&
		    !(con->flags & CON_ANYTIME))
			continue;
		//if (con->flags & CON_EXTENDED)
		//	con->write(con, ext_text, ext_len);
		//else
		//	con->write(con, text, len);
	}

call_console_drivers这个函数会遍历console driver并且输出log信息,其中屏蔽的这几行就是控制台的调试信息。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东皇※太一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值