故事开始,巧妇难为无米之炊

小朱一上班就急忙来找大鹏,"鹏哥,硬件开发告诉我因为有一部分物料还没按期交付,所以两周后才能拿到开发版.这样下去一定会影响我们软件组的嵌入式QT软件的开发进度的,我们怎么办呀?",大鹏听了微微一笑,"你做安卓开发的时候,没有手机是怎么开发的?",小朱回答:"Android Studio自带模拟器啊?哦,你是说我们也可以用模拟器开发?我们能用什么模拟器呢?""大名鼎鼎的QEMU就可以,实际上安卓开发的模拟器也是基于QEMU的,我们去会议室,我来讲下这个模拟器."

QEMU是什么

QEMU是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以GPL许可证分发源码的模拟处理器,最先在GNU/Linux平台上使用广泛。目前,0.9.1及之前版本的qemu可以使用kqemu加速器。在qemu1.0之后的版本,都无法使用kqemu,主要利用qemu-kvm加速模块,并且加速效果以及稳定性明显好于kqemu。

QEMU能够模拟多种处理器,所以你可以使用QEMU在PC机上模拟一个ARM的安卓系统或者PowerPC的一个Unix系统.所以,我们也可以用QEMU建立一个ARM+Linux内核+QT运行环境的系统,用来模拟我们现在的嵌入式QT开发环境.

Qemu 是纯软件实现的虚拟化模拟器,几乎可以模拟任何硬件设备,我们最熟悉的就是能够模拟一台能够独立运行操作系统的虚拟机,虚拟机认为自己和硬件打交道,但其实是和 Qemu 模拟出来的硬件打交道,Qemu 将这些指令转译给真正的硬件。但是,正因为 Qemu 是纯软件实现的,所有的指令都要经 Qemu 过一手,性能非常低,所以,一般用于早期开发.

QEMU能干什么

大鹏接着说,"我之前项目过程中已经用过QEMU,我来给你展示一下QEMU的效果".

在QEMU下使用DirectFB进行GUI开发,Demo演示如下.

上图所示演示image下载路径如下:vmlinuz-qemu-arm-2.6.20,

Windows下QEMU安装文件:链接:https://pan.baidu.com/s/1mLw4pqdp9Q8JxYkrXRfbbg 提取码:3qq4

下载上述两个文件,并安装QEMU后,运行如下命令:

"D:\Program Files\qemu\qemu-system-arm.exe" -M versatilepb -m 16 -kernel vmlinuz-qemu-arm-2.6.20 -append "clocksource=pit quiet rw"

QEMU下Ubuntu运行演示

ubuntu 18 文件系统下载地址如下:链接:https://pan.baidu.com/s/1qYmiqvL6nPx3LY8gDIylIw 提取码:68lc

内核与DTB文件下载地址如下:链接:https://pan.baidu.com/s/1WmRMtAxddu69SbaUqRma8Q 提取码:up22

下载上述文件,解压缩文件系统,和内核文件以及DTB文件放在同一个目录,然后运行如下命令:

"D:\Program Files\qemu\qemu-system-arm.exe" -M vexpress-a9 -m 1024M -kernel zImage -dtb vexpress-v2p-ca9.dtb -append "root=/dev/mmcblk0 rw console=ttyAMA0" -sd rootfsubuntu18lxde.ext3 -serial stdio -smp 4

如何用QEMU搭建嵌入式ARM QT运行环境

看完上面的演示,我们可以看到QEMU能够做很多事情,甚至可以把Ubuntu这样的系统完整的运行起来.所以,用QEMU搭建QT运行环境绝对是小菜一碟.我们下面来说说,一个嵌入式系统是如何组成的,又是怎么运行起来的.

一个完整的嵌入式系统(比如安卓),主要包含如下几个部分:

  1. bootloader:也就是加载器,通常这是CPU上电后第一个启动的软件,它负责初始化整个硬件(特别是DDR,其他依据需求来添加),初始化成功后,开始从存储器加载内核到DDR中,然后开始启动内核.bootloader有很多种,u-boot是比较常用的一种.
  2. 内核:内核是操作系统的核心部分,所以bootloader的主要目的就是为了加载内核.如果是linux系统,在3.0以上的版本中出来内核文件,还需要一个DTB文件来配合启动.DTB文件是用来描述设备连接方法和引脚定义的.
  3. ramdisk:内核启动结束后,需要加载文件系统和启动0号进程.文件系统是用来存放内核启动后应用层的各种系统文件的,当然也用来存储用户使用操作系统过程中建立的文件.0号进程是指内核启动结束后启动的第一个程序.文件系统可以用很多种,内核通常也支持多种文件系统,使用RAMDISK是比较常见的作法,原理上它是使用内存作为存储介质来建立的一种文件系统,由bootload在启动内核的时候,读取到内存中,它有体积小,启动速度快,安全性高等多种特性.
  4. 文件系统:内核或者RAMDISK启动成功后就可以正式的进入user space的操作系统部分了,这也是我们日常使用操作系统中最常接触到的部分,系统提供的文件或者我们的文件都是存在这里的.

各组成部分大致启动顺序如下:

鸣谢:本文部分内容来自如下链接,如侵权或需删除请联系我.

https://www.cnblogs.com/bakari/p/7858029.html

https://bootlin.com/blog/qemu-arm-directfb-demo/

用QEMU搭建arm开发环境之一:QEMU能干啥相关推荐

  1. 在Ubuntu下使用QEMU搭建arm开发环境(一)搭建基本开发环境

    马上就要开学了,开学后就会开始arm+Linux的学习,因为马上就要去学校了,就没有买板子,打算去了学校再买,但是想学习的心是迫切的(O(∩_∩)O哈哈~),在网上浏览的时候发现了QEMU这个&quo ...

  2. 在Ubuntu下使用QEMU搭建arm开发环境(三)使用u-boot加载Linux内核

    嵌入式启动概述 嵌入式boot loader 功能类似于PC的BIOS.硬件检测是否正常 加载操作系统镜像到RAM 设置不同的启动方式 常见的启动方式 NOR/NAND flash启动 从SD卡启动 ...

  3. 用QEMU搭建arm开发环境之三:编译BusyBox建立最简单的文件系统

    1.BusyBox简介 BusyBox 是一个集成了三百多个最常用Linux命令和工具的软件(注:不同版本可能包含的数量不一样).BusyBox 包含了一些简单的工具,例如ls.cat和echo等等, ...

  4. 从0开始使用QEMU模拟ARM开发环境之脚本制作分区镜像(rootfs+zImage+dtb)

    文章目录 从0开始使用QEMU模拟ARM开发环境系列一览表 目录结构: 脚本介绍: 分区镜像制作脚本 qemu启动脚本 流程示例 从0开始使用QEMU模拟ARM开发环境系列一览表 文章中 u-boot ...

  5. 使用 qemu 搭建内核开发环境

    本文主要介绍在 MacOS 上使用 qemu 搭建 Linux Kernel 的开发环境.(在开始之前需要注意的是,本文中的 Linux 开发环境是一个远程服务器,而 qemu 被安装在本地的 Mac ...

  6. 使用云服务器安装QEMU搭建嵌入式开发环境

    早之前就知道有QEMU,但是那会没能搭建起来.现在手头正好有个阿里云服务器,正好拿来试试手. 用的是Ubuntu的操作系统.先把qemu装了 apt-get install qemu 交叉编译工具 a ...

  7. UEFI 基础教程 (一) - 基于QEMU搭建UEFI开发环境(win/linux)

    一.EDKII windows 环境搭建 1. 下载UEFI开源代码 cmd进入C盘根目录,git clone https://github.com/tianocore/edk2.git edkii ...

  8. 在window下使用 VScode 搭建 ARM 开发环境—— 详细版

    其实文章也是以前做好的记录,现在把笔记放在博客上面来,方便管理和查看, 所以有一些细节问题并没有图文说明,等后期正真操作一遍的时候来把图片和说明补充完成. 本文给出两种方式,第一种gcc-arm-no ...

  9. Linux下使用Eclipse搭建ARM开发环境

    系统: 新装 ubuntu 14.04.5  64bits 1.安装交叉编译环境 解压 tar xjf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 添加环境变量 $ ...

  10. qemu搭建arm嵌入式linux开发环境

    一.基本概念 1.交叉编译 交叉编译(Cross_Compile)是指编译源代码的平台和执行源代码编译后程序的平台是两个不同的平台. 2.bootloader BootLoader是在操作系统内核运行 ...

最新文章

  1. Android 手势—— GestureDetector 和 SimpleOnScaleGestureListener (手势缩放)
  2. SQL Server 2005系列教学(14) 用户管理
  3. H.264视频编解码的代码移植和优化
  4. 全信考试JAVA_2010年全国信息技术水平考试JAVA样题
  5. mysql ssh通道_详解如何通过SSH通道来访问MySQL
  6. Mac中java实现自动打开软件问题
  7. wordpress虚拟服务器,西部数码虚拟主机安装wordpress教程
  8. 高通7227平台外接UBLOX的GPS模块数据接收不稳定问题
  9. 方志朋-2018年文章汇总
  10. HTML:Boostarp设计登录页面
  11. 计算机二级没有学院盖章,二级学院盖章.DOC
  12. 国家各个政府机构网站
  13. 计算机就业前景调查报告问题,计算机专业就业前景调查报告.docx
  14. Unity笔记-29-ARPG游戏项目-05-简易的战斗系统
  15. Kaggle(入门)
  16. 【渝粤教育】国家开放大学2018年春季 0049-22T法律文书 参考试题
  17. 什么是非同质化代币(NFT)?
  18. 用python求一元二次方程的解
  19. sql server 查看死锁,以及执行语句
  20. 错别字分析——自建错词库

热门文章

  1. linux如何打开22端口?如何开启ssh远程链接
  2. MitraStar DSL-2401HN-T1C-GV硬件与启动信息
  3. 如何破解加密相册密码四大方法
  4. DDPM代码详细解读(1):数据集准备、超参数设置、loss设计、关键参数计算
  5. 微信公众账号api开发
  6. CESM优化——Intel编译器安装OpenMPI4.0
  7. 单片机课设中期报告_基于单片机的火灾自动报警系统 中期报告
  8. C# 消息盒子 右下角显示窗体
  9. html手机端富文本,移动端富文本踩坑
  10. hang计算机术语大全,行业英语学习