用QEMU搭建arm开发环境之一:QEMU能干啥
故事开始,巧妇难为无米之炊
小朱一上班就急忙来找大鹏,"鹏哥,硬件开发告诉我因为有一部分物料还没按期交付,所以两周后才能拿到开发版.这样下去一定会影响我们软件组的嵌入式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运行环境绝对是小菜一碟.我们下面来说说,一个嵌入式系统是如何组成的,又是怎么运行起来的.
一个完整的嵌入式系统(比如安卓),主要包含如下几个部分:
- bootloader:也就是加载器,通常这是CPU上电后第一个启动的软件,它负责初始化整个硬件(特别是DDR,其他依据需求来添加),初始化成功后,开始从存储器加载内核到DDR中,然后开始启动内核.bootloader有很多种,u-boot是比较常用的一种.
- 内核:内核是操作系统的核心部分,所以bootloader的主要目的就是为了加载内核.如果是linux系统,在3.0以上的版本中出来内核文件,还需要一个DTB文件来配合启动.DTB文件是用来描述设备连接方法和引脚定义的.
- ramdisk:内核启动结束后,需要加载文件系统和启动0号进程.文件系统是用来存放内核启动后应用层的各种系统文件的,当然也用来存储用户使用操作系统过程中建立的文件.0号进程是指内核启动结束后启动的第一个程序.文件系统可以用很多种,内核通常也支持多种文件系统,使用RAMDISK是比较常见的作法,原理上它是使用内存作为存储介质来建立的一种文件系统,由bootload在启动内核的时候,读取到内存中,它有体积小,启动速度快,安全性高等多种特性.
- 文件系统:内核或者RAMDISK启动成功后就可以正式的进入user space的操作系统部分了,这也是我们日常使用操作系统中最常接触到的部分,系统提供的文件或者我们的文件都是存在这里的.
各组成部分大致启动顺序如下:
鸣谢:本文部分内容来自如下链接,如侵权或需删除请联系我.