The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Запуск Linux для процессоров ARM в окружении QEMU (linux arm qemu emulator virtual)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: linux, arm, qemu, emulator, virtual,  (найти похожие документы)
From: Михаил Сгибнев <mixa(@).dreamcatcher.ru> Date: 2006-09-12 16:50:46 Subject: Запуск Linux для процессоров ARM в окружении QEMU
Original

Перевод: Сгибнев Михаил

Введение

QEMU известен как свободная альтернатива VMware, позволяющая пользователям запускать виртуальные PC на PC. Для большинства остается неизвестным тот факт, что помимо эмуляции архитектуры x86, возможна эмуляция архитектур AMD64, Sparc, MIPS, PPC и ARM.

В случае архитектуры ARM, QEMU обеспечивает удобную среду разработки приложений для встраиваемых систем. В этой статье рассматривается, как настроить Debian/ARM под управлением QEMU, с учетом того, что корневой системой также является Debian.

Так как QEMU arm не имеет необходимости эмулировать IDE или SCSI, нужно установить сервер на экспортируемом разделе NFS.

Подготовка корневого сервера

Первым делом установим необходимые пакеты:
    
    host# apt-get qemu vde nfs-kernel-server debootstrap
    
    
debootstrap позволяет создавать базовые системы Debian или Ubuntu, а также является простым способом создания chroot и виртуальных машин.

VDE является эмулятором сети, также известный как user mode linux uml_net, позволяющий гостевой QEMU-машине соединиться с корневой системой через интерфейс tap.

Убедитесь, что ядро корневой системы собрано с поддержкой "Universal TUN/TAP device driver", эта опция конфигурации называется "TUN". Если вы предпочитаете использовать подключаемые модули, то есть хороший шанс обнаружить необходимый модуль под именем 'tun.o'.

Как только вы убедились в том, что ваше ядро поддерживает tun, внесите следущие изменения в /etc/network/interfaces, чтобы обеспечить поддержку сети :
    
    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
    
    
Убедитесь в том, что и вы и /dev/net/tun являетесь членом группы vde-net, а затем, поднимите интерфейс:
    
    host# ifup tap0
    
    
Вам необходимо место для установки дострибутива Debian, так же учтите то, что вам потребуется место для ваших разработок. В принципе, я считаю достаточным 300 Мб. Я разместил все это хозяйство в каталоге /nfs/share/arm/.

Теперь запустите debootstrap для того, чтобы скачать и установить дестрибутив Debian/arm, а затем скопируйте несколько недостающих файлов:
    
    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
    
    
Опция --foreign команды debootstrap указывает на то, что необходимо выполнить только первую часть процесса установки. Так как мы загружаем Debian архитектуры отличной от той, какая установлена на корневой машине, мы не можем запускать в данном chroot сценарии продолжения установки.

На корневой машине мы также должны настроить и запустить сервер NFS. Хочу сразу предупредить, что эмулируемая система будет работать очень медленно.

Расшариваем новый каталог через NFS и добавляем соответствующую запись /etc/exports:
    
    /nfs/share/arm	10.1.6.0/24(rw,no_root_squash,sync)
    
    
Экспортируем файловую систему:
    
    host# exportfs -a
    
    
Скачайте ядро arm-linux, оно поставляется в комплекте arm-test и взять его можно здесь.

Положите arm-linux zimage в /usr/local/etc/images/zImage.arm и затем создайте сценарий /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" 
    
    
Откорректируйте значения согласно вашим данным.

Конфигурирование гостевой системы

Теперь запускаем наш новый сервер arm в однопользовательском режиме, при этом, не обязательно обладать привилегиями пользователя root:
    
    host$ /usr/local/bin/start-qemu-arm single
    
    
Гостевой сервер должен загрузиться и запусить оболочку bash. Файловая система будет примонтирована в режиме только для чтения и необходимо повторно примонтировать ее в режиме чтения/записи:
    
    guest# mount -n -o remount,rw /
    guest# mount /proc
    
    
Теперь запускаем второй этап debootstrap и завершаем установку:
    
    guest# cd /
    guest# ./debootstrap/debootstrap --second-stage
    
    
Снова повторюсь, этот процесс потребует времени, так как эмулятор не особенно быстр. После завершения установки отредактируйте такие файлы, как /etc/hostname и /etc/resolv.conf, также установите ssh:
    
    guest# apt-get install ssh
    
    
После этого гостевую машину можно отключать. Для этого достаточно воспользоваться командой kill и убить процесс qemu, так как ее файловая система установлена с сервера NFS, нет никакой необходимости в корректном завершении работы.

Делаем образцово-показательный запуск гостевой машины:
    
    host$ /usr/local/bin/start-qemu-arm
    
    
После завершения загрузки гостевая машина будет доступна по протоколу ssh и адресу 10.1.6.50.

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Обсуждение [ RSS ]
 
  • 1, pirks, 00:48, 20/06/2009 [ответить] [смотреть все]
  • +/
    Очень интересный пример.
    только вопрос, что значит "Положите arm-linux zimage в /usr/local/etc/images/zImage.arm" ?
    Как запаковать 2 файла arm-linux zimage в zImage.arm  ?
     
  • 2, dimafon, 01:54, 27/06/2009 [ответить] [смотреть все]
  • +/
    Спасибо за статью. Все работает.
    Но есть одна проблема я не знаю root password ARM машины.
     
  • 3, dimafon, 02:42, 27/06/2009 [ответить] [смотреть все]
  • +/
    apt-get install ssh
    Coludn't find package ssh
     
  • 4, mittorn, 19:27, 12/03/2011 [ответить] [смотреть все]
  • +/
    А ускорить эмуляцию можно? моя gentoo на андроиде быстрее работает,  чем в qemu
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:





      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor