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里面,创建一个新的文件夹:

  1. $ mkdir〜/ qemu_vms /

下载并放置Raspbian Jessie图像到〜/ qemu_vms /。

下载并将qemu-kernel放置到〜/ qemu_vms /。

  1. $ sudo apt-get install qemu-system
  2. $ unzip <image-file> .zip
  3. $ fdisk -l <​​image-file>

你应该看到这样的东西:

  1. 磁盘2017-03-02-raspbian-jessie.img4.1 GiB4393533440字节,8581120扇区
  2. 单位:1 * 512 = 512字节的扇区
  3. 扇区大小(逻辑/物理):512字节/ 512字节
  4. I / O大小(最小/最佳):512字节/ 512字节
  5. Disklabel类型:dos
  6. 磁盘标识符:0x432b3940
  7.  
  8. 设备引导启动结束扇区大小ID类型
  9. 2017-03-02-raspbian-jessie.img1 8192 137215 129024 63M c W95 FAT32LBA
  10. 2017-03-02-raspbian-jessie.img2      137216 8581119 8443904 4G 83 Linux

你会发现文件系统(.img2)从扇区137216开始。现在取这个值并乘以512,在这个例子中是512 * 137216 = 70254592字节。在以下命令中将此值用作偏移量:

  1. $ sudo mkdir / mnt / raspbian
  2. $ sudo mount -v -o offset = 70254592 -t ext4 / qemu_vms / <your-img-file.img> / mnt / raspbian
  3. $ sudo nano /mnt/raspbian/etc/ld.so.preload

使用“#”注释掉该文件中的每个条目,使用Ctrl-x»Y保存并退出。

  1. $ sudo nano / mnt / raspbian / etc / fstab

如果你在fstab中看到任何有mmcblk0的东西,那么:

  1. 用/ dev / sda1替换包含/ dev / mmcblk0p1的第一个条目
  2. 用/ dev / sda2替换第二个包含/ dev / mmcblk0p2的项,保存并退出。
  1. $ cd
  2. $ sudo umount / mnt / raspbian

现在你可以使用下面的命令在Qemu上模拟它:

  1. $ qemu-system-arm -kernel〜/ qemu_vms / <your-kernel-qemu> -cpu arm1176 -m 256 -M versatilepb -serial stdio -appendroot = / dev / sda2 rootfstype = ext4 rw”-hda〜/ qemu_vms / <your-jessie-image.img> -redir tcp5022 :: 22 -no-reboot

如果您看到Raspbian OS的GUI,则需要进入终端。使用Win键获取菜单,然后使用箭头键导航,直到找到Terminal应用程序,如下所示。

从终端上,您需要启动SSH服务,以便您可以从您的主机系统(您从其启动qemu的系统)访问它。

现在,您可以使用(默认密码 - 树莓派)从主机系统进行SSH连接:

  1. $ ssh pi@127.0.0.1 -p 5022

有关更高级的网络设置,请参阅下面的“高级网络”一节。

故障排除

如果默认情况下启动时SSH模拟器没有启动,您可以使用以下命令更改Pi终端内的内容:

  1. $ sudo update-rc.d ssh enable

如果您的模拟Pi启动GUI,并且想要在启动时以控制台模式启动,请在Pi终端中使用以下命令:

  1. $ sudo raspi-config
  2. >选择3 - 引导选项
  3. >选择B1 - 桌面/ CLI
  4. >选择B2 - 控制台自动登录

如果您的鼠标没有在仿真的Pi中移动,请单击<Windows>,向下箭头至附件,向右箭头,向下箭头至终端,输入。

调整Raspbian图像的大小

一旦你完成了设置,你的图像上总共剩下3,9GB,已满。要放大Raspbian图像,请在Ubuntu机器上执行以下步骤:

创建现有图像的副本:

  1. $ cp <your-raspbian-jessie> .img rasbian.img

运行此命令来调整您的副本的大小:

  1. $ qemu-img resize raspbian.img + 6G

现在开始使用放大图像作为第二个硬盘的原始raspbian:

  1. $ sudo qemu-system-arm -kernel〜/ qemu_vms / <kernel-qemu> -cpu arm1176 -m 256 -M versatilepb -serial stdio -appendroot = / dev / sda2 rootfstype = ext4 rw”-hda〜/ qemu_vms / <your-original-raspbian-jessie> .img -redir tcp5022 :: 22 -no-reboot -hdb raspbian.img

登录并运行:

  1. $ sudo cfdisk / dev / sdb

删除第二个分区(sdb2),并创建一个包含所有可用空间的新分区。一旦创建新的分区,使用写入提交更改。然后退出 cfdisk。

调整大小并检查旧分区并关闭。

  1. $ sudo resize2fs / dev / sdb2
  2. $ sudo fsck -f / dev / sdb2
  3. $ sudo halt

现在您可以用放大的图像启动QEMU:

  1. $ sudo qemu-system-arm -kernel〜/ qemu_vms / <kernel-qemu> -cpu arm1176 -m 256 -M versatilepb -serial stdio -appendroot = / dev / sda2 rootfstype = ext4 rw”-hda〜/ qemu_vms / raspbian.img -redir tcp5022 :: 22

高级网络

在某些情况下,您可能需要访问在QEMU中运行的虚拟机的所有端口。例如,你运行一些二进制文件,打开你想要从主机(Ubuntu)系统访问/模糊的一些网络端口。为此,我们可以创建一个共享网络接口(tap0),它允许我们访问所有打开的端口(如果这些端口没有绑定到127.0.0.1)。感谢  @ 0xMitsurugi建议将其包含在本教程中。

这可以通过HOST(Ubuntu)系统上的以下命令来完成:

  1. azeria @ labs:〜$ sudo apt-get install uml-utilities
  2. azeria @ labs:〜$ sudo tunctl -t tap0 -u azeria
  3. azeria @ labs:〜$ sudo ifconfig tap0 172.16.0.1/24

在这些命令之后,您应该在ifconfig输出中看到tap0接口。

  1. azeria @ labs:〜$ ifconfig tap0
  2. tap0flags = 4099 <UPBROADCASTMULTICAST> mtu 1500
  3. inet 172.16.0.1网络掩码255.255.255.0广播172.16.0.255
  4. 22a8a9d395f1 txqueuelen 1000(以太网)
  5. RX数据包0字节00.0 B
  6. RX错误0丢弃0超限00
  7. TX分组0字节00.0 B
  8. TX错误0丢弃0超载0载波0碰撞0

您现在可以使用以下命令启动您的QEMU VM:

  1. azeria @ labs:〜$ sudo qemu-system-arm -kernel〜/ qemu_vms / <kernel-qemu> -cpu arm1176 -m 256 -M versatilepb -serial stdio -appendroot = / dev / sda2 rootfstype = ext4 rw - hda〜/ qemu_vms / rasbian.img -net nic -net tapifname = tap0script = no,下标= no -no-reboot

当QEMU虚拟机启动时,需要使用以下命令为其eth0接口分配一个IP:

  1. 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. 阶段3 3.SpringMVC·_06.异常处理及拦截器_1 SpringMVC异常处理之分析和搭建环境

    异常一级一级的抛出 前端控制器,调用异常处理器组件 搭建环境 注意下面两个的结尾的名称要个 Module Name对应起来. 导入开发的坐标 复制upload这个项目里面的 编程和生成 改成1.8 配 ...

  2. vs code 设置 保存自动格式化vue代码

    配置 ESLint (需安装 Prettier - Code formatter 插件) command + shift + p  打开用户设置 // vscode默认启用了根据文件类型自动设置tab ...

  3. MybatisPlus使用代码篇

    package spring.server.consumer; import com.baomidou.mybatisplus.annotation.DbType; import com.baomid ...

  4. 类属性与对象实现,init方法的作用,绑定方法,绑定方法与普通函数的区别,继承,抽象与继承,派生与覆盖

    今日内容: 1.类属性与对象属性 2.init方法的作用 3.绑定方法 4.绑定方法与普通函数的区别(非绑定方法) 5.继承 6.抽象与继承 7.派生与覆盖 1.类属性与对象属性 类中应该进存储所有对 ...

  5. 1 基于梯度的攻击——FGSM

    FGSM原论文地址:https://arxiv.org/abs/1412.6572 1.FGSM的原理 FGSM的全称是Fast Gradient Sign Method(快速梯度下降法),在白盒环境 ...

  6. MSF魔鬼训练营-5.3 MS08-067安全漏洞实战

    msf > search ms08_067 Matching Modules ================    Name                                 D ...

  7. Redhat更换Centos源

    redhat默认自带的yum源需要注册,才能更新,报错: This system is not registered to Red Hat Subscription Management. You c ...

  8. [转帖]Oracle 数据库官方不支持VMWare

    Oracle 数据库官方不支持VMWare [日期:2014-05-13] 来源:Linux社区  作者:myhuaer [字体:大 中 小]   https://www.linuxidc.com/L ...

  9. SQL之事务

    ●事务的ACID(acid)属性 ➢1.原子性(Atomicity ) 原子性是指事务是-一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生. ➢2. 一致性(Consistency) 事务 ...

  10. 使用request+bs4爬取所有股票信息

    爬取前戏 我们要知道利用selenium是非常无敌的,自我认为什么反爬不反爬都不在话下,但是今天我们为什么要用request+bs4爬取所有股票信息呢?因为他比较原始,因此今天的数据,爬取起来也是比较 ...