zoukankan      html  css  js  c++  java
  • Running Linux for ARM processors under QEMU

    QEMU is well-known as a free replacement for VMware, allowing users to run a PC within a PC. What isn't so well known about QEMU is that, in addition to emulating x86 architectures, it can emulate AMD64, Sparc, MIPS, PPC and ARM CPUs.

    In the case of the ARM architecture, QEMU provides a convenient, if slow, environment in which development can be done for embedded systems.

    This article describes the process involved in building a Debian/ARM server running under QEMU. It assumes that Debian is also being used as the host server.

    Since QEMU's arm emulator has no ability to emulate either IDE or SCSI disks, it will be necessary to install the server on an NFS exported partition.

    Preparing the host server



    Firstly, install the required packages on your host server:


    host# apt-get qemu vde nfs-kernel-server debootstrap


    debootstrap allows the creation of a base Debian or Ubuntu system, and is a very simple method for building chroots and virtual machines quickly.

    VDE is a virtual network emulator, much like user mode linux's uml_net, allowing a QEMU-emulated machine to connect to the host server's network through a tap interface.

    Make sure that your host kernel has support for the "Universal TUN/TAP device driver"; the kernel configuration option for this is named "TUN". If you're running a modularised kernel, there's a good chance that it will
    be named 'tun.o'.

    Once you have a kernel with tun support, set up a tap interface for the emulated machine to communicate through. In /etc/network/interfaces on your host machine, add the following stanza:



    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


    Ensure that /dev/net/tun is owned by group vde-net and that you are also a member of that group; add this to your host server's /etc/group file and log out and back in again, if necessary.

    Then, bring up the interface:

    host# ifup tap0


    You'll need a partition with enough spare space on it to hold a basic Debian installation; make sure you have enough room on it to grow in the future. You can probably get away with 300Mb at the minimum. I placed my tree under /nfs/share/arm/.

    Now, run debootstrap to download and install the base Debian/arm distribution, and copy a few of the files from your host system into it:

    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


    debootstrap's --foreign option tells it to only perform the first stage of the bootstrap process, downloading and unpacking the packages. Since we're downloading Debian for a different architecture from that on which we're running on the host server, our host system would not be able to use this new system in a chroot to run the pre- and post-installation scripts.


    QEMU is well-known as a free replacement for VMware, allowing users to run a PC within a PC. What isn't so well known about QEMU is that, in addition to emulating x86 architectures, it can emulate AMD64, Sparc, MIPS, PPC and ARM CPUs. In the case of the ARM architecture, QEMU provides a convenient, if slow, environment in which development can be done for embedded systems. This article describes the process involved in building a Debian/ARM server running under QEMU. It assumes that Debian is also being used as the host server. Since QEMU's arm emulator has no ability to emulate either IDE or SCSI disks, it will be necessary to install the server on an NFS exported partition.


    We're going to use the same server that is being used as the host server for running QEMU as the NFS server for the guest server's root filesystem; an emulated system is slow enough as it is, we don't need to make things worse by having a real ethernet network in between the guest OS and its filesystem (as opposed to a virtual ethernet, in this case).

    Share the new directory out via NFS, by adding the following entry to /etc/exports:

    /nfs/share/arm 10.1.6.0/24(rw,no_root_squash,sync)


    Then export the filesystem:

    host# exportfs -a


    Download a kernel for arm-linux; there's one provided in the arm-test files on the qemu website (and a copy here.

    Place the arm-linux zimage in /usr/local/etc/images/zImage.arm, and then create the following script as /usr/local/bin/start-qemu-arm:

    #!/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"


    Adjust the parameters at the top of the script to suit your requirements.


    ================================
      /\_/\                        
     (=^o^=)  Wu.Country@侠缘      
     (~)@(~)  一辈子,用心做一件事!
    --------------------------------
      学而不思则罔,思而不学则怠!  
    ================================
  • 相关阅读:
    BZOJ 3529 [Sdoi2014]数表
    bzoj 3195 [Jxoi2012]奇怪的道路
    BZOJ 4720 [Noip2016]换教室
    BZOJ 2160 拉拉队排练
    BZOJ 1031 [JSOI2007]字符加密Cipher 后缀数组教程
    BZOJ 1002 [FJOI2007]轮状病毒
    欧拉定理、拓展欧拉定理及其应用(欧拉降幂法)
    算术基本定理解析及其应用
    The 15th Zhejiang Provincial Collegiate Programming Contest(部分题解)
    网络流解析及其应用
  • 原文地址:https://www.cnblogs.com/WuCountry/p/1404902.html
Copyright © 2011-2022 走看看