如何修改QEMU ARM64 Yocto镜像的设备树?
解决Yocto构建QEMU ARM64镜像时自定义设备树的问题
先明确QEMU ARM64实际使用的设备树
你修改foundation-v8.dtsi无效,是因为QEMU ARM64默认采用的是virt平台的设备树(比如virt.dts),而非Foundation v8的设备树——后者针对的是ARM Foundation Model硬件,并非QEMU虚拟机环境。
要确认当前镜像使用的DTB:
- 进入Yocto构建目录下的
tmp/deploy/images/qemuarm64/,找到后缀为.dtb的文件(通常是qemuarm64.dtb) - 用设备树编译器反编译查看内容:
打开dtc -I dtb -O dts qemuarm64.dtb > dumped.dtsdumped.dts就能看到实际对应的源DTS结构,以此为基础修改才会生效。
在Yocto中添加自定义设备树的正确方式
不要直接修改内核源码树里的DTS,Yocto推荐通过自定义Layer管理修改:
- 在你的自定义Layer中创建路径:
recipes-kernel/linux/linux-yocto/files/ - 将修改好的DTS文件(比如基于
virt.dts修改的my-virt-custom.dts)放到这个files目录下 - 同目录下创建
linux-yocto_%.bbappend文件,内容如下:FILESEXTRAPATHS:prepend := "${THISDIR}/files:" # 替换默认DTB(若要追加则用+=) KERNEL_DEVICETREE = "my-virt-custom.dtb" - 重新构建内核和镜像:
bitbake core-image-minimal(或你使用的镜像名称)
确保QEMU启动时加载自定义DTB
如果Yocto生成的启动脚本未自动使用新DTB,可在conf/local.conf中添加QEMU启动参数:
QEMU_EXTRA_OPTIONS += "-dtb ${DEPLOY_DIR_IMAGE}/my-virt-custom.dtb"
验证修改是否生效
启动QEMU镜像后,在系统内查看/proc/device-tree目录,检查你添加或修改的节点是否存在,比如:
ls /proc/device-tree/my-custom-node
内容的提问来源于stack exchange,提问作者Sauber
相关产品推荐
相关产品推荐

