有点繁琐,整理一下,系统环境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模拟器的更多相关文章

  1. CentOS 7 利用qemu模拟ARM vexpress A9开发板

    听说qemu用于仿真arm很不错,今日就来试了一把.由于刚刚开始,了解的并不多.本文仅仅记录Qemu装载Linux kernel和busybox根文件系统的过程.后续将会深入了解仿真的其他内容. 先上 ...

  2. Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核

    Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核 标签(空格分隔): Qemu ARM Linux 在上文<Qemu搭建ARM vexpress开发环 ...

  3. Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统

    Qemu搭建ARM vexpress开发环境(三)----NFS网络根文件系统 标签(空格分隔): Qemu ARM Linux 经过上一篇<Qemu搭建ARM vexpress开发环境(二)- ...

  4. Qemu搭建ARM vexpress开发环境(一)

    Qemu搭建ARM vexpress开发环境(一) 标签(空格分隔): Qemu ARM Linux 嵌入式开发离不开硬件设备比如:开发板.外设等,但是如果只是想学习研究Linux内核,想学习Linu ...

  5. CentOS下利用Docker部署Surging

    原文:CentOS下利用Docker部署Surging 1. 安装Centos, 配置固定ip配置文件地址vi /etc/sysconfig/network-scripts/ifcfg-ens33`` ...

  6. 【MIT6.828】centos7下使用Qemu搭建xv6运行环境

    title:[MIT6.828]centos7下使用Qemu搭建xv6运行环境 date: "2020-05-05" [MIT6.828]centos7下搭建xv6运行环境 1. ...

  7. Centos下LAMP环境搭建

    CentOs下环境搭建.2015.04.15.0001 Author:周凯 Time: 2015.04.15 版本号:2015.04.15.0001 安装过程 安装apache yum install ...

  8. 【MySQL】CentOS下安装及搭建主从复制

    CentOS下安装MySQL 1,wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm 2,rpm -ivh m ...

  9. ubuntu下使用qemu模拟ARM(六)------驱动程序【转】

    转自:http://blog.csdn.net/rfidunion/article/details/54709843 驱动程序分为在ubuntu上运行和在ARM开发板上运行两种,我们分别来进行测试 1 ...

随机推荐

  1. Cisco配置aaa验证

    当您的网络中部署了一台集中的radius校验服务器(比如我司的SAM,cisco的ACS等),希望对登陆设备的用户身份进行合法性校验,而账号都统一由该radius服务器集中产生与维护,您希望所有的登入 ...

  2. ABP官方文档翻译 4.3 校验数据传输对象

    校验数据传输对象 校验简介 使用数据标注 自定义校验 禁用校验 标准化 校验简介 应用的输入首先应该被校验.输入可以是用户的也可以是其他应用的.在一个web应用中,校验通常实现两次:客户端和服务端.客 ...

  3. NOIP 2017 day 1 游记

    心情非常复杂.大概就是我问到的所有人都A掉了T1那样. 的确没有按套路出牌,今年T1不是大模拟,反倒是T2. ……已经不想再提到今天的T1了.如果真的要我说,我只能说 我再次学了一整年的OI,结果栽到 ...

  4. BZOJ 3456: 城市规划 [多项式求逆元 组合数学 | 生成函数 多项式求ln]

    3456: 城市规划 题意:n个点组成的无向连通图个数 以前做过,今天复习一下 令\(f[n]\)为n个点的无向连通图个数 n个点的完全图个数为\(2^{\binom{n}{2}}\) 和Bell数的 ...

  5. BZOJ 3512: DZY Loves Math IV [杜教筛]

    3512: DZY Loves Math IV 题意:求\(\sum_{i=1}^n \sum_{j=1}^m \varphi(ij)\),\(n \le 10^5, m \le 10^9\) n较小 ...

  6. 【转】 C/C++程序员必须熟练应用的开源项目

    作为一个经验丰富的C/C++程序员, 肯定亲手写过各种功能的代码, 比如封装过数据库访问的类, 封装过网络通信的类,封装过日志操作的类, 封装过文件访问的类, 封装过UI界面库等, 也在实际的项目中应 ...

  7. 【SSH框架】之Hibernate系列一

    微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系! 1.Hibernate框架概述 (1).什么是HibernateHibernate是一个开放源代 ...

  8. 【深度学习】L1正则化和L2正则化

    在机器学习中,我们非常关心模型的预测能力,即模型在新数据上的表现,而不希望过拟合现象的的发生,我们通常使用正则化(regularization)技术来防止过拟合情况.正则化是机器学习中通过显式的控制模 ...

  9. [Python Study Notes]cpu信息

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...

  10. CSS3动画中的animation-timing-function效果演示

    CSS3动画(animation)属性有如下几个: 属性 值 说明 animation-name name 指定元素要使用的keyframes名称 animation-duration time(ms ...