kevin知识库
首页 / MTK 平台 / /mtk/remove-boot-text/
整理中 创建 2026/06/06 更新 2026/06/06

在 MTK 平台项目开发中,设备开机早期阶段有时会在屏幕左上角打印一些启动模式字符,比如:

#mtk

[MTK]平台移除开机显示字符

一、问题背景

在 MTK 平台项目开发中,设备开机早期阶段有时会在屏幕左上角打印一些启动模式字符,比如:

=> NORMAL MODE
=> RECOVERY MODE
=> POWER OFF CHARGING MODE
=> UNKNOWN BOOT

很多初次接触这个问题的开发者会误以为这是 Android Framework 层或者系统应用打印出来的 log,实际上并不是。这些字符的输出发生在 LK2(Little Kernel 2)Bootloader 阶段,彼时 Android 系统尚未启动,Framework 还没有拉起来。

在研发和调试阶段,这类提示信息能帮助工程师快速判断当前设备进入了哪种启动模式,是非常有价值的调试手段。但到了量产阶段,这些字符会叠加在开机 Logo 或开机动画上,影响用户体验,显得不够干净专业。因此,量产版本通常需要将这些字符移除

二、问题定位

这类开机模式提示,通常出现在 MTK 的 LK2 代码中。

代码路径如下:

mediatek/proprietary/bootable/bootloader/lk2/app/mt_boot/mt_boot.c

目标函数:

staticvoidshow_boot_mode(void)

这个函数的职责很直接:

获取当前 boot mode

根据不同模式拼接字符串

将字符串显示到屏幕上

也就是说,真正决定是否显示字符的关键点,就在这个函数里

三、修改方法

原始修改如下:

--- a/mediatek/proprietary/bootable/bootloader/lk2/app/mt_boot/mt_boot.c
+++ b/mediatek/proprietary/bootable/bootloader/lk2/app/mt_boot/mt_boot.c
@@ -723,7 +723,8 @@ static void show_boot_mode(void)

     switch (get_boot_mode()) {
     case NORMAL_BOOT:
-        n = snprintf(str_buf, BUF_LEN, " => NORMAL MODE\n");
+        //n = snprintf(str_buf, BUF_LEN, " => NORMAL MODE\n");
+        return;
         break;
     case META_BOOT:
         n = snprintf(str_buf, BUF_LEN, " => META MODE\n");
@@ -732,17 +733,20 @@ static void show_boot_mode(void)
         n = snprintf(str_buf, BUF_LEN, " => FACTORY MODE\n");
         break;
     case RECOVERY_BOOT:
-        n = snprintf(str_buf, BUF_LEN, " => RECOVERY MODE\n");
+        //n = snprintf(str_buf, BUF_LEN, " => RECOVERY MODE\n");
+        return;
         break;
     case KERNEL_POWER_OFF_CHARGING_BOOT:
-        n = snprintf(str_buf, BUF_LEN, " => POWER OFF CHARGING MODE\n");
+        //n = snprintf(str_buf, BUF_LEN, " => POWER OFF CHARGING MODE\n");
+        return;
         break;
     case FASTBOOT_BOOT:
         n = snprintf(str_buf, BUF_LEN, " => FASTBOOT MODE\n");
         break;
     default:
-        n = snprintf(str_buf, BUF_LEN, " => UNKNOWN BOOT\n");
-        break;
+        //n = snprintf(str_buf, BUF_LEN, " => UNKNOWN BOOT\n");
+        return;
+       break;
     }
     if (n < 0)
         LTRACEF("snprintf error.\n");

四、修改原理分析

这里的核心,不是把字符串注释掉这么简单。

真正起作用的是:直接 **return** 退出 **show_boot_mode()** 函数。

1. 为什么 return 能去掉显示?

因为后面的流程通常还会继续执行显示逻辑。

原本逻辑是:

snprintf(...)
然后再调用显示接口把str_buf打出去

现在在 case NORMAL_BOOT:RECOVERY_BOOT:KERNEL_POWER_OFF_CHARGING_BOOT:default: 里直接 return,函数提前结束了。

后续显示代码根本走不到。

所以字符自然不会出现在屏幕上。