Android 10 设置kernel log level

本文介绍如何在Linux内核中查看和修改默认的日志级别,包括临时关闭所有日志的方法及在Android 10.0 QCOM平台上修改默认日志级别的步骤。同时解析了printk文件中数字的意义及其与日志优先级的关系。

有时候kernel log内容过多/过少影响我们分析问题,因此需要对kernel log进行设置。

查看平台默认kernel loglevel

$ cat /proc/sys/kernel/printk
6       6       1       7

kernle log级别为6 6 1 7

关闭所有kernel log

$ echo "0 6 1 7" >proc/sys/kernel/printk		//往printk文件写入“0 6 1 7”,关闭所有kernle log
$ cat /proc/sys/kernel/printk		//查看修改后的kernle log
0       6       1       7

注意:只能临时关闭,重启后重置,默认值修改见下文

修改kernel log默认值

以Android 10.0 qcom平台为例,修改如下:
device/qcom/common/rootdir/etc/init.qcom.sh

case "$buildvariant" in
    "userdebug" | "eng")
        #set default loglevel to KERN_INFO
-       echo "6 6 1 7" > /proc/sys/kernel/printk
+       echo "0 6 0 7" > /proc/sys/kernel/printk
        ;;
    *)
        #set default loglevel to KERN_WARNING
        echo "4 4 1 4" > /proc/sys/kernel/printk
        ;;
esac

printk文件解读

该文件中4个数字,如“6 6 1 7”,根据日志记录消息的重要性/优先级(数值越小,优先级越高),定义将其发送到何处。
源码定义如下:
kernel/msm-4.14/kernel/printk/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 默认的控制台日志级别,控制台日志级别的缺省值*/
};

kernel/msm-4.14/include/linux/kernel_level.h

#define KERN_EMERG	KERN_SOH "0"	/* system is unusable */
#define KERN_ALERT	KERN_SOH "1"	/* action must be taken immediately */
#define KERN_CRIT	KERN_SOH "2"	/* critical conditions */
#define KERN_ERR	KERN_SOH "3"	/* error conditions */
#define KERN_WARNING	KERN_SOH "4"	/* warning conditions */
#define KERN_NOTICE	KERN_SOH "5"	/* normal but significant condition */
#define KERN_INFO	KERN_SOH "6"	/* informational */
#define KERN_DEBUG	KERN_SOH "7"	/* debug-level messages */
Android 内核启动日志不打印出来可以通过修改内核代码和设备树文件来实现。 #### 修改内核代码屏蔽版本信息打印 在文件 `kernel/init/main.c` 中,注释掉打印内核版本信息的代码。示例如下: ```diff --- a/kernel/init/main.c +++ b/kernel/init/main.c @@ -523,7 +523,7 @@ asmlinkage __visible void __init start_kernel(void) */ boot_cpu_init(); page_address_init(); - pr_notice("%s", linux_banner); + //pr_notice("%s", linux_banner); setup_arch(&command_line); mm_init_cpumask(&init_mm); setup_command_line(command_line); ``` 这样可以屏蔽内核启动时的版本信息打印[^3]。 #### 修改设备树文件关闭内核日志串口打印 对于 RK3399 Android7.1 设备,可以修改设备树文件 `kernel/arch/arm64/boot/dts/rockchip/rk3399-android.dtsi`,注释掉 `bootargs` 中的串口初始化参数,并将相关设备状态设置为 `disabled`。示例如下: ```diff diff --git a/kernel/arch/arm64/boot/dts/rockchip/rk3399-android.dtsi b/kernel/arch/arm64/boot/dts/rockchip/rk3399-android.dtsi index 8400697..04983c5 100755 --- a/kernel/arch/arm64/boot/dts/rockchip/rk3399-android.dtsi +++ b/kernel/arch/arm64/boot/dts/rockchip/rk3399-android.dtsi @@ -48,7 +48,7 @@ compatible = "rockchip,android", "rockchip,rk3399"; chosen { - bootargs = "earlycon=uart8250,mmio32,0xff1a0000 swiotlb=1 coherent_pool=1m"; + //bootargs = "earlycon=uart8250,mmio32,0xff1a0000 swiotlb=1 coherent_pool=1m"; }; cpuinfo { @@ -80,6 +80,7 @@ pinctrl-names = "default"; pinctrl-0 = <&uart2c_xfer>; interrupts = <GIC_SPI 150 IRQ_TYPE_LEVEL_HIGH 0>; + status="disabled"; }; reserved-memory { ``` 这样可以关闭内核日志的串口打印[^5]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值