转自:https://www.crifan.com/try_use_qemu_emulate_arm_board_to_load_and_run_uboot_kernel_rootfs/

【背景】

手上有一个嵌入式Linux的项目。

已经用交叉编译器arm-xscale-linux-gnueabi去编译了Uboot和kernel:

【记录】Ubuntu下用arm-xscale-linux-gnueabi交叉编译uboot

【记录】Ubuntu下用arm-xscale-linux-gnueabi交叉编译linux-2.6.19.1内核

且已经有了对应的rootfs了,所以算是基本齐全了。

后来得知有个QEMU,和SkyEye类似,可以模拟arm开发板。

所以,尝试去试试,能否在Ubuntu下,用QEMU去模拟加载并运行Uboot,kernel,rootfs。

【折腾过程】

1.再去看看关于QEMU的介绍资料:

QEMU (简体中文)

QEMU Main Page

2.其下载页面:

http://wiki.qemu.org/Download

下载QEMU:

http://wiki.qemu-project.org/download/qemu-1.6.0-rc3.tar.bz2

解压得到源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
crifan@ubuntu:qemu-1.6.0-rc3$ tar xvfj qemu-1.6.0-rc3.tar.bz2
 
crifan@ubuntu:qemu-1.6.0-rc3$ ls
aio-posix.c              cputlb.c          linux-headers     qdict-test-data.txt     qmp-commands.hx    target-sparc
aio-win32.c              default-configs   linux-user        qemu-bridge-helper.c    qobject            target-unicore32
arch_init.c              device-hotplug.c  main-loop.c       qemu-char.c             qom                target-xtensa
async.c                  device_tree.c     MAINTAINERS       qemu-coroutine.c        qtest.c            tcg
audio                    disas             Makefile          qemu-coroutine-io.c     readline.c         tcg-runtime.c
backends                 disas.c           Makefile.objs     qemu-coroutine-lock.c   README             tci.c
balloon.c                dma-helpers.c     Makefile.target   qemu-coroutine-sleep.c  roms               tests
block                    docs              memory.c          qemu-doc.texi           rules.mak          thread-pool.c
block.c                  dtc               memory_mapping.c  qemu-img.c              savevm.c           thunk.c
blockdev.c               dump.c            migration.c       qemu-img-cmds.hx        scripts            tpm.c
blockdev-nbd.c           exec.c            migration-exec.c  qemu-img.texi           slirp              trace
blockjob.c               fpu               migration-fd.c    qemu-io.c               spice-qemu-char.c  trace-events
block-migration.c        fsdev             migration-rdma.c  qemu-io-cmds.c          stubs              translate-all.c
bsd-user                 gdbstub.c         migration-tcp.c   qemu-log.c              sysconfigs         translate-all.h
bt-host.c                gdb-xml           migration-unix.c  qemu-nbd.c              target-alpha       ui
bt-vhci.c                HACKING           monitor.c         qemu-nbd.texi           target-arm         user-exec.c
Changelog                hmp.c             nbd.c             qemu.nsi                target-cris        util
CODING_STYLE             hmp-commands.hx   net               qemu-options.h          target-i386        VERSION
configure                hmp.h             os-posix.c        qemu-options.hx         target-lm32        version.rc
COPYING                  hw                os-win32.c        qemu-options-wrapper.h  target-m68k        vl.c
COPYING.LIB              include           page_cache.c      qemu.sasl               target-microblaze  xbzrle.c
coroutine-gthread.c      iohandler.c       pc-bios           qemu-seccomp.c          target-mips        xen-all.c
coroutine-sigaltstack.c  ioport.c          pixman            qemu-tech.texi          target-moxie       xen-mapcache.c
coroutine-ucontext.c     kvm-all.c         po                qemu-timer.c            target-openrisc    xen-stub.c
coroutine-win32.c        kvm-stub.c        qapi              qga                     target-ppc
cpu-exec.c               libcacard         qapi-schema.json  QMP                     target-s390x
cpus.c                   LICENSE           qdev-monitor.c    qmp.c                   target-sh4
crifan@ubuntu:qemu-1.6.0-rc3$ pwd
/home/crifan/develop/embedded/qemu/qemu-1.6.0-rc3

3.参考官网的文档:

http://wiki.qemu.org/Manual

中的:

Virtual Development Board

Debian on an emulated ARM machine

QEMU Emulator User Documentation

去折腾。

4.先去在Ubuntu的Host上为arm平台安装QEMU:

【记录】在Ubuntu 13.04上为arm平台安装QEMU

5.然后再去下载测试软件:

http://wiki.qemu.org/download/arm-test-0.2.tar.gz

然后解压:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
crifan@ubuntu:qemu-1.6.0-rc3$ pwd
/home/crifan/develop/embedded/qemu/qemu-1.6.0-rc3
crifan@ubuntu:qemu-1.6.0-rc3$ cd ..
crifan@ubuntu:qemu$ ls
qemu-1.6.0-rc3  qemu-1.6.0-rc3.tar.bz2
crifan@ubuntu:qemu$ mkdir test
crifan@ubuntu:qemu$ cd test
crifan@ubuntu:test$ mkdir arm
crifan@ubuntu:test$ cd arm
crifan@ubuntu:arm$ wget http://wiki.qemu.org/download/arm-test-0.2.tar.gz
--2013-08-15 03:02:29--  http://wiki.qemu.org/download/arm-test-0.2.tar.gz
Resolving wiki.qemu.org (wiki.qemu.org)... 140.211.15.109
Connecting to wiki.qemu.org (wiki.qemu.org)|140.211.15.109|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3310162 (3.2M) [application/x-gzip]
Saving to: ‘arm-test-0.2.tar.gz’
 
100%[=======================================================================================================>] 3,310,162    978KB/s   in 3.4s  
 
2013-08-15 03:02:35 (938 KB/s) - ‘arm-test-0.2.tar.gz’ saved [3310162/3310162]
 
crifan@ubuntu:arm$ ls
arm-test-0.2.tar.gz
crifan@ubuntu:arm$ tar xf arm-test-0.2.tar.gz
crifan@ubuntu:arm$ ls
arm-test  arm-test-0.2.tar.gz
crifan@ubuntu:arm$ cd arm-test/
crifan@ubuntu:arm-test$ ls
arm_root.img  README  zImage.integrator
crifan@ubuntu:arm-test$ pwd
/home/crifan/develop/embedded/qemu/test/arm/arm-test
crifan@ubuntu:arm-test$

6.再去测试,结果只输出一行VNC:

【已解决】QUEMU安装完毕后测试arm出错:只有一行VNC server running on `127.0.0.1:5900′没其他输出

解决后,可以看到QEMU的arm的linux界面了:

7.再去测试测试arm的hello world是否可用。

先写个hello_qemu.c:

1
2
3
4
5
6
7
#include <stdio.h>
 
int main(void)
{
    printf("Hello QEMU for ARM !\n");
    return 0;
}

再去用自己的交叉编译器arm-xscale-linux-gnueabi去编译:

1
2
3
4
crifan@ubuntu:helloworld$ arm-xscale-linux-gnueabi-gcc -o hello_qemu hello_qemu.c
crifan@ubuntu:helloworld$ file hello_qemu
hello_qemu: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.19, not stripped
crifan@ubuntu:helloworld$

然后去运行试试:

先去找到sysroot的路径,是参考之前的折腾:

【已解决】Eclipse通过Makefile调用交叉编译器交叉编译C项目出错:Type ‘FILE’ could not be resolved

的路径:

/opt/crosscompile/xscale/gcc-4.6.0-glibc-2.9/arm-xscale-linux-gnueabi/sysroot/usr/include

所以sysroot,应该是:

/opt/crosscompile/xscale/gcc-4.6.0-glibc-2.9/arm-xscale-linux-gnueabi/sysroot

所以去试试:

1
2
3
crifan@ubuntu:helloworld$ qemu-arm -L /opt/crosscompile/xscale/gcc-4.6.0-glibc-2.9/arm-xscale-linux-gnueabi/sysroot hello_qemu
Hello QEMU for ARM !
crifan@ubuntu:helloworld$

说明交叉工具链是正常的。

8.再去折腾uboot:

【记录】Ubuntu下测试QEMU中加载和测试Uboot

9.然后再去下载编译kernel:

【记录】Ubuntu下测试QEMU中加载和测试Linux内核

10.然后再去弄Open TFTP Server:

【记录】Ubuntu下为QEMU安装Open TFTP Server

11.然后再去折腾qemu-ifup & qemu-ifdown:

【记录】Ubuntu下为QEMU准备qemu-ifup和qemu-ifdown

12.都准备好了,就可以去启动内核了:

【记录】Ubuntu下使用QEMU启动Linux内核

13.折腾完毕内核,就可以去弄rootfs了:

【记录】Ubuntu下为QEMU建立一个arm平台的可用的根文件系统rootfs

【总结】

此处,已经可以正常运行,一个基于busybox的,从ram启动的rootfs了。

至此,算是基本可用了。

有空再折腾,如何从uboot启动内核,从nfs加载rootfs等等内容。

转载请注明:在路上 » 【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs

【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】的更多相关文章

  1. 列出当前ARM开发板系统加载的模块

    lsmod 列出当前系统中加载的模块,其中左边第一列是模块名,第二列是该模块大小,第三列则是使用该模块的对象数目

  2. qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统

    qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和linux kernel,达到与开发板上一样的学习效果! 虽然已经买了2440开发板,但是在实际学习 ...

  3. qemu 模拟-arm-mini2440开发板-启动u-boot,kernel和nfs文件系统【转】

    转自:http://www.cnblogs.com/riskyer/p/3366001.html qemu 本文介绍了如何编译u-boot.linux kernel,然后用qemu启动u-boot和l ...

  4. IMX6开发板虚拟机加载Ubuntu12.04.2镜像

    基于迅为IMX6开发板安装好虚拟机之后,用户就可以加载 Ubuntu12.04.2 镜像.用户可以在网盘中下载“编译好的镜像”,该镜像已经安装好了编译 Android4.4.2 所需要的大部分软件.用 ...

  5. 【记录】恢复win7与ARM开发板TQ2440的串口连接

    1.给板子上电. 2.接好物理上的串口连接,板子那端就是普通的RS232串口,电脑这端是USB转串口的线的USB这头,连到电脑上,然后在Win7系统下,先去看看,当前连接的USB虚拟出来的串口是哪个口 ...

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

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

  7. ubuntu(物理机)连接ARM开发板

    非虚拟机 ubuntu下连接开发板 首先安装超级终端minicom sudo apt-get install minicom 安装完minicom以后,需要将开发板和电脑进行物理连接.需要使用一条网线 ...

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

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

  9. 一步步教你如何在ubuntu虚拟机中安装QEMU并模拟arm 开发环境(二)rootfs制作

    过了,一天,周又到了,博主终于可以拿出时间来把上一次没有给大家展示完了的内容今天在这里一并展示给大家,希望和大家共同进步,共同学习,同时我也虔诚的希望各位业界的朋友把自己的工作经验拿出来大家一起分享, ...

随机推荐

  1. jQueryEasyUI的使用

    easyUI是一个基于jQuery的前端框架,如果想要使用easyUI就需要先导入easyUI的一些js文件和样式文件(本地化的JS文件可以自己选择是否导入),导入方式如下: 其中必须首先导入jQue ...

  2. UVA12538 Version Controlled IDE

    题意翻译 维护一种数据结构,资磁三种操作. 1.在p位置插入一个字符串s 2.从p位置开始删除长度为c的字符串 3.输出第v个历史版本中从p位置开始的长度为c的字符串 1≤n≤50000,所有字符串总 ...

  3. hdu 5195 DZY Loves Topological Sorting (拓扑排序+线段树)

    DZY Loves Topological Sorting Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 ...

  4. 【刷题】BZOJ 2816 [ZJOI2012]网络

    Description http://www.lydsy.com/JudgeOnline/upload/zjoi2012.pdf Solution 维护树上联通块的信息,支持动态加边删边 LCT 总共 ...

  5. [UVALive 3683] A Scheduling Problem

    图片加载可能有点慢,请跳过题面先看题解,谢谢 题目给出了一个信息:答案是有向边最长路 \(k\) 的值或者是 \(k+1\) 的值 那么题目就变成了:求是否有一种给无向边定向的方案,使得在以有向边最长 ...

  6. 20135239 益西拉姆 linux内核分析 扒开系统调用的三层皮(下)

    一. 给MenuOS增加time-asm命令 代码解释 1.-rf:强制删除 2.clone :重新克隆 3.time-asm:显示系统时间的汇编形式 给MenuOS增加time和time-asm命令 ...

  7. DataTables实现rowspan思路

    直接看例子吧 <table id="example" class="display table table-bordered" cellspacing=& ...

  8. MySQL 第三篇:表操作

    一 存储引擎介绍 存储引擎即表类型,mysql根据不同的表类型会有不同的处理机制 详见:http://www.cnblogs.com/moyand/p/9020698.html 二 表介绍 表相当于文 ...

  9. 在eclipse中安装 Activiti Designer插件

    转: Activiti系列——如何在eclipse中安装 Activiti Designer插件 这两天在评估jbpm和Activiti,需要安装一个Activiti Designer插件试用一下. ...

  10. Kubernetes Deloyment实现滚动更新

    目录 滚动更新简介 使用kubectl rolling-update更新RC Deployment的rolling-update 滚动更新简介 当kubernetes集群中的某个服务需要升级时,传统的 ...