Yocto
Yocto系列讲解[入门篇] 1 - 快速入门熟悉Yocto的构建
Yocto系列讲解[入门篇] 2 - 演示运行qemux86-64虚拟机
Yocto系列讲解[理论篇] 3 - meta layer recipe class概念介绍
Yocto系列讲解[入门篇] 4 - 创建自己的meta layer
Yocto系列讲解[入门篇] 5 - 在meta-mylayer中添加helloworld recipe
Yocto系列讲解[理论篇] 6 - yocto是什么,学习它不难
Yocto系列讲解[实战篇] 7 - 开发工具devtool实操(创建新项目helloyocto)
Yocto系列讲解[实战篇] 8 - 开发工具devtool实操(添加git项目learnyocto)
Yocto系列讲解[实战篇] 9 - devtool验证并将learnyocto添加到meta-mylayer中
Yocto系列讲解[实战篇] 10 - 在qemux86机器运行时安装程序
Yocto系列讲解[实战篇] 11 - 在qemux86机器运行时卸载删除程序
Yocto系列讲解[实战篇]12 - 修改开源项目的代码(1)
Yocto系列讲解[技巧篇]13 - devtool修改workspace目录位置
Yocto系列讲解[技巧篇]14 - devtool edit-recipe命令(编辑bb文件命令)
本文档使用 MrDoc 发布
-
+
首页
Yocto系列讲解[入门篇] 2 - 演示运行qemux86-64虚拟机
#### 目录 - [编译完成](#编译完成) - [运行虚拟机错误情形](#运行虚拟机错误情形) - [运行qemux86-64虚拟机](#运行qemux86-64虚拟机) - [不依赖桌面环境运行qemu](#不依赖桌面环境运行qemu) - [登录qemux86-64虚拟机](#登录qemux86-64虚拟机) - [在Ubuntu桌面环境中运行](#在Ubuntu桌面环境中运行) ### 编译完成 继续上一篇:[Yocto系列讲解 (入门篇) 1 - 快速入门熟悉Yocto的构建](https://fulinux.blog.csdn.net/article/details/108910914) 已经编译完成了,第一次编译时间比较就主要是要构建所有的项目,包括交叉编译环境、BootLoader(u-boot/LK/abl)、Linux kernel(boot.img)、Busybox各种程序等,最后制作和输出文件系统。输出的东西都在这里: poky]$ ls build/tmp/deploy/images/qemux86-64/* ### 运行虚拟机错误情形 $ cd poky/ $ source oe-init-build-env $ runqemu qemux86 runqemu - INFO - Running MACHINE=qemux86 bitbake -e ... runqemu - ERROR - /home/peeta/poky/build/tmp/deploy/images/qemux86 not a directory valid DEPLOY_DIR_IMAGE ls: 无法访问'/home/peeta/poky/build/tmp/deploy/images/qemux86/*.qemuboot.conf': 没有那个文件或目录 runqemu - ERROR - Command 'ls -t /home/peeta/poky/build/tmp/deploy/images/qemux86/*.qemuboot.conf' returned non-zero exit status 2 runqemu - INFO - Cleaning up 提示无法访问/home/peeta/poky/build/tmp/deploy/images/qemux86/*.qemuboot.conf文件,查找原因: $ ls -l /home/peeta/poky/build/tmp/deploy/images/qemux86/*.qemuboot.conf ls: 无法访问'/home/peeta/poky/build/tmp/deploy/images/qemux86/*.qemuboot.conf': 没有那个文件或目录 原因是没有这个路径或者文件,但是有 /home/peeta/poky/build/tmp/deploy/images/qemux86-64/ ### 运行qemux86-64虚拟机 我们在运行runqemu后面的目标机器错了,不是`qemux86`而是`qemux86-64`(后者是64位的),因此,前面的命令修改运行如下: $ runqemu qemux86-64 runqemu - INFO - Running MACHINE=qemux86-64 bitbake -e ... runqemu - INFO - Continuing with the following parameters: KERNEL: [/home/peeta/poky/build/tmp/deploy/images/qemux86-64/bzImage--5.4.50+git0+416566e1f0_94667198aa-r0-qemux86-64-20201003082353.bin] MACHINE: [qemux86-64] FSTYPE: [ext4] ROOTFS: [/home/peeta/poky/build/tmp/deploy/images/qemux86-64/core-image-sato-qemux86-64-20201003082353.rootfs.ext4] CONFFILE: [/home/peeta/poky/build/tmp/deploy/images/qemux86-64/core-image-sato-qemux86-64-20201003082353.qemuboot.conf] runqemu - INFO - Setting up tap interface under sudo [sudo] peeta 的密码: (提示输入超级用户密码) runqemu - INFO - Network configuration: ip=192.168.7.2::192.168.7.1:255.255.255.0 runqemu - INFO - Running /home/peeta/poky/build/tmp/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native/usr/bin/qemu-system-x86_64 -device virtio-net-pci,netdev=net0,mac=52:54:00:12:34:02 -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -drive file=/home/peeta/poky/build/tmp/deploy/images/qemux86-64/core-image-sato-qemux86-64-20201003082353.rootfs.ext4,if=virtio,format=raw -show-cursor -usb -device usb-tablet -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0 -cpu core2duo -m 512 -serial mon:vc -serial null -kernel /home/peeta/poky/build/tmp/deploy/images/qemux86-64/bzImage--5.4.50+git0+416566e1f0_94667198aa-r0-qemux86-64-20201003082353.bin -append 'root=/dev/vda rw mem=512M ip=192.168.7.2::192.168.7.1:255.255.255.0 oprofile.timer=1 ' runqemu - ERROR - Failed to run qemu: Could not initialize SDL(x11 not available) - exiting runqemu - INFO - Cleaning up Set 'tap0' nonpersistent 上面运行的结果显示失败了,重点关注下这个错误提示: runqemu - ERROR - Failed to run qemu: Could not initialize SDL(x11 not available) - exiting 其中关键词`x11`通常就是与显示相关的内容,说明失败的原因是`run qemu qemux86-64`机器需要在ubuntu桌面环境下才能运行,不能在`secureCRT`或其他第三方linux终端中运行。 ### 不依赖桌面环境运行qemu 由于我使用的是`secureCRT`登录远程Ubuntu服务器的场景,因此,首先尝试不依赖于Ubuntu桌面环境的情况下运行`qemux86-64`。下面是启动虚拟机的配置信息 -device virtio-net-pci,netdev=net0,mac=52:54:00:12:34:02 -netdev tap,id=net0,ifname=tap0,script=no,downscript=no -drive file=/home/peeta/poky/build/tmp/deploy/images/qemux86-64/core-image-sato-qemux86-64-20201003082353.rootfs.ext4,if=virtio,format=raw -show-cursor -usb -device usb-tablet -object rng-random,filename=/dev/urandom,id=rng0 -device virtio-rng-pci,rng=rng0 -cpu core2duo -m 512 -serial mon:vc -serial null -kernel /home/peeta/poky/build/tmp/deploy/images/qemux86-64/bzImage--5.4.50+git0+416566e1f0_94667198aa-r0-qemux86-64-20201003082353.bin -append 'root=/dev/vda rw mem=512M ip=192.168.7.2::192.168.7.1:255.255.255.0 oprofile.timer=1 ' 我们现在使用的机器`MACHINE`名字是`qemux86-64`,对应的`MACHINE`配置文件是: meta/conf/machine/qemux86-64.conf  红框中是其他一个配置文件,相当于头文件。 在`meta/conf/machine/include/qemu.inc`文件中有这样一个配置: MACHINE_FEATURES = "alsa bluetooth usbgadget screen vfat" 其中有个`screen`,我们的qemux86-64机器有`screen`特性`FEATURES`,这里我们删除`screen`试试看: MACHINE_FEATURES = "alsa bluetooth usbgadget vfat" 在poky/build/conf/local.conf文件中发现这一段话:  与上面错误提示“Could not initialize SDL”中的SDL对上了,看看能不能去掉,试试屏蔽该行: #PACKAGECONFIG_append_pn-qemu-system-native = " sdl" 然后,重新source和编译: $ source oe-init-build-env $ bitbake core-image-sato 编译完成后运行,这次就没有出错了:  从图中可以看到`qemux86-64`虚拟机的网络地址是`192.168.7.2`, 而且我的Ubuntu系统可以ping通这个虚拟机(Ubuntu系统自身的网络地址:10.66.10x.xxx,说明qemu虚拟机模拟出来的网卡是可以访问到的,不必考虑是否有相同网关),ping过程如下:  ### 登录qemux86-64虚拟机 不过突然想到有了网络可以尝试用telnet或者ssh登录,果然是可以的,打开另外一个终端,输入如下命令即可登录: $ ssh root@192.168.7.2  登录后简单了解下这个虚拟机: root@qemux86-64:/# cat /proc/cmdline root=/dev/vda rw mem=512M ip=192.168.7.2::192.168.7.1:255.255.255.0 oprofile.timer=1 root@qemux86-64:/# mount /dev/root on / type ext4 (rw,relatime) devtmpfs on /dev type devtmpfs (rw,relatime,size=244932k,nr_inodes=61233,mode=755) proc on /proc type proc (rw,relatime) tmpfs on /mnt/.psplash type tmpfs (rw,relatime,size=40k) sysfs on /sys type sysfs (rw,relatime) debugfs on /sys/kernel/debug type debugfs (rw,relatime) tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755) tmpfs on /var/volatile type tmpfs (rw,relatime) devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620,ptmxmode=000) nfsd on /proc/fs/nfsd type nfsd (rw,relatime) 这样我们使用[yocto](https://so.csdn.net/so/search?q=yocto&spm=1001.2101.3001.7020)构建的第一个qemux86-64虚拟机就跑起来了,是不是很顺利呢? ### 在Ubuntu桌面环境中运行 $ runqemu qemux86-64 启动界面:  看这个启动log,`qemux86-64`是没有使用`uboot`的,而是自带的`seaBIOS`引导了内核启动。  随后出现`yocto`画面:  启动完成的画面:  任意操作:  打开终端应用:  打开文件管理器,在/home/root下创建文件: 
admin
2024年2月4日 16:56
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码