Ubuntu 14.04 下搭建ARM架构的QEMU虚拟机

Ubuntu 14.04 下搭建ARM架构的QEMU虚拟机,第1张

x86 架构的Ubuntu系统

本次安装选用Debian ARM

kernel

initrd

Debian-ARM iso

安装 QEMU 虚拟机

sudo apt-get install qemu-system-arm

1. 创建一个directory来存放相关文件

mkdir qemu_debian &&cd qemu_debian

2. 获取kernel 和 initrd (7.9 Wheezy 版本)

wget http://ftp.debian.org/debian/dists/Debian7.9/main/installer-armel/20130430/images/versatile/netboot/initrd.gz

wget http://ftp.debian.org/debian/dists/Debian7.9/main/installer-armel/20130430/images/versatile/netboot/vmlinuz-3.2.0-4-versatile

3. 获取iso文件

wget http://get.debian.org/cdimage/archive/7.9.0/armel/iso-cd/debian-7.9.0-armel-netinst.iso

1. 创建虚拟硬盘 (大小随意)

qemu-img create debian.img 20G

2. 载入 ARM kernel, initrd 以及ISO

qemu-system-arm -M versatileab -kernel ./vmlinuz-3.2.0-4-versatile -initrd ./initrd.gz -cdrom ./debian-7.9.0-armel-netinst.iso -hda debian.img

这个时候, qemu已经成功启动, 可以按需安装debian arm系统

系统安装完成后, 需要抽出kernel和initrd并复制到我们的虚拟硬盘里, 这个有一个地方要稍微注意一下. 因为/root 的分区有偏移量, 所以直接挂载是挂载不上的.

sudo fdisk -l -u debian.img

运行上面的命令可以看到有2048个unit的偏移量, 一个unit是512个bytes

所以正确的挂载应该加上这2048的偏移量.

sudo mount -o loop,offset=$((2048 * 512)) debian.img /mnt

抽出的步骤就简单多了

mkdir boot

cp /mnt/boot/* boot/ -rv

至此, 基于QEMU搭建ARM架构的虚拟机已经完成

启动虚拟机并将端口转发到2222以便ssh登陆

qemu-system-arm -M versatileab -kernel ./boot/vmlinuz-3.2.0-4-versatile -initrd ./boot/initrd.img-3.2.0-4-versatile -hda debian.img -m 1024 -append "root=/dev/sda1" -redir tcp:2222::22

这样启动虚拟机之后, 就可以ssh到localhost的2222端口登陆了.

使用Qemu模拟Cortex-A9运行U-boot和Linux 作者来源于网络

我的开发环境: Ubuntu-12.04 所有软件包为最新

1. 安装GNU工具链

sudo apt-get insatll gcc-arm-linux-gnueabi

sudo apt-get insatll g++-arm-linux-gnueabi

安装完成后会在 /usr/arm-linux-gnueabi/ 目录下生成库文件、头文件等。 我安装的GCC版本为:

arm-linux-gnueabi-gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

Copyright (C) 2011 Free Software Foundation, Inc.

2. 安装Qemu模拟器

sudo apt-get install qemu qemu-system qemu-utils

这时应该已经可以运行qemu-system-arm命令了, 其版本为:

qemu-system-arm --version

QEMU emulator version 1.0.50 (Debian 1.0.50-2012.03-0ubuntu2), Copyright (c) 2003-2008 Fabrice Bellard

3. 编译和运行U-boot:

到 ftp://ftp.denx.de/pub/u-boot/ 下载最新版本的U-Boot源代码, 我用的目前最新版本 u-boot-2012.04.tar.bz2

解压后进入源代码目录,在Makefile里面增加两行:

ARCH ?= arm

CROSS_COMPILE ?= arm-linux-gnueabi-

其实就是告诉它使用ARM编译器来编译。

make ca9x4_ct_vxp_config

make

这里配置目标板为 Cortex-A9x4 vexpress. 之所以选这个配置可以从 boards.cfg文件里看到, vexpress是ARM公司使用Cortext-A9的一个开发板,相关的代码在 board/armltd/vexpress/ 目录,配置文件为include/configs/ca9x4_ct_vxp.h。 而且关键的是Qemu里面已经支持这个板卡

编译完成后会生成u-boot文件

运行:

qemu-system-arm -M vexpress-a9 -m 256M -nographic -kernel u-boot

或者

qemu-system-arm -M vexpress-a9 -m 256M -serial stdio -kernel u-boot

发现,如果没有指定-nographics, 则必须要加-serial stdio才会有打印。

参数-m 256M为指定内存大小。-M 指定板卡的名称, 支持的板卡可以用-M ?查看, 如下:

#qemu-system-arm -M ?

Supported machines are:

beagle Beagle board (OMAP3530)

beaglexm Beagle board XM (OMAP3630)

............

versatilepb ARM Versatile/PB (ARM926EJ-S)

versatileab ARM Versatile/AB (ARM926EJ-S)

vexpress-a9 ARM Versatile Express for Cortex-A9

vexpress-a15 ARM Versatile Express for Cortex-A15

正常运行的结果:

qemu-system-arm -M vexpress-a9 -m 256M -nographic -kernel u-boot

U-Boot 2012.04 (Jul 08 2012 - 00:14:08)

DRAM: 256 MiB

WARNING: Caches not enabled

Flash: ## Unknown flash on Bank 1 - Size = 0x00000000 = 0 MB

## Unknown flash on Bank 2 - Size = 0x00000000 = 0 MB

*** failed ***

MMC: MMC: 0

*** Warning - bad CRC, using default environment

In: serial

Out: serial

Err: serial

Net: smc911x-0

Hit any key to stop autoboot: 0

VExpress#

VExpress# printenv

baudrate=38400

bootcmd=run bootflash

bootdelay=2

bootflash=run flashargscp ${ramdisk_addr} ${ramdisk_addr_r} ${maxramdisk}bootm ${kernel_addr} ${ramdisk_addr_r}

console=ttyAMA0,38400n8

。。。。。

注意:如果在检测Flash failed后停止运行,是因为在 arch/arm/lib/board.c里面 board_init_r()函数里检测Flash失败后调用了hang(), 暂时先把hang()去掉就可以运行下去了。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/664022.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-07-25
下一篇2023-07-25

发表评论

登录后才能评论

评论列表(0条)

    保存