基于AOSP的TinkerBoard2平台如何启用串口控制台?
解决TinkerBoard2 Android串口控制台登录问题
一、核心配置方案:基于init脚本添加ttyS2控制台服务
Android平台无需依赖getty(当然也可以用,后面会说明),直接通过init服务配置即可为/dev/ttyS2添加登录入口,参考你找到的ADB控制台配置,修改设备专属init脚本(比如device/rockchip/rk3399/tinkerboard2/init.tinkerboard2.rc):
- 添加针对ttyS2的控制台服务
# 在现有console服务下方添加 on fs && property:ro.debuggable=1 start console_ttyS2 service console_ttyS2 /system/bin/sh class core console /dev/ttyS2 disabled seclabel u:r:shell:s0
- 确保ttyS2设备权限正确
在ueventd.tinkerboard2.rc中添加设备权限配置:
/dev/ttyS2 0660 root shell
二、SELinux权限适配(如果启用SELinux)
如果你的设备开启了SELinux强制模式,需要修改SEPolicy规则:
- 在
file_contexts中添加ttyS2的上下文标签:
/dev/ttyS2 u:object_r:console_device:s0
- 在
shell.te中添加shell进程访问ttyS2的权限:
allow shell console_device:chr_file rw_file_perms;
三、关于getty在Android的使用
Android平台可以使用getty,但AOSP默认编译产物不包含该工具,需要额外配置:
- 在设备的
device.mk中添加编译规则,将getty纳入产品包:
PRODUCT_PACKAGES += getty
- 替换init服务为getty配置:
on fs && property:ro.debuggable=1 start getty_ttyS2 service getty_ttyS2 /system/bin/getty 115200 /dev/ttyS2 class core disabled seclabel u:r:getty:s0
- 同步添加getty对应的SEPolicy规则(需新增
getty.te文件或修改现有规则),确保getty进程有权限访问ttyS2设备。
四、验证要点
- 确认内核命令行参数
console=ttyS2,115200 androidboot.console=ttyS2,115200已正确生效 - 确保编译的是debuggable版本(
ro.debuggable=1),否则init服务不会触发启动
内容的提问来源于stack exchange,提问作者mozcelikors
相关产品推荐
相关产品推荐

