• 使用QEMU模拟树莓派


    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)工具来测试这个(见下面的例子)。

  • 相关阅读:
    定制博客园CSS
    后记:Cookie安全大辩论总结
    硬造的轮子趟过的坑--浮点型转字符串函数
    支付宝Cookie高危漏洞引发的思考
    博客园人氣提升密籍
    写个PHP框架吧
    开发一个程序员专用的搜索引擎
    三种常见网站工程师招聘条件总结
    golang之vscode环境配置
    golang环境安装
  • 原文地址:https://www.cnblogs.com/HacTF/p/7773671.html
Copyright © 2020-2023  润新知