使用QEMU模拟树莓派
我们开始设置一个Lab VM。我们将使用Ubuntu并在其中模拟我们所需的ARM版本。
首先,获取最新的Ubuntu版本并在VM中运行它:
对于QEMU仿真,您将需要以下内容:
- Raspbian图像:http : //downloads.raspberrypi.org/raspbian/images/raspbian-2017-04-10/ (其他版本可能工作,但推荐Jessie)
- 最新的qemu内核:https://github.com/dhruvvyas90/qemu-rpi-kernel
在Ubuntu VM里面,创建一个新的文件夹:
$ mkdir〜/ qemu_vms /
下载并放置Raspbian Jessie图像到〜/ qemu_vms /。
下载并将qemu-kernel放置到〜/ qemu_vms /。
$ sudo apt-get install qemu-system
$ unzip <image-file> .zip
$ fdisk -l <image-file>
你应该看到这样的东西:
磁盘2017-03-02-raspbian-jessie.img:4.1 GiB,4393533440字节,8581120扇区
单位:1 * 512 = 512字节的扇区
扇区大小(逻辑/物理):512字节/ 512字节
I / O大小(最小/最佳):512字节/ 512字节
Disklabel类型:dos
磁盘标识符:0x432b3940 设备引导启动结束扇区大小ID类型
2017-03-02-raspbian-jessie.img1 8192 137215 129024 63M c W95 FAT32(LBA)
2017-03-02-raspbian-jessie.img2 137216 8581119 8443904 4G 83 Linux
你会发现文件系统(.img2)从扇区137216开始。现在取这个值并乘以512,在这个例子中是512 * 137216 = 70254592字节。在以下命令中将此值用作偏移量:
$ sudo mkdir / mnt / raspbian
$ sudo mount -v -o offset = 70254592 -t ext4〜 / qemu_vms / <your-img-file.img> / mnt / raspbian
$ sudo nano /mnt/raspbian/etc/ld.so.preload
使用“#”注释掉该文件中的每个条目,使用Ctrl-x»Y保存并退出。
$ sudo nano / mnt / raspbian / etc / fstab
如果你在fstab中看到任何有mmcblk0的东西,那么:
- 用/ dev / sda1替换包含/ dev / mmcblk0p1的第一个条目
- 用/ dev / sda2替换第二个包含/ dev / mmcblk0p2的项,保存并退出。
$ cd〜
$ sudo umount / mnt / raspbian
现在你可以使用下面的命令在Qemu上模拟它:
$ qemu-system-arm -kernel〜/ qemu_vms / <your-kernel-qemu> -cpu arm1176 -m 256 -M versatilepb -serial stdio -append“root = / dev / sda2 rootfstype = ext4 rw”-hda〜/ qemu_vms / <your-jessie-image.img> -redir tcp:5022 :: 22 -no-reboot
如果您看到Raspbian OS的GUI,则需要进入终端。使用Win键获取菜单,然后使用箭头键导航,直到找到Terminal应用程序,如下所示。
从终端上,您需要启动SSH服务,以便您可以从您的主机系统(您从其启动qemu的系统)访问它。
现在,您可以使用(默认密码 - 树莓派)从主机系统进行SSH连接:
$ ssh pi@127.0.0.1 -p 5022
有关更高级的网络设置,请参阅下面的“高级网络”一节。
故障排除
如果默认情况下启动时SSH模拟器没有启动,您可以使用以下命令更改Pi终端内的内容:
$ sudo update-rc.d ssh enable
如果您的模拟Pi启动GUI,并且想要在启动时以控制台模式启动,请在Pi终端中使用以下命令:
$ sudo raspi-config
>选择3 - 引导选项
>选择B1 - 桌面/ CLI
>选择B2 - 控制台自动登录
如果您的鼠标没有在仿真的Pi中移动,请单击<Windows>,向下箭头至附件,向右箭头,向下箭头至终端,输入。
调整Raspbian图像的大小
一旦你完成了设置,你的图像上总共剩下3,9GB,已满。要放大Raspbian图像,请在Ubuntu机器上执行以下步骤:
创建现有图像的副本:
$ cp <your-raspbian-jessie> .img rasbian.img
运行此命令来调整您的副本的大小:
$ qemu-img resize raspbian.img + 6G
现在开始使用放大图像作为第二个硬盘的原始raspbian:
$ sudo qemu-system-arm -kernel〜/ qemu_vms / <kernel-qemu> -cpu arm1176 -m 256 -M versatilepb -serial stdio -append“root = / dev / sda2 rootfstype = ext4 rw”-hda〜/ qemu_vms / <your-original-raspbian-jessie> .img -redir tcp:5022 :: 22 -no-reboot -hdb raspbian.img
登录并运行:
$ sudo cfdisk / dev / sdb
删除第二个分区(sdb2),并创建一个包含所有可用空间的新分区。一旦创建新的分区,使用写入提交更改。然后退出 cfdisk。
调整大小并检查旧分区并关闭。
$ sudo resize2fs / dev / sdb2
$ sudo fsck -f / dev / sdb2
$ sudo halt
现在您可以用放大的图像启动QEMU:
$ sudo qemu-system-arm -kernel〜/ qemu_vms / <kernel-qemu> -cpu arm1176 -m 256 -M versatilepb -serial stdio -append“root = / dev / sda2 rootfstype = ext4 rw”-hda〜/ qemu_vms / raspbian.img -redir tcp:5022 :: 22
高级网络
在某些情况下,您可能需要访问在QEMU中运行的虚拟机的所有端口。例如,你运行一些二进制文件,打开你想要从主机(Ubuntu)系统访问/模糊的一些网络端口。为此,我们可以创建一个共享网络接口(tap0),它允许我们访问所有打开的端口(如果这些端口没有绑定到127.0.0.1)。感谢 @ 0xMitsurugi建议将其包含在本教程中。
这可以通过HOST(Ubuntu)系统上的以下命令来完成:
azeria @ labs:〜$ sudo apt-get install uml-utilities
azeria @ labs:〜$ sudo tunctl -t tap0 -u azeria
azeria @ labs:〜$ sudo ifconfig tap0 172.16.0.1/24
在这些命令之后,您应该在ifconfig输出中看到tap0接口。
azeria @ labs:〜$ ifconfig tap0
tap0:flags = 4099 <UP,BROADCAST,MULTICAST> mtu 1500
inet 172.16.0.1网络掩码255.255.255.0广播172.16.0.255
醚22:a8:a9:d3:95:f1 txqueuelen 1000(以太网)
RX数据包0字节0(0.0 B)
RX错误0丢弃0超限0帧0
TX分组0字节0(0.0 B)
TX错误0丢弃0超载0载波0碰撞0
您现在可以使用以下命令启动您的QEMU VM:
azeria @ labs:〜$ sudo qemu-system-arm -kernel〜/ qemu_vms / <kernel-qemu> -cpu arm1176 -m 256 -M versatilepb -serial stdio -append“root = / dev / sda2 rootfstype = ext4 rw” - hda〜/ qemu_vms / rasbian.img -net nic -net tap,ifname = tap0,script = no,下标= no -no-reboot
当QEMU虚拟机启动时,需要使用以下命令为其eth0接口分配一个IP:
pi @ labs:〜$ sudo ifconfig eth0 172.16.0.2/24
如果一切顺利的话,你应该能够通过你的HOST(Ubuntu)系统访问GUEST(Raspbian)上的开放端口。你可以用一个netcat(nc)工具来测试这个(见下面的例子)。
使用QEMU模拟树莓派的更多相关文章
- RPi 2B QEMU 模拟树莓派
/******************************************************************************** * RPi 2B QEMU 模拟树莓 ...
- qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统
qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和linux kernel,达到与开发板上一样的学习效果! 虽然已经买了2440开发板,但是在实际学习 ...
- 利用qemu模拟嵌入式系统制作全过程
http://www.tinylab.org/using-qemu-simulation-inserts-the-type-system-to-produce-the-whole-process/ 利 ...
- 以Qemu模拟Linux,学习Linux内核
文章名称:以Qemu模拟Linux,学习Linux内核作 者:five_cent文章地址:http://www.cnblogs.com/senix/archive/2013/02/21/29 ...
- qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统【转】
转自:http://www.cnblogs.com/riskyer/p/3366001.html qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和l ...
- 在qemu模拟的aarch32上使用kgtp
KGTP 介绍 KGTP 是一个能在产品系统上实时分析 Linux 内核和应用程序(包括 Android)问题的全面动态跟踪器. 使用 KGTP 不需要 在 Linux 内核上打 PATCH 或者重新 ...
- 用Qemu模拟vexpress-a9 (一) --- 搭建Linux kernel调试环境【转】
转自:http://www.cnblogs.com/pengdonglin137/p/5023342.html#_label2 阅读目录(Content) 环境介绍: 下载Linux内核 安装arm的 ...
- 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】
转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...
- ubuntu下使用qemu模拟ARM(六)------驱动程序【转】
转自:http://blog.csdn.net/rfidunion/article/details/54709843 驱动程序分为在ubuntu上运行和在ARM开发板上运行两种,我们分别来进行测试 1 ...
随机推荐
- VS2015服务器资源管理器连接Mysql数据库
下载安装文件mysql-for-visualstudio-1.2.3.msi 下载成功后执行安装,选择change-->选择Custom安装成功后,发现vs中没有效果. 注意这里再次执行安装文件 ...
- Botanical Dimensions:借助第九代智能英特尔® 酷睿™ 处理器实现独特沉浸式体验
本文介绍位于洛杉矶的互动体验设计工作室 Master of Shapes (MOS) 打造 Botanical Dimensions 时所做出的技术努力.在这种互动式多世界体验中,参与者将穿越丛林,寻 ...
- Python-数据库索引浅谈
检索原理 检索初识 索引在MySQL中是一种"键",是存储引擎用于快速找到记录的一种数据结构.索引对于良好的检索性能,非常关键,尤其是当表中的数据量越大,索引对于性能的提升越显 ...
- 【LeetCode】打家劫舍系列(I、II、III)
打家劫舍(House Robber)是LeetCode上比较典型的一个题目,涉及三道题,主要解题思想是动态规划,将三道题依次记录如下: (一)打家劫舍 题目等级:198.House Robber( ...
- U盘安装Ubuntu Server CD-ROM挂载失败
U盘安装 Ubuntu Server 发生Failed to copy file from CD-ROM问题 使用UltraISO制作Ubuntu Server安装盘,在安装过程中出现[!!] Loa ...
- 【神经网络与深度学习】Google Protocol Buffer介绍
简介 什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍: Google Protocol Buffer( 简称 Protobuf) 是 Googl ...
- 51CTO下载-html+javascript+css学习宝典
一.html知识 1. meta标签 Meta: 提供网页信息,搜索引擎使用 <meta name=“aa” content=“bbb”> <meta http-equiv=“exp ...
- dstat 好用的命令 cpu mem io
1.dstat dstat -lrpm --top-io --top-mem --top-cpu 2.安装 yum -y install dstat
- 旗舰版win7系统中GraphEdit执行Loading a Graph From an External Process失败对策
操作系统:旗舰版win7 DirectShow SDK: 9.0 IDE环境:VS2008 以下代码参考MSDN: HRESULT AddToRot(IUnknown *pUnkGraph, DWOR ...
- Series与list
一.索引 1.1 索引顺序 list的索引为从0到n-1.不可更改索引. Series的索引:如果未定义为从0到n-1.如果定义,则为定义的索引,一旦定义完成,索引对象将不可更改.但是索引是可以改变的 ...