Рассмотрим каким образом в виртуальные машины Linux KVM/QEMU/Bochs можно добавить таблицы SLIC, которые используются для активации Windows 7/2008/8/2012.
Данные наработки основаны на материалах, найденных в данных форумах:
http://forums.mydigitallife.info/threads/12401-Modified-Bios-for-KVM-Qemu-Bochs-Bios
http://forum.proxmox.com/threads/6772-Proxmox-and-SeaBIOS-additional-parameters
Имеем ОС openSUSE 12.2 (x86_64):
Linux vs 3.4.33-2.24-desktop #1 SMP PREEMPT Tue Feb 26 03:34:33 UTC 2013 (5f00a32) x86_64 x86_64 x86_64 GNU/Linux
KVM установлен из репозитария YaST:
QEMU emulator version 1.1.1 (kvm-1.1.1-1.8.1), Copyright (c) 2003-2008 Fabrice Bellard
Задача сводится к тому, что нам необходимо заменить SeaBIOS, идущий в стандартном комплекте с KVM/QEMU/Bochs на модифицированный, содержащий в себе таблицы SLIC. Скачиваем и распаковываем SeaBIOS v1.7.2:
wget http://code.coreboot.org/p/seabios/downloads/get/seabios-1.7.2.tar.gz
tar zxvf seabios-1.7.2.tar.gz
mv seabios-1.7.2 seabios
cd ./seabios/src
Либо на ваше усмотрение можно также использовать SeaBIOS v1.7.1.
Теперь необходимо модифицировать файл исходных кодов "acpi.c":
wget http://hiveliberty.org:60080/other/seabios/172/acpi_slic.patch
patch acpi.c acpi_slic.patch
Патч для SeaBIOS v1.7.1 находится по соседству: http://hiveliberty.org:60080/other/seabios/171/acpi_slic.patch. Также оба патча можно найти здесь.
Теперь необходимо подготовить дамп таблицы SLIC. Если вы намерены перенести данные из вашего системного BIOS, то команда выглядит следующим образом:
xxd -i /sys/firmware/acpi/tables/SLIC | grep -v len | sed 's/unsigned char.*/static char SLIC[] = {/' > acpi-slic.hex
Для заранее подготовленного бинарного файла она немного изменится:
xxd -i ../slic.bin | grep -v len | sed 's/unsigned char.*/static char SLIC[] = {/' > acpi-slic.hex
Компилируем SeaBIOS:
cd ..
make
Останавливаем все виртуальные машины и копируем новый BIOS:
mv /usr/share/qemu-kvm/bios.bin /usr/share/qemu-kvm/bios.bin-dist
cp ./out/bios.bin /usr/share/qemu-kvm/
Запускаем виртуальные машины. В гостевой ОС Windows с помощью утилиты SLIC ToolKit проверяем наличие таблиц SLIC в BIOS виртуального окружения:
Активируем ОС Windows: