用QEMU构建嵌入式LINUX系统
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系统相关推荐
- 基于qemu-riscv从0开始构建嵌入式linux系统ch10. qemu之virtio与fw_cfg
基于qemu-riscv从0开始构建嵌入式linux系统ch10. qemu之virtio与fw_cfg 上一节我们已经基本完成了uboot的移植,下一步自然就是移植linux kernel.在真实的 ...
- buildroot:Linux平台构建嵌入式Linux系统的框架
buildroot是Linux平台上一个构建嵌入式Linux系统的框架.整个Buildroot是由Makefile脚本和Kconfig配置文件构成的.你可以和编译Linux内核一样,通过buildro ...
- 基于qemu-riscv从0开始构建嵌入式linux系统ch3. 添加中断控制器、串口、pflash支持
基于qemu-riscv从0开始构建嵌入式linux系统ch3. 添加中断控制器.串口.pflash支持 添加串口支持 真实板卡的初期调试中,串口打印可谓神器,几乎所有的SOC都会带有串口这个外设,因 ...
- 嵌入式系统实验 构建嵌入式Linux系统,《嵌入式系统与开发》构建嵌入式Linux系统-实验报告.doc...
<嵌入式系统与开发>构建嵌入式Linux系统-实验报告 <嵌入式数据库sqlite移植及使用> 实验报告 学生姓名: 陈 彤 学 号: 1座机电话号码 专业班级: 130044 ...
- 嵌入式 linux 启动脚本 编写,[9构建嵌入式linux系统项目-启动脚本的编写.ppt
[9构建嵌入式linux系统项目-启动脚本的编写 启动脚本 教学回顾 shell语法 管道.重定向 变量 结构性语句 教学内容 启动脚本的写法 教学要求 熟悉掌握启动脚本的写法 shell 函数 在s ...
- 构建嵌入式linux系统_用于构建嵌入式Linux系统的4种工具
构建嵌入式linux系统 Linux正在被部署到比Linus Torvalds在他的宿舍里工作的设备更多的设备中. 受支持的各种芯片架构令人震惊,并导致各种大小的设备都使用Linux. 从庞大的IBM ...
- 基于AT91SAM9G20构建嵌入式Linux系统
本文中使用的目标平台AT91SAM9G20是Atmel公司使用ARM926EJ-S处理器内核开发的一块SoC嵌入式微处理器,主频达到400MHz,具有Atmel 先进的外设DMA 和分布式存储器架构, ...
- 【嵌入式】构建嵌入式Linux系统(uboot、内核、文件系统)
知识架构及层次 Linux内核由三部分构成: Bootloader:启动引导系统(可执行文件) Kernel:内核(可执行文件) Root File System:根文件系统 嵌入式Linux系统构成 ...
- iMX6Ull采用Yocto构建嵌入式Linux系统(三)
获取Yocto 设置Git用户名和密码 Yocto项目采用repo管理各个git库的方式进行管理.因此,除了使用repo工具外,还需要使用到Git.使用Git前,需要设置Git的用户名和密码: $ g ...
最新文章
- 【贪心】Google Code Jam Round 1A 2018 Waffle Choppers
- 虚拟机下Linux安装图解之一:VMware Workstation的安装
- python解释器是什么-python的解释器是什么?
- mysql 57授权失败_MYSQL教程完美解决mysql客户端授权后连接失败的问题
- MySQL通过存储过程使用循环结构循环创建数据,以及批量数据的导入导出
- 地理数据库 (geodatabase) 的架构
- mysql strtok_c函数: strtok 和 strtok_r 详解
- mysql修改语句_序言:MySQL与Navicat安装Tips
- 更换mysql_3分钟学会mysql数据库的逻辑架构原理
- I00017 生成9开头的按位递减数
- 目标跟踪理论方法小结
- java 彻底删除文件_如何删除java文件
- linux基础知识考试试题
- 网页版结题报告html没了,[转载]我的结题报告
- c语言 空心的倒三角形,C语言题目,请根据要求打印可空心倒三角形
- 人机交互课后习题——感知和认知基础
- OA协同办公系统 公共事务设置
- 【从零开始】阿里云服务器配置web开发环境及部署本地web项目
- 李阳疯狂英语-228句口语要素
- matlab中的ica工具箱怎么使用吧,ica工具箱matlab