*****Настройка виртуальной mips (32 little endian) машины на qemu****** 1) Получить среду виртуализации qemu Создать Взять дистрибутив qemu с оф. сайта mips по ссылке: http://codescape-mips-sdk.imgtec.com/components/qemu/2.5.0.2.0/QEMU.2.5.0.2.0.for.MIPS.CentOS-6.5.x86.tar.gz Примечание: Этот архив находится в дериктории environment хранилища. распаковать локально (работает без установки) в директорию Либо собрать свежий qemu под mips (тестирование qemu-kvm не проводилось, но он вроде-бы как заявлен на целевую архитектуру x86, x64). Инструкция по сборке с git-а (указана на https://www.qemu.org/download/#source): а) Получаем исходники со всеми модулями: $ git clone --recursive git://git.qemu.org/qemu.git $ cd qemu && mkdir build && cd build б) назначаем целевую платформу mips 32 little endian (исключит сборку среды виртуализации под ненужные платформы): $ ../configure --target-list=mipsel-softmmu в) Собираем: $ make -j В результате сборки появится среда виртуализации qemu для mips 32 little endian (путь относительно текущего каталога сборки) ./mipsel-softmmu/qemu-system-mipsel г) скопировать бинарные файлы $ cp ./mipsel-softmmu/qemu-system-mipsel /bin/ $ cp ./qemu-img /bin/ 2) Создание виртуальной машины а) Воспользоваться инструкцией на сайте https://www.mips.com/blog/how-to-run-smp-linux-in-qemu-on-a-mips64-release-6-cpu/ Примечание: Есть одно отличие - везде необходимо изменить целевую платформу на mips 32 little endian и использовать defconfig-и для mips32le б) (предпочтительнее) взять готовое решение ядра и rootfs c локального хранилища (см. ниже). 3) необходимо создать сетевой мост, либо использовать уже созданный. Примечание: Если использовать готовый мост, то необходимо убедится, что через него есть связь с интернетом Создание моста рассматривалось для centOS путем ручного изменения файлов конфигурации интерфейсов. Процедура настройки взята отсюда: https://www.poseti.net/articles/bridge-v-centos-7 а) Необходимо внести изменения в настройки нашей сетевой карты которая смотрит в сеть: У меня название этой сетевой карты в системе enp6s0, и открываем ее конфиг (требуется root): # nano /etc/sysconfig/network-scripts/ifcfg-enp6s0 И добавляем туда строчку BRIDGE=bridge-name, где bridge-name любое имя (как показано ниже): BOOTPROTO=none NM_CONTROLLED=no TYPE=Ethernet DEVICE=enp6s0 MTU=1500 ONBOOT=yes BRIDGE=bridge-name б) Далее нам необходимо файл ifcfg-bridge-name (требуется root): # nano /etc/sysconfig/network-scripts/ifcfg-bridge-name Если IP-адрес наша ХОСТ машина получает по DHCP то конфиг будет выглядеть следующим образом: DEVICE=bridge-name TYPE=Bridge BOOTPROTO=dhcp IPV6INIT=no IPV6_AUTOCONF=no ONBOOT=yes Или если вы используете статические настройки сети: DEVICE=bridge-name TYPE=Bridge IPV6INIT=no BOOTPROTO=none MTU=1500 IPADDR=192.168.1.234 NETWORK=192.168.1.0 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 BROADCAST=192.168.1.255 DNS1=8.8.8.8 DNS2=8.8.4.4 DEFROUTE=yes IPV4_FAILURE_FATAL=yes ONBOOT=yes в) Теперь можно перезапустить сеть (требуется root): # service network restart 4) Для удобства создать рабочую директорию виртуальной машины и скопировать в нее: - ядро (vmlinuz) - образ rootfs (qemu.qcow2) - скрипт (link-bridge) - скрипт (unlink-bridge) - скрипт (shrink-disk) Примечание: Это файлы находится в директории vm-workspace хранилища. 5) в скриптах link-bridge, unlink-bridge необходимо изменить имя моста к которому qemu будет подключать/отключать созданный tap интерфейс при запуске/остановки виртуальной машины. Т.е присвоить переменной bridge значение bridge-name 6) Далее необходимо запустить qemu (требуется root): $ cd VM_WORKSPACE # /bin/qemu-system-mipsel -M malta -kernel vmlinuz -nographic \ -drive file=qemu.qcow2,format=qcow2 -append "root=/dev/sda clocksource=GIC"\ -device virtio-net,netdev=hn0,mac=mac-addr \ -netdev tap,id=hn0,script=link-bridge,downscript=unlink-bridge Примечание: В моем случае mac-addr заменен на 52:a4:00:12:78:66 (назначен произвольно). Можно выбрать любой неконфликтующий. При этом произойдет запуск виртуальной машины. Залогиниться используя root root. После входа проверить наличие сетевого подключения и корректной работы DNS путем пинга на какой нибудь сайт. Если пинга нет проверить что сетевой интерфейс работает, для этого выполнить: $ ip link в сообщении проверить, что интерфейс включен (state UP) при этом МАС интерфейса соответствует назначеному mac-addr Если интерфейс отключен, то включаем его (требуется root на виртуальной машине): # ip link set up перезапустить сеть (требуется root): # service network restart либо перезапустить виртуальную машину например так (требуется root): # reboot После перезапуска проверить, что адрес назначен в той же подсети что и хосту. На этом настройка виртуальной машины завершается. Примечание: Для сжатия диска виртуальной машины (например для передачи по сети) использовать скрипт shrink-disk.sh (см. ниже): $ ./shrink-disk.sh