关闭安卓串口内核打印和命令行

背景

产品开发阶段需要打印来查看设备运行状态,设备发布后需要关闭各种调试接口,接口包括了串口的内核打印。

实操

关闭命令行

//xxx.dts
bootargs = "console=null";

在设备的dts文件中console=null即可,因为之前是真是串口,设置为null后,就不会指定串口用作命令行

关闭内核打印printk

//defconfig
CONFIG_CONSOLE_LOGLEVEL_DEFAULT=3

//printk.h
#define CONSOLE_LOGLEVEL_DEFAULT CONFIG_CONSOLE_LOGLEVEL_DEFAULT

//printk.c
int console_printk[4] = {
	CONSOLE_LOGLEVEL_DEFAULT,	/* console_loglevel */
	MESSAGE_LOGLEVEL_DEFAULT,	/* default_message_loglevel */
	CONSOLE_LOGLEVEL_MIN,		/* minimum_console_loglevel */
	CONSOLE_LOGLEVEL_DEFAULT,	/* default_console_loglevel */
};

printk是有打印等级设置,只有当打印等级高于命令行设置才可以打印出信息,想要查看全部信息是需要使用dmesg

关闭驱动方式

#make menuconfig
Devices drivers -> character drivers->serial drivers->
[]support for console serial port 

我觉得不好,有的是把驱动去除了,串口一般是通用驱动8250/16550。

原理

系统启动是uboot启动将启动参数传给Linux内核,在setup中处理,这里传递的启动参数就是dts中设置的bootargs,这里虽然关闭了,其实你看到还是有信息打印的,这里打印出来的信息是uboot打印的,这里的方式其实可以直接在c/h文件中定义,不一定在defconfig中。
但是,printk打印不受任何限制,只受打印等级限制。因为关闭的是命令行,和printk没任何关系,只需要调整打印等级直到,printk不打印即可。

遗留问题

版本不同,是怎么区分的呢?比如一个是打开的版本,一个是发行的关闭调试的版本,肯定需要双方配置都是一致的,这里是用不同的dts吗?如果有人知道可以告诉我一下。

参考文章

实战-Android系统默认关闭内核打印
Linux 日志级别(loglevel)详解
Linux内核强制使用自配置的cmdline

你可能感兴趣的:(android,linux)