Python调用QEMU仿真树莓派无输出问题求助
问题分析与解决:Python脚本执行QEMU仿真树莓派3B无启动输出
你的核心问题是命令行引号嵌套冲突,导致bash接收到的QEMU命令被错误截断,参数不完整,最终只显示警告而无启动输出。
问题根源
看你的代码:bash -c后面用双引号包裹整个QEMU命令,但其中-append参数的值也用了双引号——这会让bash错误识别引号的闭合位置,-append之后的-dtb等参数会被当成bash的独立命令,而非QEMU的启动参数,直接导致QEMU无法正常加载必要文件。
修复方案
方案1:修正引号嵌套(转义或替换引号)
将-append的双引号换成单引号并转义,确保bash能完整识别整个QEMU命令:
terminal_command = f'gnome-terminal -- bash -c "/home/jose/Escritorio/qemu/build/qemu-system-aarch64 -M raspi3b -kernel /home/jose/Escritorio/Imagen/kernel8.img -sd /home/jose/Escritorio/Imagen_SO/2022-04-04-raspios-bullseye-armhf-resized.img -nographic -append \'rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootdelay=1\' -dtb /home/jose/Escritorio/Imagen/bcm2710-rpi-3-b-plus.dtb"' subprocess.Popen(terminal_command, shell=True)
注意:把dtb的相对路径改成绝对路径,避免脚本工作目录不同导致文件找不到
方案2:更安全的列表式传参(推荐)
放弃shell=True,将命令拆分成列表元素,彻底避免引号冲突问题:
import subprocess cmd = [ 'gnome-terminal', '--', 'bash', '-c', '/home/jose/Escritorio/qemu/build/qemu-system-aarch64 -M raspi3b -kernel /home/jose/Escritorio/Imagen/kernel8.img -sd /home/jose/Escritorio/Imagen_SO/2022-04-04-raspios-bullseye-armhf-resized.img -nographic -append "rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2 rootdelay=1" -dtb /home/jose/Escritorio/Imagen/bcm2710-rpi-3-b-plus.dtb' ] subprocess.Popen(cmd)
内容的提问来源于stack exchange,提问作者Angel Ruiz
相关产品推荐
相关产品推荐

