Вшиваем таблицы SLIC в Linux KVM/QEMU/Bochs

Рассмотрим каким образом в виртуальные машины 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 виртуального окружения:

SLIC ToolKit SLIC ToolKit

SLIC ToolKit

Активируем ОС Windows:

Активация Windows

Похожие публикации
Оставите комментарий ?

26 Комментарии。

  1. Дмитрий, пиратствуете? 🙂
    С 29 марта я свободен, ай-да грабить корованы 😀

    • Нет, не пиратствуем. В тексте же написано: "Если вы намерены перенести данные из вашего системного BIOS..." 😉
      Желаю удачно "освободится", если что звоните/пишите, проконсультирую 😉

  2. Дьяконов Игорь Николаевич

    Дмитрий я так понимаю вы решили все же использовать все прелести виртуализации на работе ? Вообще для windows сервер наверное проще настроить KMS сервер активации чем париться со SLIC таблицами . Девайсы со SLIC таблицами как правило используется в OEM решениях.

    • Хочешь, не хочешь, а прелести виртуализации тебя сами накроют 🙂 Работодатель желает по максимуму сэкономить на оборудовании.
      От я даже не знаю стоит ли возиться с KMS ради одиноко стоящего сервера терминалов... Или проще перенести таблицы SLIC в BIOS виртуального контейнера.

  3. Цветаев Евгений Александрович

    Дмитрий , ну из за одного сервера конечно нет смысла настраивать KMS сервер . Кстати судя по скрину виртуальная машина будет жить на ноутбуке :mrgreen: ? Может все же сервер терминалов на 2003 Windows сервер настроить ? Я по роду деятельности в липецке имею дело с виртуальными машинами , но использую Microsoft Hyper V , что могу сказать по этому поводу , Windows сервер 2008 очень уж требователен к пямяти и процессорному времени, а 2003 на itel atom работает в virtualbox на freebsd и загрузка системы довольно приемлемая

    • Виртуальная машина должна была работать на сервере. Но планы изменились, сейчас она мигрировала в дата-центр в Германии (http://www.sim-networks.com/vds/esxi?pid=442) на VMware vSphere Hypervisor (ESXi) v5.1 🙂 А что касается выбора ОС, то, что заказчик потребовал, то и получил. Я не гуру в виртуализации, но народ пишет, что VirtualBox – наверно, самый удобное решение среди бесплатных, однако самое неэффективное с точки зрения использования ресурсов. Говорят, что Linux KVM на порядок производительнее, ибо реализован на уровне ядра с использованием возможностей по виртуализации современных CPU: Intel VT и AMD-V. Собственно именно этим был обусловлен выбор в пользу openSUSE.

  4. lsd25 на форуме proxmox это я
    hiveliberty.org:60080 - тоже мое
    Хочу просто предупредить, что hfs я у себя вырубил, потому hiveliberty.org:60080 не доступен.
    p.s. запись находил давно еще эту)

    • Честно говоря, я не знаю, насколько этот материал еще актуален. С момента его написания больше к данной теме не возвращался. В любом случае спасибо вам за публикацию своих наработок и за предупреждение 🙂

      • Актуально, пока что, для тех кто слик юзает для win 7 в виртуалках под qemu-kvm. Ну и мало ли кому еще)
        Под свежий seabios версии 1.8.2 я патчик себе поправил, так на всякий случай.
        Для меня уже не шибко актуальна эта тема с патчем)

        Ну и, кстати, наработки-то не мои даже. Я сам нашел тему где-то с этим патчем, но человек давно не возился с ним. А другие методы по интеграции slic у меня не работали. Вот и сравнил оригинальный и модифицированный файл патчем для доступной версии на то время.
        Можно сказать, что поддержал тему патча немного)

        • Будем наедятся, что кому-нибудь это еще пригодится 🙂 Спасибо вам за труды.

          • Поделитесь плиз свежим патчем под 1.8.2

          • У меня такового, к сожалению, нет.

          • 🙁 Жаль, видимо Эйно здесь не бывает...

          • Написал ему по электронной почте. Если ответит, дам знать.

          • Вот патчи: http://rghost.ru/78prKwt9W
            А вот комментарий автора: "Юзал на proxmox подобные биосы. С последними версиями сталкивался с тем, что Окна уходили в постоянную загрузку на бутскрине. Змейка бегает и бегает.
            Методом тыка выяснил, что необходимо подменять файл acpi-dsdt.aml скомпилированным вместе с новым биосом. Тогда все окей становалилось.
            С патчами компиляция идет, проверил. А вот на работу не проверил."

            Спасибо еще раз Эйно за проделанную работу.

  5. Решил проверить на последних версиях наличие слик таблицы в биосе через слик тулкит. А вот нифига нет. На последней 1.7.3 есть, а на 1.9.0 нет..

    • Т.е. патчи не рабочие?

      • Нет, не работают. Причем, перестали работать, как оказалось, с 1.7.3 версии.. В 1.7.5.2 уже не вшивался SLIC.

        • Жаль 🙁 Но спасибо за информацию.

          • В общем, я тут почитал и протестил. С новыми версиями можно забить на этот патч!)
            Берем наш полученный SLIC, без конвертации в hex и цепляем его через аргумент acpitable file
            В моем случае в proxmox в конфиге виртуалке выглядело так
            args: -acpitable file=/usr/share/kvm/slic/SLIC

            Собственно, статья, которая побудила попробовать этот аргумент
            http://habrahabr.ru/post/247597/

          • О, спасибо. Такой метод намного проще.

  6. Спасибо, будем пробовать...

  7. Млин, то ли лыжи не едут, то ли гранаты у меня не той системы...
    Подскажите, вроде всё прикрутил, но в гостевой ОС RSDT = BOCHS BXPCRSDT, хотя в реальном ACPI параметр соответствует SLIC?

    Linux SRV1 4.2.2-1-pve #1 SMP Mon Oct 5 18:23:31 CEST 2015 x86_64 GNU/Linux
    seabios 1.8.2

    • Если патчем делаешь со свежим сиабиосом, то не прокатит. Выше в комментариях написал об этом.
      На mydigitallife есть патч более правильный, но его надо подгонять под свежие версии. Это для подключения slic. Но зачем патчить, когда и так уже из коробки работает подключение файла acpi таблицы...

      • Да я уже и патчем, и параметром args: acpi подставляю... не работает почему то...
        В “живой» винде параметр RSDT соответствует таблице слик, в виртукалке значение равно BOCHS BXPCRSDT, XSDT вообще отсутствует, соответственно активация не проходит 🙁
        почитал про acpi.c, там в шапке начиная с 1.7.5 версии
        // Support for generating ACPI tables (on emulators)
        // DO NOT ADD NEW FEATURES HERE. (See paravirt.c / biostables.c instead.)
        я так понимаю что патчи работать и не будут, надо писать новые под biostables.c

        • Да, там всякие изменения в структуре грянули) Перелопачивать надо.
          Но оно не нужно, ибо можно скомпилировать свежую версию seabios и в конфе виртуалки прописать такое, например:
          args: -bios /usr/share/kvm/190/orig/bios-256k.bin -acpitable file=/usr/share/kvm/slic/SLIC

          Лично у меня прекрасно, подцепил) Proxmox самый свежий в продакшине.

Оставить комментарий


Примечание - Вы можете использовать эти HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>