Table of Contents

Qemu –从源头建造

ARM工具链

Linux内核

构建文件系统

通过NFS使用根文件系统

配置QEMU Tap网络

创建运行脚本


推荐阅读:《在CentOS上进行虚拟化:QEMU、Xen、KVM、LibVirt、oVirt》

QEMU是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛。Bochs,PearPC等与其类似,但不具备其许多特性,比如高速度及跨平台的特性,通过KQEMU这个闭源的加速器,QEMU能模拟至接近真实电脑的速度。

目前,0.9.1及之前版本的qemu可以使用kqemu加速器。在qemu1.0之后的版本,都无法使用kqemu,主要利用qemu-kvm加速模块,并且加速效果以及稳定性明显好于kqemu。

在我的嵌入式Linux课程中,我使用Qemu来模拟Linux系统。Qemu模拟许多电路板,包括硬件,中断,网络等。

在本教程中,我将介绍构建包括内核,文件系统和应用程序的完整系统的步骤。

Qemu –从源头建造


您可以安装二进制版本,但最好从源代码下载并构建Qemu,因为我们可以使用源代码来模拟新硬件。

# wget https://download.qemu.org/qemu-2.11.0.tar.xz
# tar xvJf qemu-2.11.0.tar.xz
# cd qemu-2.11.0
# ./configure

最后一步检查您的系统是否满足所有qemu要求。如果收到错误消息,则需要安装缺少的软件包。我正在使用Ubuntu,很容易安装缺少的部件,例如,我收到以下消息:

ERROR: glib-2.22 gthread-2.0 is required to compile QEMU

搜索Google后,安装所需的软件包

# sudo apt-get install libglib2.0-dev zlib1g-dev

需要更多软件包:

# sudo apt-get install libpixman-1-dev
# sudo apt-get install libsdl2*

现在再次运行configure并检查是否报告了SDL支持

运行make

# make
# sudo make install

要检查qemu是否正确安装,请运行

# qemu-system-arm -M ?

ARM工具链


我们需要安装的第一件事是ARM的跨工具链。转到Arm.com并下载Linux版本,将其解压缩到〜/ armsystem / toolchain目录中

将位置添加到PATH环境变量中:

# export PATH=/home/developer/armsystem/toolchain/gcc-arm-none-eabi-7-2017-q4-major

Linux内核


转到https://www.kernel.org/并下载最新的内核。建议使用长期支持的版本。将文件解压缩到一个空目录〜/ armsystem / kernel中

编辑内核Makefile(第253行)

ARCH     ?= arm
CROSS_COMPILE   ?= arm-none-eabi-

设置配置文件

# make vexpress_defconfig

运行make

# make -j4

现在,我们可以使用以下命令检查QEMU中的内核:

# qemu-system-arm -M vexpress-a15 -m 512 -kernel arch/arm/boot/zImage -dtb arch/arm/boot/dts/vex

系统将启动但由于我们尚未构建文件系统而崩溃

构建文件系统


我们可以使用许多工具来构建嵌入式Linux文件系统。一些例子是buildroot,OpenWRT,yocto

在本教程中,我们将使用buildroot,因为它是最简单的工具

从这里下载最新的Buildroot软件包并将其解压缩到〜/ armsystem / fs中

打开配置菜单:

# make menuconfig

在目标选项上,选择目标体系结构– ARM

您可以使用buildroot从Sourcery下载并安装外部工具链(推荐),也可以使用我们已经下载的现有工具链

我们将使用Sourcery工具链,因为它具有一些IDE插件。

要下载Sourcery工具链–从工具链菜单中选择:

  • 工具链类型(外部工具链)
  • 工具链(Sourcery CodeBench ARM 2014.05)
  • 工具链的来源(要下载和安装的工具链)
  • 将gdb服务器复制到目标

保存配置并构建它

# make

构建成功完成后,您可以在以下位置找到新的工具链:

~/armsystem/fs/buildroot-2017.02.8/output/host/usr/bin

将其添加到PATH变量,更改内核Makefile并再次构建

ARCH     ?= arm
CROSS_COMPILE   ?= arm-none-linux-gnueabi-

生成的文件系统位于buildroot / output / target中,但我们尚不能使用

通过NFS使用根文件系统


使用嵌入式板的最好方法是通过NFS(在主机上)挂载目标文件系统来实现,我们需要做一些设置:

安装NFS服务器

# sudo apt install nfs-kernel-server

编辑/ etc / exports以添加NFS文件夹

/home/developer/armsystem/outfs *(rw,sync,no_root_squash)

重新启动NFS服务器

# sudo /etc/init.d/nfs-kernel-server restart
[ ok ] Restarting nfs-kernel-server (via systemctl): nfs-kernel-server.service.

配置QEMU Tap网络


Qemu可以使用Tap / Tunnel模式将私有网络与ubuntu结合使用。要进行设置,请创建文件/ etc / qemu-ifup:

#!/bin/bash
exec /sbin/ifconfig $1 192.168.0.1

向文件添加执行权限(chmod a + x / etc / qemu-ifup)

创建根文件系统文件夹

复制生成的文件〜/ armsystem / outfs

# cp -r -d [buildroot]/output/target/* ~/armsystem/outfs

现在,使用root用户添加以下设备文件

# sudo mknod ./dev/console c 5 1
# sudo mknod ./dev/zero c 1 5
# sudo mknod ./dev/null c 1 3
# sudo mknod ./dev/tty1 c 4 1

如果要自动生成设备文件,请配置udev。使用buildroot非常容易:

从系统配置菜单中选择/ dev管理(使用devtmpfs + eudev动态)

然后从“目标软件包”>“硬件处理”菜单中,选择“ eudev”

编译buildroot,您将看到udev在init上运行:

创建运行脚本


在〜/ armsystem中创建脚本– run_qemu

qemu-system-arm -M vexpress-a15 -net tap -net nic -m 512 -kernel kernel/linux-4.14.10/arc

添加执行权限并使用sudo对其进行测试(它将启动新的网络设备)

# cd ~/armsystem
# sudo ./run_qemu

而已!!!

现在我们可以编写一个测试应用程序,在qemu中编译并运行:

#include<stdio.h>void main(void)
{puts("hello");
}
# arm-none-linux-gnueabi-gcc -o app ./a.c
# cp ./app ~/armsystem/outfs/

现在我们还可以构建复杂的应用程序,内核模块等(下一篇文章……)

用QEMU构建嵌入式LINUX系统相关推荐

  1. 基于qemu-riscv从0开始构建嵌入式linux系统ch10. qemu之virtio与fw_cfg

    基于qemu-riscv从0开始构建嵌入式linux系统ch10. qemu之virtio与fw_cfg 上一节我们已经基本完成了uboot的移植,下一步自然就是移植linux kernel.在真实的 ...

  2. buildroot:Linux平台构建嵌入式Linux系统的框架

    buildroot是Linux平台上一个构建嵌入式Linux系统的框架.整个Buildroot是由Makefile脚本和Kconfig配置文件构成的.你可以和编译Linux内核一样,通过buildro ...

  3. 基于qemu-riscv从0开始构建嵌入式linux系统ch3. 添加中断控制器、串口、pflash支持

    基于qemu-riscv从0开始构建嵌入式linux系统ch3. 添加中断控制器.串口.pflash支持 添加串口支持 真实板卡的初期调试中,串口打印可谓神器,几乎所有的SOC都会带有串口这个外设,因 ...

  4. 嵌入式系统实验 构建嵌入式Linux系统,《嵌入式系统与开发》构建嵌入式Linux系统-实验报告.doc...

    <嵌入式系统与开发>构建嵌入式Linux系统-实验报告 <嵌入式数据库sqlite移植及使用> 实验报告 学生姓名: 陈 彤 学 号: 1座机电话号码 专业班级: 130044 ...

  5. 嵌入式 linux 启动脚本 编写,[9构建嵌入式linux系统项目-启动脚本的编写.ppt

    [9构建嵌入式linux系统项目-启动脚本的编写 启动脚本 教学回顾 shell语法 管道.重定向 变量 结构性语句 教学内容 启动脚本的写法 教学要求 熟悉掌握启动脚本的写法 shell 函数 在s ...

  6. 构建嵌入式linux系统_用于构建嵌入式Linux系统的4种工具

    构建嵌入式linux系统 Linux正在被部署到比Linus Torvalds在他的宿舍里工作的设备更多的设备中. 受支持的各种芯片架构令人震惊,并导致各种大小的设备都使用Linux. 从庞大的IBM ...

  7. 基于AT91SAM9G20构建嵌入式Linux系统

    本文中使用的目标平台AT91SAM9G20是Atmel公司使用ARM926EJ-S处理器内核开发的一块SoC嵌入式微处理器,主频达到400MHz,具有Atmel 先进的外设DMA 和分布式存储器架构, ...

  8. 【嵌入式】构建嵌入式Linux系统(uboot、内核、文件系统)

    知识架构及层次 Linux内核由三部分构成: Bootloader:启动引导系统(可执行文件) Kernel:内核(可执行文件) Root File System:根文件系统 嵌入式Linux系统构成 ...

  9. iMX6Ull采用Yocto构建嵌入式Linux系统(三)

    获取Yocto 设置Git用户名和密码 Yocto项目采用repo管理各个git库的方式进行管理.因此,除了使用repo工具外,还需要使用到Git.使用Git前,需要设置Git的用户名和密码: $ g ...

最新文章

  1. 【贪心】Google Code Jam Round 1A 2018 Waffle Choppers
  2. 虚拟机下Linux安装图解之一:VMware Workstation的安装
  3. python解释器是什么-python的解释器是什么?
  4. mysql 57授权失败_MYSQL教程完美解决mysql客户端授权后连接失败的问题
  5. MySQL通过存储过程使用循环结构循环创建数据,以及批量数据的导入导出
  6. 地理数据库 (geodatabase) 的架构
  7. mysql strtok_c函数: strtok 和 strtok_r 详解
  8. mysql修改语句_序言:MySQL与Navicat安装Tips
  9. 更换mysql_3分钟学会mysql数据库的逻辑架构原理
  10. I00017 生成9开头的按位递减数
  11. 目标跟踪理论方法小结
  12. java 彻底删除文件_如何删除java文件
  13. linux基础知识考试试题
  14. 网页版结题报告html没了,[转载]我的结题报告
  15. c语言 空心的倒三角形,C语言题目,请根据要求打印可空心倒三角形
  16. 人机交互课后习题——感知和认知基础
  17. OA协同办公系统 公共事务设置
  18. 【从零开始】阿里云服务器配置web开发环境及部署本地web项目
  19. 李阳疯狂英语-228句口语要素
  20. matlab中的ica工具箱怎么使用吧,ica工具箱matlab

热门文章

  1. JAVA继承类phone_【Java基础】类-----继承
  2. Java 根据枚举的名字得到枚举的实例
  3. python读文件指定行的数据
  4. 工具--常见eclipse配置导入web工程(tomcat容器)步骤
  5. Codeforces 384E-线段树+dfs序
  6. ATL是如何实现线程安全的引用计数和多线程控制的
  7. Decoda Tutorial LUA调式器
  8. 十二、文件上传与下载
  9. linux服务端开发vs2012,Vs2012在Linux开发中的应用(1):开发环境
  10. mysql ip v4 v6_mysql IPv4 IPv6