高通8953 Android 9.0 打开user调试串口
内核版本 | Linux4.9 |
---|---|
平台 | 高通8953 |
作者 | nineyole |
我们在调试msm8953 9.0的版本的时候发现在userdebug模式下是可以使用串口控制台调试的,而在user模式下则是关闭的。
1、user模式打开kernel log调试
我们都知道kernel的打印log是受CONFIG_SERIAL_MSM_CONSOLE
控制的,因此我们可以来查询一下是哪些文件引用了CONFIG_SERIAL_MSM_CONSOLE
SC60Android9.0.0_kernel4.9kernel/msm-4.9$ grep -Fnr "CONFIG_SERIAL_MSM_CONSOLE" ./
./drivers/tty/serial/msm_serial.c:18:#if defined(CONFIG_SERIAL_MSM_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
./drivers/tty/serial/msm_serial.c:1608:#ifdef CONFIG_SERIAL_MSM_CONSOLE
./arch/arm64/configs/defconfig:224:CONFIG_SERIAL_MSM_CONSOLE=y
./arch/arm64/configs/msm8937_defconfig:342:CONFIG_SERIAL_MSM_CONSOLE=y
./arch/arm64/configs/msm8953_defconfig:352:CONFIG_SERIAL_MSM_CONSOLE=y
./arch/arm/configs/msm8937_defconfig:343:CONFIG_SERIAL_MSM_CONSOLE=y
./arch/arm/configs/msm8909_defconfig:283:CONFIG_SERIAL_MSM_CONSOLE=y
./arch/arm/configs/qcom_defconfig:96:CONFIG_SERIAL_MSM_CONSOLE=y
./arch/arm/configs/msm8953_defconfig:342:CONFIG_SERIAL_MSM_CONSOLE=y
./arch/arm/configs/msm8909w_defconfig:265:CONFIG_SERIAL_MSM_CONSOLE=y
./arch/arm/configs/msm8953-batcam_defconfig:93:CONFIG_SERIAL_MSM_CONSOLE=y
./arch/arm/configs/multi_v7_defconfig:323:CONFIG_SERIAL_MSM_CONSOLE=y
./arch/arm/configs/msm8937go_defconfig:342:CONFIG_SERIAL_MSM_CONSOLE=y
可以看到在msm8953-perf_defconfig
是没有定义CONFIG_SERIAL_MSM_CONSOLE的,因此我们只需要重新定义一下即可。
diff --git a/kernel/msm-4.9/arch/arm64/configs/msm8953-perf_defconfig b/kernel/msm-4.9/arch/arm64/configs/msm8953-perf_defconfig
index e89dd5bbc1..6d54607819 100755
--- a/kernel/msm-4.9/arch/arm64/configs/msm8953-perf_defconfig
+++ b/kernel/msm-4.9/arch/arm64/configs/msm8953-perf_defconfig
@@ -341,8 +341,10 @@ CONFIG_INPUT_UINPUT=y
# CONFIG_LEGACY_PTYS is not set
# CONFIG_DEVMEM is not set
# CONFIG_DEVKMEM is not set
+CONFIG_SERIAL_MSM=y
+CONFIG_SERIAL_MSM_CONSOLE=y
CONFIG_SERIAL_MSM_HS=y
-CONFIG_SERIAL_MSM_HSL_CONSOLE=y
+#CONFIG_SERIAL_MSM_HSL_CONSOLE=y
CONFIG_SERIAL_MSM_SMD=y
CONFIG_DIAG_CHAR=y
CONFIG_DIAG_USES_SMD=y
有的时候,由于默认打印机等级比较低,因此有可能,无法打印,因此需要调整打印等级。
串口console在开机后可能会降低打印级别,可以通过如下命令显示所有log
echo "8 6 1 7" > /proc/sys/kernel/printk
关闭所有log显示
echo "0 6 1 7" > /proc/sys/kernel/printk
经过上面的修改之后,就会有串口打印出来,另外如何控制台不能输入,请参考下面的。
2、另外需要修改user版本串口只有输出不能输入的问题
现象:
编译成user版本之后串口只有输出没有输入.
原因:
编译user版本之后 ro.debuggable=0
build/core/main.mk:
ifeq (true,$(strip $(enable_target_debugging)))
# Target is more debuggable and adbd is on by default
ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=1
# Enable Dalvik lock contention logging.
ADDITIONAL_BUILD_PROPERTIES += dalvik.vm.lockprof.threshold=500
# Include the debugging/testing OTA keys in this build.
INCLUDE_TEST_OTA_KEYS := true
else # !enable_target_debugging
# Target is less debuggable and adbd is off by default
ADDITIONAL_DEFAULT_PROPERTIES += ro.debuggable=0
endif # !enable_target_debugging
system/core/rootdir/init.rc
service console /system/bin/sh
class core
console
disabled
user shell
group shell log
seclabel u:r:shell:s0
on property:ro.debuggable=1
start console
可见console是否启动受属性ro.debuggable的控制.
解决方法有两种,任选其中一个即可:
-
修改 ro.debuggable = 1
-
直接将on property:ro.debuggable=1删除,然后默认就是无条件启动console.