博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs【转】
阅读量:6036 次
发布时间:2019-06-20

本文共 5038 字,大约阅读时间需要 16 分钟。

转自:

【背景】

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

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

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

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

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

【折腾过程】

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

2.其下载页面:

下载QEMU:

解压得到源码:

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.参考官网的文档:

中的:

去折腾。

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

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

然后解压:

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:

解决后,可以看到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的路径,是参考之前的折腾:

的路径:

/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:

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

10.然后再去弄Open TFTP Server:

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

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

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

 

【总结】

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

至此,算是基本可用了。

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

转载请注明: »

转载于:https://www.cnblogs.com/sky-heaven/p/8624134.html

你可能感兴趣的文章
TFS 2012研发管理能力(5)
查看>>
四种LaunchMode及其使用场景
查看>>
通过vbs脚本备份数据-本地到异地
查看>>
tomcat介绍和安装
查看>>
UIButton的titleLabel不同状态字体判断
查看>>
我的友情链接
查看>>
杨泽业:wordpress在Nginx/Apache/IIS中的伪静态规则
查看>>
Python 中使用 MongoDB 存储爬虫数据
查看>>
WindowsServer 2008 AD搭建FTP隔离用户
查看>>
lmdb
查看>>
大文件如何传输,大文件的传输方式有哪些?
查看>>
docker的持久化存储和共享存储和网络架构
查看>>
撕掉普通程序员的标签,这才是真正的大数据工程师!
查看>>
Windows下安装Sqlmap过程及遇到的问题
查看>>
BSD常见分支
查看>>
开挂了!这5个Word技巧真的是超级实用,值得收藏!
查看>>
三分钟了解实时流式大数据分析
查看>>
留与后人一段面试的总结
查看>>
Spring基于XML方式配置事务
查看>>
T-MBA学习营 | 寒窗十数载,我们原来并不会学习?
查看>>