简介

当前我们安装虚拟机,一般小端机器比较多,有时候想模拟大端机器测试程序,这时就有模拟大端机器的需求。

参考:利用 QEMU USER 模式运行 mips 程序 - sinpo828 - 博客园 (cnblogs.com)

根据这个博客的描述,可以实现大端机器的需求,其实现是模拟MIPS架构的环境。

需要使用到QEMU模拟处理器,QEMU主要有两种模拟模式:

  • System Mode:它可以虚拟多种CPU架构的虚拟计算机系统,比如可以在x86 的 Ubuntu系统中虚拟出一个MIPS架构的Debian系统。
  • User Mode:它可以运行为其他处理器编写的应用程序,比如可以在X64 Ubuntu系统中直接运行 MIPS Linux的应用程序。

步骤

注意:安装的虚拟机是Ubuntu系统。

  1. 安装QEMU支持MIPS架构:

    $ apt install qemu-user-static qemu-system-mips
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    qemu-system-mips is already the newest version (1:2.5+dfsg-5ubuntu10.51).
    qemu-system-mips set to manually installed.
    The following packages will be REMOVED:
    qemu-user-binfmt
    The following NEW packages will be installed:
    qemu-user-static
    0 upgraded, 1 newly installed, 1 to remove and 1 not upgraded.
    Need to get 7,592 kB of archives.
    After this operation, 85.9 MB of additional disk space will be used.
    Do you want to continue? [Y/n] y
    Get:1 http://mirrors.aliyun.com/ubuntu xenial-updates/universe amd64 qemu-user-static amd64 1:2.5+dfsg-5ubuntu10.51 [7,592 kB]
    Fetched 7,592 kB in 2s (3,777 kB/s)
    (Reading database ... 221693 files and directories currently installed.)
    Removing qemu-user-binfmt (1:2.5+dfsg-5ubuntu10.51) ...
    Selecting previously unselected package qemu-user-static.
    (Reading database ... 221693 files and directories currently installed.)
    Preparing to unpack .../qemu-user-static_1%3a2.5+dfsg-5ubuntu10.51_amd64.deb ...
    Unpacking qemu-user-static (1:2.5+dfsg-5ubuntu10.51) ...
    Processing triggers for man-db (2.7.5-1) ...
    Setting up qemu-user-static (1:2.5+dfsg-5ubuntu10.51) ...
  2. 安装编译MIPS架构的GCC工具:

    $ apt install gcc-mips-linux-gnu
    Reading package lists... Done
    Building dependency tree
    Reading state information... Done
    The following additional packages will be installed:
  3. 编写测试程序进行测试

    $ more xx.c
    #include <stdio.h>
    #include <endian.h> int main()
    {
    int x = 0x1234;
    printf("0x%x, htole32 0x%x, htobe32 0x%x\n", x, htole32(x), htobe32(x));
    return 0;
    }
  4. 编译,可看出编译出的程序时MSB,大端序的。

    需要注意的是要加上 -static的编译选项否则运行时候会提示找不到链接库。

    $ mips-linux-gnu-gcc -static xx.c
    [root@ubuntu] ~
    $ file a.out
    a.out: ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=48929411066f86d58ed7855e545b980bc92fd75b, not stripped
  5. 运行

    $ qemu-mips-static ./a.out
    0x1234, htole32 0x34120000, htobe32 0x1234

利用QEMU模拟大端序机器的更多相关文章

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

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

  2. CentOS 7 利用qemu模拟ARM vexpress A9开发板

    听说qemu用于仿真arm很不错,今日就来试了一把.由于刚刚开始,了解的并不多.本文仅仅记录Qemu装载Linux kernel和busybox根文件系统的过程.后续将会深入了解仿真的其他内容. 先上 ...

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

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

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

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

  5. 利用fiddler模拟发送json数据的post请求

    fiddler是调试利器,有许多好用的功能,这里简单的介绍一下利用fiddler模拟发送post请求的例子 先简单介绍一下失败的例子,最后给出正确的方法

  6. 利用phantomjs模拟QQ自动登录

    之前为了抓取兴趣部落里的数据,研究了下QQ自动登录. 当时搜索了一番,发现大部分方法都已经失效了,于是准备自己开搞. 第一个想到的就是参考网上已有方案的做法,梳理登陆js的实现,通过其他语言重写.考虑 ...

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

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

  8. nodejs爬虫笔记(五)---利用nightmare模拟点击下一页

    目标 以腾讯滚动新闻为例,利用nightmare模拟点击下一页,爬取所有页面的信息.首先得感谢node社区godghdai的帮助,开始接触不太熟悉nightmare,感觉很高大上,自己写代码的时候问题 ...

  9. Python3之利用Cookie模拟登录

    Python3之利用Cookie模拟登录 利用Cookie模拟登录步骤: 1.       在浏览器输入http://demo.bxcker.com,输入用户名和密码登录. 2.登录成功点" ...

  10. 忘记秘密利用python模拟登录暴力破解秘密

    忘记秘密利用python模拟登录暴力破解秘密: #encoding=utf-8 import itertools import string import requests def gen_pwd_f ...

随机推荐

  1. WPF开发随笔收录-操作注册表

    一.前言 在windows平台软件开发过程中,注册表的操作是经常会遇到的一个场景.今天记录一下在操作注册表时遇到的一些坑: 二.正文 1.操作注册表,于是直接从网上找了一段代码来用 /// <s ...

  2. 简单介绍 Vue 3.0 项目创建

    一.前期转杯 确保电脑上已安装 node.js. 可通过命令 npm --version进行查询,如果展示了版本号,则说明已安装,若提示 npm 不是有内部或外部命令,也不是可运行的程序,则说明未安装 ...

  3. 【笔记】go语言--接口

    [笔记]go语言--接口 接口的概念 强类型语言:熟悉接口的概念 弱类型语言:没(少)有接口的概念 接口的详解︰使用Google Guice实现依赖注入 curl 是获取http请求的命令工具 cur ...

  4. Linux命令之查找CPU资源利用情况(lscpu和top详解)

    1.lscpu命令:获取CPU架构完整详细信息,例如架构信息,CPU模式,CPU频率,CPU核心数.线程数.缓存大小. 在终端输入"lscpu": 参数详解: [Architect ...

  5. 力扣495(java)-提莫攻击(简单)

    题目: 在<英雄联盟>的世界中,有一个叫 "提莫" 的英雄,他的攻击可以让敌方英雄艾希(编者注:寒冰射手)进入中毒状态.现在,给出提莫对艾希的攻击时间序列和提莫攻击的中 ...

  6. 力扣521(java&python)-最长特殊序列Ⅰ(简单)

    题目: 给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列  的长度.如果不存在,则返回 -1 . 「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的 ...

  7. java应用提速(速度与激情)

    简介: 本文将阐述通过基础设施与工具的改进,实现从构建到启动全方面大幅提速的实践和理论. 作者 | 阿里巴巴CTO技术来源 | 阿里开发者公众号 联合作者:道延 微波 沈陵 梁希 大熊 断岭 北纬 未 ...

  8. python实现打扑克方法

    # 游戏规则:# 一付扑克牌,去掉大小王,每个玩家发3张牌,最后比大小,看谁赢.## 有以下几种牌:# 豹子:三张一样的牌,如3张6.# 同花顺:即3张同样花色的顺子, 如红桃 5.6.7# 顺子:又 ...

  9. vue中vant-list组件实现下拉刷新,上滑加载

    后端返回的数据是一股脑的情况(不是按pageSize,pageNum一组一组的发送)时,前端使用vant-list实现懒加载需要再写一点js,记录一下 main.js: Vue.use(List); ...

  10. golang、JS AES(CBC模式)加密解密兼容

    目录 golang.JS AES(CBC模式)加密解密兼容 golang代码 前端javascript的代码 aes.js 原文地址: https://www.cnblogs.com/haima/p/ ...