QEMU上的树莓派

我们开始设置一个Lab VM。我们将使用Ubuntu并在其中模拟我们所需的ARM版本。

首先,获取最新的Ubuntu版本并在VM中运行它:

对于QEMU仿真,您将需要以下内容:

  1. Raspbian图像:http :  //downloads.raspberrypi.org/raspbian/images/raspbian-2017-04-10/  (其他版本可能工作,但推荐Jessie)
  2. 最新的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的东西,那么:

  1. 用/ dev / sda1替换包含/ dev / mmcblk0p1的第一个条目
  2. 用/ 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模拟树莓派的更多相关文章

  1. RPi 2B QEMU 模拟树莓派

    /******************************************************************************** * RPi 2B QEMU 模拟树莓 ...

  2. qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统

    qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和linux kernel,达到与开发板上一样的学习效果! 虽然已经买了2440开发板,但是在实际学习 ...

  3. 利用qemu模拟嵌入式系统制作全过程

    http://www.tinylab.org/using-qemu-simulation-inserts-the-type-system-to-produce-the-whole-process/ 利 ...

  4. 以Qemu模拟Linux,学习Linux内核

    文章名称:以Qemu模拟Linux,学习Linux内核作      者:five_cent文章地址:http://www.cnblogs.com/senix/archive/2013/02/21/29 ...

  5. qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统【转】

    转自:http://www.cnblogs.com/riskyer/p/3366001.html qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和l ...

  6. 在qemu模拟的aarch32上使用kgtp

    KGTP 介绍 KGTP 是一个能在产品系统上实时分析 Linux 内核和应用程序(包括 Android)问题的全面动态跟踪器. 使用 KGTP 不需要 在 Linux 内核上打 PATCH 或者重新 ...

  7. 用Qemu模拟vexpress-a9 (一) --- 搭建Linux kernel调试环境【转】

    转自:http://www.cnblogs.com/pengdonglin137/p/5023342.html#_label2 阅读目录(Content) 环境介绍: 下载Linux内核 安装arm的 ...

  8. 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】

    转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/ [背景] 手 ...

  9. ubuntu下使用qemu模拟ARM(六)------驱动程序【转】

    转自:http://blog.csdn.net/rfidunion/article/details/54709843 驱动程序分为在ubuntu上运行和在ARM开发板上运行两种,我们分别来进行测试 1 ...

随机推荐

  1. 求一个整型数字中有没有相同的部分,例如12386123这个整型数字中相同的部分是123,相同的部分至少应该是2位数,如果有相同部分返回1,如果没有则返回0。方法是先将整型数字转换到数组中,再判断。函数为 int same(int num)其中num是输入的整型数字

    import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Test { pub ...

  2. Mysql(一)、索引研究

    一.索引简介 1. 为什么要使用索引 查询高效 2. 什么样的信息能成为索引 主键,唯一键,普通键等 二.优化你的索引 1. 二叉查找树 二叉查找树,也称二叉搜索树,或二叉排序树.其定义也比较简单,要 ...

  3. 使用rman备份将rac环境恢复到单实例

    使用rman备份将rac环境恢复到单实例 rac环境 [oracle@rac02 ~]$ cat /etc/hosts 127.0.0.1 localhost localhost.localdomai ...

  4. Python:Base3(函数,切片,迭代,列表生成式)

    1.Python之调用函数: Python内置了很多有用的函数,我们可以直接调用. 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数 abs,它接收一个参数. 可以直接从Python的官方 ...

  5. k8s 删除ns 卡住的解决办法

    在某些情况下,在k8s中会无法删除某个namespace,它会一直卡在terminating状态下.解决这个问题的步骤为: kubectl api-resources --verbs=list --n ...

  6. 用fiddler来学http协议:为什么会有“response body is encoded click to decode”

    使用fiddler查看服务器返回的响应包的时候,我们常常会看到“response body is encoded click to decode”这样一个提示,只有点击它才能让响应包的主体内容从乱码变 ...

  7. Windows下的开发辅助神器——Chocolate Package Manager

    Windows下的开发辅助神器——Chocolate Package Manager:https://juejin.im/post/5c6cb3acf265da2dc4537235 Windows上的 ...

  8. 1.docker 慕课入门

    本文是学习慕课网的实战https://www.imooc.com/learn/824  同时结合菜鸟教程的思想https://www.runoob.com/docker/docker-architec ...

  9. sqlalchemy映射数据库

    from sqlalchemy import create_engine,Column,Integer,String from sqlalchemy.ext.declarative import de ...

  10. PTA(Advanced Level)1036.Boys vs Girls

    This time you are asked to tell the difference between the lowest grade of all the male students and ...