我已按照 https://gist.github.com/jonte/b4bd83a5f2e8330418b1f3322bff74f2 中的步骤使用 QEMU 模拟 tmp105 温度传感器:
假设您的 qemu 目录中有 qemu 源代码:
cd qemu
echo "CONFIG_TMP105=y" >> default-configs/i386-softmmu.mak
./configure && make
然后启动QEmu
build/qemu-system-x86_64 \
--enable-kvm \
-hda ~/Projects/qemu/virtualdebian.img \
-m 1G \
-device tmp105,id=sensor,address=0x50 \
-qmp unix:$HOME/qmp.sock,server,nowait \
-nic user
但是之后,当我尝试写入温度时,它失败了,如下所示:
$ scripts/qmp/qom-get -s $HOME/qmp.sock sensor.temperature
0
$ scripts/qmp/qom-get -s $HOME/qmp.sock sensor.temperature
0
$ scripts/qmp/qom-set -s $HOME/qmp.sock sensor.temperature 1
Traceback (most recent call last):
File "scripts/qmp/qom-set", line 66, in <module>
print(srv.command('qom-set', path=path, property=prop, value=value))
File "scripts/qmp/../../python/qemu/qmp.py", line 274, in command
raise QMPResponseError(ret)
qemu.qmp.QMPResponseError: Invalid parameter type for 'temperature', expected: integer
tmp421 温度传感器也会发生这种情况。
你知道如何修复这个错误吗?为什么会发生这种情况?
是的,答案就在 https://www.mail-archive.com/[email protected]/msg747323.html
但是在较新版本的 QEmu 中已修复
diff --git a/scripts/qmp/qom-set b/scripts/qmp/qom-set
index 240a78187f..49eebe4924 100755
--- a/scripts/qmp/qom-set
+++ b/scripts/qmp/qom-set
@@ -56,7 +56,10 @@ if len(args) > 1:
path, prop = args[0].rsplit('.', 1)
except:
usage_error("invalid format for path/property/value")
- value = args[1]
+ try:
+ value = int(args[1])
+ except ValueError:
+ value = args[1]
else:
usage_error("not enough arguments")
vlab@suresh:~/qemu/scripts/qmp$ nc -U ~/qmp.sock {“QMP”:{“版本”:{“qemu”:{“微”:50,“次要”:2,“主要”:9},“包”:“v9.2.0-636-gaa3a285b5b-dirty” }, "功能": ["oob"]}} {“执行”:“qmp_能力”} {“返回”: {}} {“执行”:“qom-set”,“参数”:{“路径”:“/机器/外设/传感器”,“属性”:“温度”,“值”:20000}}
{“返回”:{}}
你也可以这样设置