Search
Write a publication
Pull to refresh

Создание arm-окружения в Debian GNU/Linux «lenny» с помощью qemu

Моя статья является переработанным материалом, который можно найти здесь:
http://www.opennet.ru/base/sys/linux_arm_qemu.txt.html
Спасибо автору и переводчику!

Устанавливаем необходимые пакеты:
host# aptitude install qemu debootstrap nfs-kernel-server

debootstrap — позволяет создать базовую систему Debian, а также является простым способом создания chroot и виртуальных машин.
qemu — эмулятор компьютера, позволяет эмулировать следующие архитектуры:
— PC (x86 or x86_64 processor)
— ISA PC (old style PC without PCI bus)
— PREP (PowerPC processor)
— G3 BW PowerMac (PowerPC processor)
— Mac99 PowerMac (PowerPC processor, in progress)
— Sun4m/Sun4c/Sun4d (32-bit Sparc processor)
— Sun4u (64-bit Sparc processor, in progress)
— Malta board (32-bit and 64-bit MIPS processors)
— ARM Integrator/CP (ARM)
— ARM Versatile baseboard (ARM)
— ARM RealView Emulation baseboard (ARM)
— Spitz, Akita, Borzoi and Terrier PDAs (PXA270 processor)
— Luminary Micro LM3S811EVB (ARM Cortex-M3)
— Luminary Micro LM3S6965EVB (ARM Cortex-M3)
— Freescale MCF5208EVB (ColdFire V2)
— Arnewsh MCF5206 evaluation board (ColdFire V2)
— Palm Tungsten|E PDA (OMAP310 processor)

nfs-kernel-server — поддержка для сервера NFS на уровне ядра.

Создаем директорию где будет лежать наша система.
host# mkdir /home/user/arm-sys

Запускаем debootstrap, c ключом --foreign выполняется только первая часть установки.
host# debootstrap --foreign --arch arm lenny /home/user/arm-sys
host# cd /home/user/arm-sys
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 "192.168.10.1:/home/user/arm-sys / nfs defaults 0 1" >> etc/fstab


Расшариваем папку через NFS и добавляем соответствующую запись /etc/exports:
/home/user/arm-sys 192.168.10.5(rw,no_root_squash,no_subtree_check,sync)

Экспортируем файловую систему:
host# exportfs -a

Скачиваем http://bellard.org/qemu/arm-test-0.2.tar.gz, в архиве находится ядро и образ initrd рабочей arm-системы.

Распаковываем в /home/user/arm-test.

Создаём сценарий такого вида:

#!/bin/sh

console="ttyAMA0" # serial console
nfsserver="192.168.10.1" # address of NFS server
nfsdir="/home/user/arm-sys" # exported share where debian/arm is installed
address="192.168.10.5" # address for guest server
gateway="192.168.10.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
ipinternet="192.168.1.64" #Адрес интерфейса, через который доступен интернет на машине-хосте

kernel="/home/user/arm-test/zImage.integrator" # arm kernel
initrd="/home/user/arm-test/arm_root.img" # arm initrd
nfsopts="rsize=1024,wsize=1024,hard,intr,tcp,nolock" # nfs options
consoleopt="console=$console"
nfsrootopt="nfsroot=$nfsserver:$nfsdir,$nfsopts"
ipopt="ip=$address::$gateway:$netmask:$hostname:$device"

echo 1 > /proc/sys/net/ipv4/ip_forward & #Включение перенаправления пакетов
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o $device -j SNAT --to-source 192.168.1.64 & #Включение NAT и будет интернет

qemu-system-arm -net nic -net tap,ifname=tap0 -m $mem \
-kernel $kernel -initrd $initrd \
-append "$consoleopt root=/dev/nfs $nfsrootopt $ipopt $initsin"


Необходимо поправить в файле /etc/qemu-ifup — ip адрес хоста.
sudo -p "Password for $0:" /sbin/ifconfig $1 172.20.0.1

на
sudo -p "Password for $0:" /sbin/ifconfig $1 192.168.10.1

Теперь запускаем систему arm:

host# ./start-qemu-arm

Гостевая машина загрузится и запустит оболочку bash.
Уже в виртуальной машине делаем следущее:

Логинимся под root'ом без пароля.

Перенастраиваем сетевой интерфейс, монтируем корень будущей системы, делаем её корневой для текущей системы, монтируем /proc.
guest# ifconfig eth0 192.168.10.5
guest# mkdir /mnt
guest# mount -t nfs -o rsize=1024,wsize=1024,nolock 192.168.10.1:/home/user/arm-sys /mnt
guest# cd /mnt
guest# chroot .
guest# mount /proc


Теперь запускаем второй этап debootstrap и завершаем установку:
guest# cd /
guest# ./debootstrap/debootstrap --second-stage


Этот процесс потребует времени, так как эмулятор не особенно быстр. После завершения установки отредактируйте такие файлы, как
/etc/hostname и /etc/resolv.conf.

В сценарии, который был сделан ранее, заменим строку:
-kernel $kernel -initrd=$initrd \
на
-kernel $kernel \

Делаем запуск готовой гостевой машины:
host# ./start-qemu-arm

Сделано не очень красиво, но работать должно.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.