You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何构建运行AOSP 11的Headless(无头)无显示模式

AOSP 11 无头模式(无显示)运行修改方案

以下是除虚拟显示适配器外,可修改的代码/配置位置,适配Omni ROM + RPi4场景:

1. 内核及启动参数修改

  • 在内核启动cmdline中添加参数 androidboot.headless=1,同时移除所有RPi4显示相关的启动参数,如vc4.fkms_force_hotplug=1类的显示强制启用配置
  • 裁剪内核配置,禁用RPi4的显示驱动:将CONFIG_DRM_VC4、CONFIG_FB_BCM2835设置为n,避免内核尝试初始化不存在的显示硬件
  • 添加启动参数 drm_kms_helper.disable=1,直接关闭DRM显示框架的内核加载逻辑

2. 原生服务配置修改

  • 修改设备目录下的SurfaceFlinger覆盖配置,在frameworks/native/services/surfaceflinger/SurfaceFlinger.rc中添加属性配置:setprop ro.surface_flinger.headless 1,让SurfaceFlinger跳过物理显示设备检测流程
  • 修改init.rc中与显示相关的等待逻辑,删除wait_for /dev/graphics/fb0类的触发条件,避免启动阶段因等待不存在的显示设备超时
  • 在设备build.prop中添加配置 ro.config.headless=1,标记系统为无头运行模式,供上层服务读取判断

3. 框架层逻辑适配

  • 修改WindowManagerService源码,在frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java的初始化逻辑中,添加无头模式判断:如果ro.config.headless为1,跳过显示设备合法性校验的异常抛出逻辑,避免因无显示设备导致系统服务崩溃
  • 修改显示 composer HAL 实现,在hardware/interfaces/graphics/composer/2.1/default/ComposerImpl.cpp中,无头模式下直接返回预定义的虚拟显示设备参数,不调用底层硬件显示的检测接口,避免HAL服务崩溃触发系统重启
  • 调整PackageManager过滤规则,在frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java中,无头模式下过滤掉要求android.hardware.display特征的应用安装请求,避免启动带UI的应用导致异常

4. 系统包裁剪

  • 在设备的device.mk中移除所有依赖显示的系统包,包括SystemUI、Launcher3、WallpaperPicker等桌面、UI相关包
  • 禁用media.codec中与硬件渲染相关的组件,优先使用软编码实现,避免调用GPU渲染相关接口报错

内容的提问来源于stack exchange,提问作者Jimson James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:51:02