问题描述:
ubuntu中试图用QEMU运行yocto编译出的Linux发行版,当执行命令runqemu qemux86时出现如下异常:
runqemu - INFO - Acquiring lockfile /tmp/qemu-tap-locks/tap0.lock...
runqemu - INFO - Created tap: tap0
runqemu - INFO - Running ldd /home/simon/yocto/poky/build/tmp/sysroots/x86_64-linux/usr/bin/qemu-system-i386...
runqemu - INFO - Running /home/simon/yocto/poky/build/tmp/sysroots/x86_64-linux/usr/bin/qemu-system-i386 -device virtio-net-pci,netdev=net0,mac=52:54:00:12:34:02 -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -cpu qemu32 -m 256 -drive file=/home/simon/yocto/poky/build/tmp/deploy/images/qemux86/core-image-minimal-qemux86-20170309093853.rootfs.ext4,if=virtio,format=raw -vga vmware -show-cursor -usb -usbdevice tablet -device virtio-rng-pci -kernel /home/simon/yocto/poky/build/tmp/deploy/images/qemux86/bzImage -append 'root=/dev/vda rw highres=off mem=256M ip=192.168.7.2::192.168.7.1:255.255.255.0 vga=0 uvesafb.mode_option=640x480-32 oprofile.timer=1 uvesafb.task_timeout=-1'
No protocol specified
Could not initialize SDL(No available video device) - exiting
runqemu - INFO - Running sudo /home/simon/yocto/poky/scripts/runqemu-ifdown tap0 /home/simon/yocto/poky/build/tmp/sysroots/x86_64-linux
Set 'tap0' nonpersistent
runqemu - INFO - Releasing lockfile for tap device 'tap0'
Traceback (most recent call last):
File "/home/simon/yocto/poky/scripts/runqemu", line 1019, in <module>
ret = main()
File "/home/simon/yocto/poky/scripts/runqemu", line 1012, in main
config.start_qemu()
File "/home/simon/yocto/poky/scripts/runqemu", line 946, in start_qemu
raise Exception('Failed to run %s' % cmd)
Exception: Failed to run /home/simon/yocto/poky/build/tmp/sysroots/x86_64-linux/usr/bin/qemu-system-i386 -device virtio-net-pci,netdev=net0,mac=52:54:00:12:34:02 -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -cpu qemu32 -m 256 -drive file=/home/simon/yocto/poky/build/tmp/deploy/images/qemux86/core-image-minimal-qemux86-20170309093853.rootfs.ext4,if=virtio,format=raw -vga vmware -show-cursor -usb -usbdevice tablet -device virtio-rng-pci -kernel /home/simon/yocto/poky/build/tmp/deploy/images/qemux86/bzImage -append 'root=/dev/vda rw highres=off mem=256M ip=192.168.7.2::192.168.7.1:255.255.255.0 vga=0 uvesafb.mode_option=640x480-32 oprofile.timer=1 uvesafb.task_timeout=-1'
错误分析
错误日志中提示"No protocol specified"
初步判断是X server的问题(X server默认不允许其他用户图形程序的图形显示在当前屏幕)
解决方案
用root用户登录,执行命令
$ xhost +
使所有的用户都能访问X server
当提示"access control disabled, clients can connect from any host"时执行成功
切换回原来的用户继续执行 runqemu qemux86
成功!