偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.
全部博文(1748)
分类: LINUX
2009-03-13 14:46:47
./configure --cc=/usr/bin/gcc-x.x --host-cc=/usr/bin/gcc-x.x --target-list=xxx
make
arm 的 disk image (arm-test-0.2.tar.gz), 解壓後照著 README 指示即可執行
host# apt-get qemu vde nfs-kernel-server debootstrap
auto tap0
iface tap0 inet static
address 10.1.6.1
netmask 255.255.255.0
network 10.1.6.0
broadcast 10.1.6.255
vde-switch vde-net
host# ifup tap0
host# mkdir /nfs/share/arm
host# debootstrap --foreign --arch arm etch /nfs/share/arm
host# cd /nfs/share/arm
host# cp /etc/passwd etc/passwd
host# cp /etc/shadow etc/shadow
host# cp /etc/group etc/group
host# echo "proc /proc proc defaults 0 0" > etc/fstab
host# echo "10.1.6.1:/nfs/share/arm / nfs defaults 0 1" >> etc/fstab
/nfs/share/arm 10.1.6.0/24(rw,no_root_squash,sync)
host# exportfs -a
#!/bin/sh
console="ttyAMA0" # serial console
nfsserver="10.1.6.1" # address of NFS server
nfsdir="/nfs/share/arm" # exported share where debian/arm is installed
address="10.1.6.50" # address for guest server
gateway="10.1.6.1" # default gateway
netmask="255.255.255.0" # subnet mask
hostname="arm.home" # hostname for guest server
device="eth0" # interface that guest server will use
mem=256 # memory for guest server in Mb
tap="/var/run/vde/tap0.ctl" # vde tap socket
kernel="/usr/local/etc/images/zImage.arm" # arm kernel
nfsopts="rsize=8192,wsize=8192,hard,intr,tcp,nolock" # nfs options
consoleopt="console=$console"
nfsrootopt="nfsroot=$nfsserver:$nfsdir,$nfsopts"
ipopt="ip=$address::$gateway:$netmask:$hostname:$device"
init=""
if [ "x$1" == "xsingle" ]
then
init="init=/bin/bash"
fi
vdeq qemu-system-arm -sock $tap -m $mem \
-kernel $kernel -nographic \
-append "$consoleopt root=/dev/nfs $nfsrootopt $ipopt $init"
host$ /usr/local/bin/start-qemu-arm single
guest# mount -n -o remount,rw /
guest# mount /proc
guest# cd /
guest# ./debootstrap/debootstrap --second-stage
guest# apt-get install ssh
host$ /usr/local/bin/start-qemu-arm
is a generic and open source processor emulator which can emulate i386, x86_64, ARM, MIPS, PowerPC and SPARC systems. In case of ARM, it can emulate an Integrator or a Versatile platform. The Versatile one is the most interesting as it includes a hard disk SCSI controller, an Ethernet card and a graphical display.
Using a kernel compiled with the right options, it is possible to install a distribution on such an emulated platform. That makes a cheap development platform. The emulated system running on an Athlon 64 X2 3800+ is around 20% faster than the popular and possibly with much more RAM (my emulated system has 256MiB of RAM).
This howto has been written for a host system, but could be easily adapted for other distributions.
Alternatively prebuilt images are also available.
is currently available as a in the distribution, you will need at least version 0.9.1. If you want to compile it yourself, here is the procedure:
To build QEMU a few packages like SDL needs to be installed on your system. gcc version 3.4 is also needed, as some parts of QEMU do not build with newer gcc versions. As QEMU is present in the archive, just run:
Then run the configure script:
Then compile it:
And install it on your system:
First you need to create an image of the hard disk. In my case I have chosen to emulate a 10GB hard-disk, but this size could be changed to correspond to your needs. Note that the file is created in qcow format, so that only the non-empty sectors will be written in the file.
A small tip: create a directory to hold all the files related to the emulated ARM machine.
Debian currently does not support the Versatile platform natively, that means there is no kernel available for this platform. However there is full support for this platform in the . You can either compile your own kernel (using a cross-compiler or an other ARM machine), or use the kernel I have built:
You also need to get the initrd of the Debian-Installer:
To start the installation process, use the following line:
After a few seconds you should see the kernel booting:
And then the first screen of the Debian-Installer:
Proceed as a normal installation, until you get to the following screen. If you need some documentation, please refer to the
Debian-Installer complains that it can't find kernel modules. This is normal because the initrd of another platform is used. This is not really a problem as the kernel I provide has been compiled with the network driver, the disk driver and ext3 support built-in. However that means you won't be able to install Debian on an XFS partition. This is a known limitation that will disappear if/when the Versatile kernel is integrated in the official Debian kernel.
So in short answer yes, contrarily to what is suggested.
During the installation, Debian installer will complain that it can not found a suitable kernel for this platform, as shown on the screenshot below. This is due to the fact that currently does not support the ARM Versatile platform; the support will be added post-Etch. An unofficial kernel being provided directly to , you can safely ignore this message and continue the installation.
Near to the end of the installation you will get the following error screen:
Again consider this message as harmless. There is no need for a bootloader, as QEMU is able to directly load a kernel and an initrd.
Then you will get to the end of the installation. Congratulations!
When the systems reboot, just exit QEMU. Different parameters have to be used to boot the installed system.
To start the system use the following command:
After a few seconds the system should give you a login prompt:
The first thing to do is to install the kernel image corresponding to the running kernel. This will install all the modules that you may need.
You now have a full Debian arm system that you can use for development or whatever. You can even run using the fb device. Note that you have to select a 256-color mode, with a resolution up to 1024x768.
You can even chat on IRC :)
If you don't want to start QEMU in graphic mode, you can use the -nographic
option, and
ask the kernel to use ttyAMA0
as the console. The command to start the emulated
machine then become:
/etc/inittab
and add the following line:
/etc/securetty
:
By default QEMU emulate a machine with 128MiB of RAM. You can use the -m
option to
increase or decrease the size of the RAM. It is however limited to 256MiB, greater sizes will crash
the kernel.
When no option is specified QEMU uses a non priviledged user mode network stack that gives the emulated machine access to the world. But you probably want to make your emulated machine accessible from the outside. It is possible by using the tap mode and bridging the tap interface with the network interface of the host machine.
The first thing to do is to active a bridge on your host machine. For that you have to modify the
/etc/network/interfaces
file as follow:
Then you need to install the bridge-utils
package and restart your network interface:
Create a script call /etc/qemu-ifup
that will be executed upon the start of QEMU:
As you probably don't want to execute QEMU as root, you need to create a qemu
user group
and authorize the brctl and ifconfig commands for users of the qemu
via sudo
.
You need to add the following lines to /etc/sudoers
(edit the file using
visudo
):
Finally you can start your emulated machine using the following command