AOSP启动CVD报错:Failed to connect: No such device
AOSP CVD启动报错“Failed to connect: No such device”排查方案
1. 错误可能诱因
- 内核镜像与CVD目标架构不匹配:构建的内核若针对非x86_64架构编译,加载后无法识别虚拟设备所需的硬件节点
- 虚拟设备依赖的/dev节点未初始化:CVD启动时需要的
/dev/kvm、/dev/vhost-*等虚拟设备节点未被宿主内核正确创建 - KVM模块未加载或权限不足:x86_64架构的CVD依赖KVM硬件加速,若模块未加载或当前用户无访问权限,会导致设备初始化失败
- 构建产物损坏:boot.img、system.img等镜像文件在构建过程中出现损坏,内核启动后无法完成设备枚举
- SELinux策略限制:宿主系统的SELinux规则阻止了CVD进程访问必要的设备节点
2. 需要检查的配置项
- 构建目标一致性:执行
echo $TARGET_PRODUCT和echo $TARGET_ARCH,确认输出为aosp_cf_x86_64_phone和x86_64,与lunch目标匹配 - KVM状态:执行
lsmod | grep kvm检查kvm_intel/kvm_amd模块是否加载;直接访问/dev/kvm(执行cat /dev/kvm),无报错则权限正常 - 镜像文件完整性:查看
out/target/product/cf_x86_64_phone/下的boot.img、system.img等文件大小是否符合预期,同时检查构建日志(build.log)是否存在编译报错 - 宿主设备节点:启动CVD后,执行
ls /dev | grep -E "(kvm|vhost)",确认相关虚拟设备节点存在 - SELinux模式:执行
sestatus查看当前SELinux状态,若为Enforcing,需考虑策略限制影响
3. 调试与修复步骤
- 重新构建完整镜像:执行
make clean && make -j$(nproc),清除旧构建产物后重新编译,确保过程无报错 - 修复KVM配置:
- 若kvm模块未加载,执行
sudo modprobe kvm_intel(Intel CPU)或sudo modprobe kvm_amd(AMD CPU) - 若权限不足,执行
sudo chmod 666 /dev/kvm临时开放权限;或添加用户到kvm组:sudo usermod -aG kvm $USER,重新登录后生效
- 若kvm模块未加载,执行
- 查看Verbose启动日志:执行
launch_cvd -v获取详细日志,重点排查内核启动阶段的设备初始化报错,定位具体缺失的设备节点 - 临时关闭SELinux测试:执行
sudo setenforce 0切换到Permissive模式,重新启动CVD,若恢复正常则需调整SELinux策略(添加允许CVD访问设备节点的规则) - 替换内核镜像:尝试使用AOSP官方预编译的x86_64内核镜像替换本地构建的boot.img,验证是否为内核编译问题
- 升级宿主内核:Linux 5.4版本较旧,部分CVD特性可能存在兼容性问题,尝试升级内核到5.10及以上版本后重新测试
内容的提问来源于stack exchange,提问作者ChunhThanhDe
相关产品推荐
相关产品推荐

