centos下利用qemu搭建arm模拟器
有点繁琐,整理一下,系统环境centos6.6,虚拟机以及实际系统中测试通过。
一、交叉编译器的下载与安装
1、下载地址:http://blog.csdn.net/dldw8816/article/details/46004167
下载其中的解压版。
2、然后解压缩
tar jxvf arm-2014.05--arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
3、添加环境变量,假定压缩包所在目录为/home,解压后目录为arm-2014.05。
vim /etc/profile
在最下面添加
export PATH=$PATH:/home/arm-2014.05/bin
然后更新
source /etc/profile
4、测试是否安装成功
arm-none-linux-gnueabi-gcc -v
二、qemu的安装
参考网站http://blog.csdn.net/oxford_d/article/details/51823473
wget https://download.qemu.org/qemu-2.11.0.tar.xz tar xvJf qemu-2.11..tar.xz cd qemu-2.11. ./configure make -j8 make install
说明:
$./configure --enable-kvm --enable-debug --enable-vnc --enable-werror --target-list=arm-softmmu --audio-drv-list=
configure脚本用于生成Makefile,其选项可以用./configure --help查看。这里使用到的选项含义如下:
--enable-kvm:编译KVM模块,使QEMU可以利用KVM来访问硬件提供的虚拟化服务。
--enable-vnc:启用VNC。
--enalbe-werror:编译时,将所有的警告当作错误处理。
--target-list:选择目标机器的架构。默认是将所有的架构都编译,但为了更快的完成编译,指定需要的架构即可。
三、uboot安装
参考网站http://blog.csdn.net/aggresss/article/details/54945726
1、源文件下载http://ftp.denx.de/pub/u-boot/
2、解压源文件
tar jvxf u-boot-2018.01.tar.bz2 -C xxxx (xxx为需要解压的目录)
3. 进入U-Boot 源文件目录,然后执行:
export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabi-
make vexpress_ca9x4_defconfig
make
编译完成后,如果目录下生成 u-boot 文件,则说明编译成功。
4. 在U-Boot源码目录下编写脚本 run.sh
qemu-system-arm \
-M vexpress-a9 \
-nographic \
-m 512M \
-kernel u-boot
然后 chmod +x run.sh 增加文件执行权限。
5. 最后执行 ./run.sh,可以看到启动了bootloader,但是会提示没有映像文件
四、内核编译
参考博文http://blog.csdn.net/aggresss/article/details/54946438
内核源码下载地址:https://www.kernel.org/pub/linux/kernel/v4.x/
1、从arch/arm/configs下找到需要编译内核的配置文件vexpress_defconfig,复制到源码根目录下
2、执行命令
export ARCH=arm
export CROSS_COMPILE=arm-none-linux-gnueabi-
make vexpress_defconfig
make zImage
make modules
make dtbs
3、编译后生成 在 arch/arm/boot 目录下生成 zImage 文件,则说明编译成功。
五、编译busybox,目的是制作根文件系统
1、从https://busybox.net/downloads/下载busybox
2、进入 Busybox 源文件目录下执行 make menuconfig,如果报错,则yum list *ncurses*,然后安装列出来的东西
Busybox Settings --->
[*] Build BusyBox as a static binary (no shared libs)
(arm-none-linux-gnueabi-) Cross Compiler prefix
3、编译
make
make install
_install 目录下生成 需要的文件 bin linuxrc sbin usr 。
六、根文件系统制作
1、创建一个空白文件,32M
dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=
2、格式化
mkfs.ext3 a9rootfs.ext3
3、创建根文件系统目录
mkdir rootfs
4、拷贝busybox下的文件
cp busybox-1.20./_install/* -r rootfs/
5、拷贝交叉编译器的lib
mkdir rootfs/lib/
cp -P /xxx/arm-none-linux-gnueabi/lib/* rootfs/lib/
6、创建终端设备
mkdir rootfs/dev/
mknod rootfs/dev/tty1 c
mknod rootfs/dev/tty2 c
mknod rootfs/dev/tty3 c
mknod rootfs/dev/tty4 c
mknod rootfs/dev/console c
mknod rootfs/dev/null c
7、创建必要目录
mkdir -p rootfs/proc/
mkdir -p rootfs/sys/
mkdir -p rootfs/tmp/
mkdir -p rootfs/root/
mkdir -p rootfs/var/
mkdir -p rootfs/mnt/
8、创建临时目录并与空白文件映射,目的是将根文件系统拷贝进去
mkdir tmpfs
mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
rootfs/* tmpfs/ -r
umount tmpfs
建立一个目录,将zImage,vexpress-v2p-ca9.dtb,_install目录拷贝在一个目录下
vim mkrootfs.sh
rm -rf rootfs
rm -rf tmpfs
rm -f a9rootfs.ext3 mkdir rootfs
cp ./_install/* rootfs/ -raf
mkdir -p rootfs/proc/
mkdir -p rootfs/sys/
mkdir -p rootfs/tmp/
mkdir -p rootfs/root/
mkdir -p rootfs/var/
mkdir -p rootfs/mnt/ cp -arf /home/yuanlj/arm-2014.05/arm-none-linux-gnueabi/lib rootfs/
rm rootfs/lib/*.a
arm-none-linux-gnueabi-strip rootfs/lib/* mkdir -p rootfs/dev/
mknod rootfs/dev/tty1 c 4 1
mknod rootfs/dev/tty2 c 4 2
mknod rootfs/dev/tty3 c 4 3
mknod rootfs/dev/tty4 c 4 4
mknod rootfs/dev/console c 5 1
mknod rootfs/dev/null c 1 3 dd if=/dev/zero of=a9rootfs.ext3 bs=1M count=32
mkfs.ext3 a9rootfs.ext3 mkdir -p tmpfs
mount -t ext3 a9rootfs.ext3 tmpfs/ -o loop
cp -r rootfs/* tmpfs/
umount tmpfs
七、启动
qemu-system-arm -nographic -sd a9rootfs.ext3 -M vexpress-a9 -m 512M -kernel zImage -dtb vexpress-v2p-ca9.dtb -append "init=/linuxrc root=/dev/mmcblk0 rw rootwait earlyprintk console=ttyAMA0"
qemu-system-arm -serial stdio -sd a9rootfs.ext3 -M vexpress-a9 -m 512M -kernel zImage -dtb vexpress-v2p-ca9.dtb -append "init=/linuxrc root=/dev/mmcblk0 rw rootwait earlyprintk console=ttyAMA0"
注意:
1、以上在编译前请确保export ARCH=arm ;export CROSS_COMPILE=arm-none-linux-gnueabi-
2、若报错,一般是某些库没有包含,自行百度或google
centos下利用qemu搭建arm模拟器的更多相关文章
- CentOS 7 利用qemu模拟ARM vexpress A9开发板
听说qemu用于仿真arm很不错,今日就来试了一把.由于刚刚开始,了解的并不多.本文仅仅记录Qemu装载Linux kernel和busybox根文件系统的过程.后续将会深入了解仿真的其他内容. 先上 ...
- Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核
Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核 标签(空格分隔): Qemu ARM Linux 在上文<Qemu搭建ARM vexpress开发环 ...
- Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统
Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统 标签(空格分隔): Qemu ARM Linux 经过上一篇<Qemu搭建ARM vexpress开发环境(二)- ...
- Qemu搭建ARM vexpress开发环境(一)
Qemu搭建ARM vexpress开发环境(一) 标签(空格分隔): Qemu ARM Linux 嵌入式开发离不开硬件设备比如:开发板.外设等,但是如果只是想学习研究Linux内核,想学习Linu ...
- CentOS下利用Docker部署Surging
原文:CentOS下利用Docker部署Surging 1. 安装Centos, 配置固定ip配置文件地址vi /etc/sysconfig/network-scripts/ifcfg-ens33`` ...
- 【MIT6.828】centos7下使用Qemu搭建xv6运行环境
title:[MIT6.828]centos7下使用Qemu搭建xv6运行环境 date: "2020-05-05" [MIT6.828]centos7下搭建xv6运行环境 1. ...
- Centos下LAMP环境搭建
CentOs下环境搭建.2015.04.15.0001 Author:周凯 Time: 2015.04.15 版本号:2015.04.15.0001 安装过程 安装apache yum install ...
- 【MySQL】CentOS下安装及搭建主从复制
CentOS下安装MySQL 1,wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm 2,rpm -ivh m ...
- ubuntu下使用qemu模拟ARM(六)------驱动程序【转】
转自:http://blog.csdn.net/rfidunion/article/details/54709843 驱动程序分为在ubuntu上运行和在ARM开发板上运行两种,我们分别来进行测试 1 ...
随机推荐
- SQL语句-delete语句
delete语句 delete语句用于删除表中已经存在的整行数据 Tbl_name关键词代表删除数据的目标表 Where子句代表被删除数据的满足条件,如果没有where子句则代 表所有表数据都删除 O ...
- 使用jdbc存储图片和大文本
package cn.itcast.i_batch; import java.sql.Connection; import java.sql.PreparedStatement; import jav ...
- jQuery中的DOM操作------复制及包裹节点
1.复制节点: 如果单击<li>元素后需要再复制一个<li>元素,可以用clone()方法来完成: $(this).clone().appendTo("ul" ...
- CSS中的选择器之类选择器和id选择器
1.css中的选择器: 1.类选择器,又叫class选择器 2.id选择器 3.html元素选择器(又叫标签选择器) 4.通配符选择器 5.伪类选择器 6.组合选择器(多元素选择器,子元素选择器,后代 ...
- BZOJ 4698: Sdoi2008 Sandy的卡片 [后缀自动机]
4698: Sdoi2008 Sandy的卡片 题意:差分后就是多个串LCS SAM+map大法好 模板打错 智力-2 #include <iostream> #include <c ...
- HDU Be the Winner [Anti-SG]
传送门 n堆,每次拿走至少一个,剩下的可以分成两堆.最后拿的人输 打表观察发现和Nim游戏一样...裸Anti-SG啊 #include <iostream> #include <c ...
- SDN期末作业
期末项目 代码仓库:传送门 视频:组长已经发送给朱老师 选题:负载均衡场景3 选题内容: 该拓扑是数据中心拓扑的一部分,其中h1是数据中心外的一台客户机,h2-h5是数据中心内的服务器,请根据该拓扑实 ...
- Python中Template使用的一个小技巧
Python中Template是string中的一个类,可以将字符串的格式固定下来,重复利用. from string import Template s = Template("there ...
- Android开发之漫漫长途 XIV——RecyclerView
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
- 超级简便的容器化部署工具(使用 ASP.NET Core 演示)
Docker 改变了我们部署网站的方式,从原先的手动编译打包上传,到现在的构建镜像然后推送部署,让我们在配置环境上所花费的时间大大减少了.不仅如此,通过一系列相关的工具配合,可以很轻松的实现 CI.C ...