qemu dtb的导入导出和自定义修改

背景

如果没有指定dtb,qemu virt设备平台使用默认的dtb配置的,通过以下命令可以导出dtb。
根据仿真命令的不同,导出的dtb也有不同的配置,例如指定了core为cortex-a53,smp指定了几个core

qemu-system-aarch64  -cpu cortex-a53 -smp 4 -machine virt,dumpdtb=qemu.dtb

再通过命令转为dts文本

dtc -I dtb qemu_vivian.dtb -O dts -o qemu_virt.dts

如下为部分内容

cpus {
		#size-cells = <0x00>;
		#address-cells = <0x01>;
		cpu-map {
			socket0 {
				cluster0 {
					core0 {
						cpu = <0x8004>;
					};
					core1 {
						cpu = <0x8003>;
					};
					core2 {
						cpu = <0x8002>;
					};
					core3 {
						cpu = <0x8001>;
					};
				};
			};
		};

		cpu@0 {
			phandle = <0x8004>;
			reg = <0x00>;
			enable-method = "psci";
			compatible = "arm,cortex-a53";
			device_type = "cpu";
		};
		cpu@1 {
			phandle = <0x8003>;
			reg = <0x01>;
			enable-method = "psci";
			compatible = "arm,cortex-a53";
			device_type = "cpu";
		};
		cpu@2 {
			phandle = <0x8002>;
			reg = <0x02>;
			enable-method = "psci";
			compatible = "arm,cortex-a53";
			device_type = "cpu";
		};
		cpu@3 {
			phandle = <0x8001>;
			reg = <0x03>;
			enable-method = "psci";
			compatible = "arm,cortex-a53";
			device_type = "cpu";
		};
	};

修改dts内容后转换为dtb

不知道为啥dump出来的dtb不能直接用,必须dtb->dts->dtb才能使用,大概率是导出的dtb版本有问题
还有一点是如果是include了dtsi文件,那么需要使用gcc预编译一下gcc -E -x assembler-with-cpp -nostdinc qemu.dts -o qemu.pre

dtc -O dtb  -I dts qemu.dts -o qemu.dtb

Ref

https://blog.csdn.net/FJDJFKDJFKDJFKD/article/details/115547636
https://u-boot.readthedocs.io/en/latest/develop/devicetree/dt_qemu.html

posted @ 2023-05-17 19:58  zephyr~  阅读(1314)  评论(0编辑  收藏  举报