Modified Bios for KVM/Qemu/Bochs Bios?

Discussion in 'Virtualization' started by Seb, Nov 9, 2009.

  1. Noname2226

    Noname2226 MDL Novice

    Dec 23, 2013
    6
    1
    0
    I'm bazzled by the skills shown on these threads (Y)
     
  2. Tray34

    Tray34 MDL Novice

    Jan 9, 2014
    1
    0
    0
    I followed mikelinux's steps I and finally got it working.

    Btw if your own SLIC produces and error, just search for the SLICs here on the board, there's a topic here somewhere that lists down all of them, just choose what you want.

    Also I didn't do the valid ranges, I just picked one from Dell and it produced the bin with no errors.
     
  3. karin-mirai

    karin-mirai MDL Novice

    Feb 1, 2014
    1
    1
    0
    #43 karin-mirai, Feb 1, 2014
    Last edited by a moderator: Apr 20, 2017
  4. rabbit1

    rabbit1 MDL Novice

    Mar 2, 2010
    2
    0
    0
    Now I'm trying to create my own BIOS.BIN for hours without success :(

    My System is (still) an Ubuntu 12.04 LTS so I'm currently using seabios-0.6.2 and not seabios-1.7.2. (I'm still not sure if 1.7.2 is working for my kvm/qemu)

    Accordingly to reply #39 of this thread (http : //forums.mydigitallife.net/threads/12401-Modified-Bios-for-KVM-Qemu-Bochs-Bios/page4?p=802664&viewfull=1#post802664):
    - I've tried 0.6.2 but the patch failed
    - so I've tried 1.7.2 and the patch was successful
    - My Mainboard has no SLIC so cannot use /sys/firmware/acpi/tables/SLIC but a Bios-file with a SLIC.
    - I tried P5GD2-X-ASUS-0601_SLIC.ROM with (maybe?) ASUS SLIC --> failed.
    - I tried M2N-SLI-DELUXE-1701_SLIC.BIN with (maybe?) ASUS SLIC --> failed.
    - I tried 1002_SLIC_HP_21.BIN with HP SLIC -> failed.

    The ASUS SLICS faield with "bios too big".
    The HP-SLICS (using "") with "ld:eek:ut/romlayout32flat.lds:87: syntax error"
    ... and I did not found the specified "SONY-VAIO_2.1.BIN"-File everywhere.

    So please can anyone post a working bios.bin (or maybe tell me the way how to create it from an existing bios.bin using the same tools for the "real" bios hacks)
     
  5. Tito

    Tito Super Mod / Adviser
    Staff Member

    Nov 30, 2009
    18,681
    18,585
    340
  6. rabbit1

    rabbit1 MDL Novice

    Mar 2, 2010
    2
    0
    0
    Thanks. Now I'ts clear why I got the message "bios too big" :)
    It also seems that the seabios 1.7.2 is well working on Ubuntu 12.04 LTS.

    I've just renamed /usr/share/seabios/bios.bin to bios.original.bin, copied the new to bios.slic.bin and created an symlink to bios.bin.
     
  7. bhmayor

    bhmayor MDL Novice

    May 25, 2009
    5
    0
    0
    Update of page for 1.7.5?

    MikeLinux,

    Any chance of seeing this procedure updated to work with the Seabios 1.7.5 (as it breaks using that version)?

    Thanks!
     
  8. donhw

    donhw MDL Novice

    Jan 21, 2014
    3
    2
    0
    I think the upgrade of pve-qemu-kvm 2.1-5 is what caused this but not sure. Looks like some newer info on patching in this thread.

    lists.gnu.org/archive/html/qemu-devel/2014-04/msg00879 Can't post link so add.html
     
  9. bgosmiley

    bgosmiley MDL Novice

    Sep 14, 2014
    2
    4
    0
    #49 bgosmiley, Sep 27, 2014
    Last edited by a moderator: Apr 20, 2017
    For Seabios 1.7.5
    Place patch and acpi-slic.hex in the src directory
    run 'patch -p1 <acpi_slic.patch' from src directory
    then make the project
    for proxmox 3.3: rename bios.bin to bios-256k.bin

    This patch still uses the 1.7.3 method as a fall back but if the acpi tables get loaded from rom files, then it rebuilds the table list with the loaded tables and the SLIC added.



    Code:
    diff -uNr ../src.orig/fw/acpi.c ./fw/acpi.c
    --- ../src.orig/fw/acpi.c 2014-05-28 22:09:15.000000000 +1000
    +++ ./fw/acpi.c 2014-09-27 16:18:53.000000000 +1000
    @@ -23,6 +23,8 @@
     
     #include "src/fw/acpi-dsdt.hex"
     
    +#include "acpi-slic.hex"
    +
     static void
     build_header(struct acpi_table_header *h, u32 sig, int len, u8 rev)
     {
    @@ -35,6 +37,8 @@
         h->oem_revision = cpu_to_le32(1);
         memcpy(h->asl_compiler_id, BUILD_APPNAME4, 4);
         h->asl_compiler_revision = cpu_to_le32(1);
    +    if (sig == RSDT_SIGNATURE)    // only RSDT is checked by win7 & vista
    +      memcpy(h->oem_id, ((struct acpi_table_header*)SLIC)->oem_id, 14);
         h->checksum -= checksum(h, len);
     }
     
    @@ -590,6 +594,46 @@
         PCI_DEVICE_END,
     };
     
    +void
    +build_rsdp(struct fadt_descriptor_rev1 *fadt, u32 *tables, u32 tbl_idx, int makedsdt)
    +{
    +    if (makedsdt)
    + {
    +        /* default DSDT */
    +        struct acpi_table_header *dsdt = malloc_high(sizeof(AmlCode));
    +        if (!dsdt) {
    +            warn_noalloc();
    +            return;
    +        }
    +        memcpy(dsdt, AmlCode, sizeof(AmlCode));
    +        fill_dsdt(fadt, dsdt);
    +        /* Strip out compiler-generated header if any */
    +        memset(dsdt, 0, sizeof *dsdt);
    +        build_header(dsdt, DSDT_SIGNATURE, sizeof(AmlCode), 1);
    +    }
    +
    +    // Build final rsdt table
    +    struct rsdt_descriptor_rev1 *rsdt;
    +    size_t rsdt_len = sizeof(*rsdt) + sizeof(u32) * tbl_idx;
    +    rsdt = malloc_high(rsdt_len);
    +    if (!rsdt) {
    +        warn_noalloc();
    +        return;
    +    }
    +    memset(rsdt, 0, rsdt_len);
    +    memcpy(rsdt->table_offset_entry, tables, sizeof(u32) * tbl_idx);
    +    build_header((void*)rsdt, RSDT_SIGNATURE, rsdt_len, 1);
    +
    +    // Build rsdp pointer table
    +    struct rsdp_descriptor rsdp;
    +    memset(&rsdp, 0, sizeof(rsdp));
    +    rsdp.signature = cpu_to_le64(RSDP_SIGNATURE);
    +    memcpy(rsdp.oem_id, BUILD_APPNAME6, 6);
    +    rsdp.rsdt_physical_address = cpu_to_le32((u32)rsdt);
    +    rsdp.checksum -= checksum(&rsdp, 20);
    +    copy_acpi_rsdp(&rsdp);
    +}
    +
     #define MAX_ACPI_TABLES 20
     void
     acpi_setup(void)
    @@ -624,6 +668,16 @@
         if (pci->device == PCI_DEVICE_ID_INTEL_ICH9_LPC)
             ACPI_INIT_TABLE(build_mcfg_q35());
     
    + //Add SLIC
    + void *buf = malloc_high(sizeof(SLIC));
    + if(!buf)
    +  warn_noalloc();
    + else
    + {
    +  memcpy(buf, SLIC, sizeof(SLIC));
    +  ACPI_INIT_TABLE(buf);
    + }
    +
         struct romfile_s *file = NULL;
         for (;;) {
             file = romfile_findprefix("acpi/", file);
    @@ -650,38 +704,51 @@
             }
         }
     
    -    if (CONFIG_ACPI_DSDT && fadt && !fadt->dsdt) {
    -        /* default DSDT */
    -        struct acpi_table_header *dsdt = malloc_high(sizeof(AmlCode));
    -        if (!dsdt) {
    -            warn_noalloc();
    -            return;
    -        }
    -        memcpy(dsdt, AmlCode, sizeof(AmlCode));
    -        fill_dsdt(fadt, dsdt);
    -        /* Strip out compiler-generated header if any */
    -        memset(dsdt, 0, sizeof *dsdt);
    -        build_header(dsdt, DSDT_SIGNATURE, sizeof(AmlCode), 1);
    -    }
    + build_rsdp(fadt, tables, tbl_idx, CONFIG_ACPI_DSDT && fadt && !fadt->dsdt);
    +}
     
    -    // Build final rsdt table
    -    struct rsdt_descriptor_rev1 *rsdt;
    -    size_t rsdt_len = sizeof(*rsdt) + sizeof(u32) * tbl_idx;
    -    rsdt = malloc_high(rsdt_len);
    -    if (!rsdt) {
    -        warn_noalloc();
    -        return;
    -    }
    -    memset(rsdt, 0, rsdt_len);
    -    memcpy(rsdt->table_offset_entry, tables, sizeof(u32) * tbl_idx);
    -    build_header((void*)rsdt, RSDT_SIGNATURE, rsdt_len, 1);
    +void
    +acpi_add_slic(void)
    +{
    +    u32 tables[MAX_ACPI_TABLES], tbl_idx = 0;
    + struct fadt_descriptor_rev1 *fadt = NULL;
     
    -    // Build rsdp pointer table
    -    struct rsdp_descriptor rsdp;
    -    memset(&rsdp, 0, sizeof(rsdp));
    -    rsdp.signature = cpu_to_le64(RSDP_SIGNATURE);
    -    memcpy(rsdp.oem_id, BUILD_APPNAME6, 6);
    -    rsdp.rsdt_physical_address = cpu_to_le32((u32)rsdt);
    -    rsdp.checksum -= checksum(&rsdp, 20);
    -    copy_acpi_rsdp(&rsdp);
    + //Copy Exsiting Tables
    + if (RsdpAddr && RsdpAddr->signature == RSDP_SIGNATURE)
    + {
    +     struct rsdt_descriptor_rev1 *rsdt = (void*)RsdpAddr->rsdt_physical_address;
    +  if (rsdt && rsdt->signature == RSDT_SIGNATURE)
    +  {
    +   void *end = (void*)rsdt + rsdt->length;
    +      int i;
    +   for (i=0; (void*)&rsdt->table_offset_entry < end; i++)
    +   {
    +    struct fadt_descriptor_rev1 *te = (void*)rsdt->table_offset_entry;
    +    if(te)
    +    {
    +     tables[tbl_idx++] = (u32)(te);
    +     if(te->signature == FACP_SIGNATURE)
    +      fadt = te;
    +    }
    +   }
    +  }
    + }
    +
    + if(fadt)
    + {
    +  //Add SLIC
    +  void *buf = malloc_high(sizeof(SLIC));
    +  if (!buf)
    +   warn_noalloc();
    +  else
    +  {
    +   memcpy(buf, SLIC, sizeof(SLIC));
    +   tables[tbl_idx] = cpu_to_le32((u32)(buf));
    +   if(le32_to_cpu(tables[tbl_idx]))
    +    tbl_idx++;
    +  }
    +
    +  RsdpAddr = NULL;
    +  build_rsdp(fadt, tables, tbl_idx, 1);
    + }
     }
    diff -uNr ../src.orig/fw/paravirt.c ./fw/paravirt.c
    --- ../src.orig/fw/paravirt.c 2014-05-28 22:09:15.000000000 +1000
    +++ ./fw/paravirt.c 2014-09-27 16:07:51.000000000 +1000
    @@ -159,7 +159,10 @@
             RsdpAddr = find_acpi_rsdp();
     
             if (RsdpAddr)
    +  {
    +   acpi_add_slic();
                 return;
    +  }
     
             /* If present, loader should have installed an RSDP.
              * Not installed? We might still be able to continue
    diff -uNr ../src.orig/util.h ./util.h
    --- ../src.orig/util.h 2014-05-28 22:09:15.000000000 +1000
    +++ ./util.h 2014-09-27 16:07:32.000000000 +1000
    @@ -62,6 +62,7 @@
     
     // fw/acpi.c
     void acpi_setup(void);
    +void acpi_add_slic(void);
     
     // fw/biostable.c
     void copy_pir(void *pos);
    
     
  10. silverado

    silverado MDL Novice

    Sep 2, 2009
    3
    2
    0
    Many thanks for all your efforts here. At first I got lost but finally I could build a bios-256k.bin based on Seabios 1.7.5 that seems to work in Proxmox 3.3. Maybe it is helpful for other noobs like me who get lost here when I describe what I did on Debian 7 to build it.

    1) Basically I followed the Steps described in the posting #39 of this thread but I replaced 1.7.2 by 1.7.5 and I did not apply the SLIC patch to the source.

    2) I copied the code from the posting #49 above into a file called "acpi_slic.patch"
    and copied that file to /biostemp/seaslic-master/seabios.submodule/src/

    3) I changed into the directory /biostemp/seaslic-master/seabios.submodule/src/ and ran "patch -p1 <acpi_slic.patch"

    4) I installed some Debian Packages:
    aptitude install make build-essential iasl

    5) I went back to /biostemp/seaslic-master/seabios.submodule and ran "make".

    6) In a new subdirectory "out" I found my bios.bin, renamed it to "bios-256k.bin" and replaced the original file on my Proxmox server in /usr/share/kvm

    7) I fired up a virtual Win7 machine, launched slic_toolkit inside of it and - SURPRISE SURPRISE - it detected a working SLIC. Now I could activate :clap:

    Many thanks to all of you for your great work! :worthy:
     
  11. bgosmiley

    bgosmiley MDL Novice

    Sep 14, 2014
    2
    4
    0
    #51 bgosmiley, Sep 28, 2014
    Last edited by a moderator: Apr 20, 2017
    Updated Patch for Seabios 1.7.5
    • Neatened the Code
    • Clean up the memory of the old table list when rebuilt with SLIC
    • Removed an unnecessary replacement of the DSDT table when the table list was being rebuild
    • Added the option of adding a MSDM table to hold a Windows Serial

    This patch seems to make my VMs boot a little faster than my last patch.

    Use the same process as the last patch. Thank you silverado for expanding the instruction for the less experienced!

    If you want to have a MSDM table added with a Windows Serial:
    • Apply Patch
    • Edit win-serial.str in the src directory, putting your 29 character serial in-between the quotes
    • Then make the project

    Note: The MSDM table will get it's OEM_ID & OEM_TABLE_ID from your SLIC table.

    Code:
    diff -uNr ../src.orig/fw/acpi.c ./fw/acpi.c
    --- ../src.orig/fw/acpi.c 2014-05-28 22:09:15.000000000 +1000
    +++ ./fw/acpi.c 2014-09-28 23:23:06.000000000 +1000
    @@ -23,18 +23,34 @@
     
     #include "src/fw/acpi-dsdt.hex"
     
    +#include "acpi-slic.hex"
    +#include "win-serial.str"
    +
     static void
     build_header(struct acpi_table_header *h, u32 sig, int len, u8 rev)
     {
         h->signature = cpu_to_le32(sig);
         h->length = cpu_to_le32(len);
         h->revision = rev;
    -    memcpy(h->oem_id, BUILD_APPNAME6, 6);
    -    memcpy(h->oem_table_id, BUILD_APPNAME4, 4);
    -    memcpy(h->oem_table_id + 4, (void*)&sig, 4);
    +    if (sig == RSDT_SIGNATURE || sig == MSDM_SIGNATURE)
    +        memcpy(h->oem_id, ((struct acpi_table_header*)SLIC)->oem_id, 14);
    +    else
    +    {
    +        memcpy(h->oem_id, BUILD_APPNAME6, 6);
    +        memcpy(h->oem_table_id, BUILD_APPNAME4, 4);
    +        memcpy(h->oem_table_id + 4, (void*)&sig, 4);
    +    }
         h->oem_revision = cpu_to_le32(1);
    -    memcpy(h->asl_compiler_id, BUILD_APPNAME4, 4);
    -    h->asl_compiler_revision = cpu_to_le32(1);
    +    if(sig == MSDM_SIGNATURE)
    +    {
    +        memcpy(h->asl_compiler_id, "ASL ", 4);
    +        h->asl_compiler_revision = cpu_to_le32(0x00040000);
    +    }
    +    else
    +    {
    +        memcpy(h->asl_compiler_id, BUILD_APPNAME4, 4);
    +        h->asl_compiler_revision = cpu_to_le32(1);
    +    }
         h->checksum -= checksum(h, len);
     }
     
    @@ -590,6 +606,69 @@
         PCI_DEVICE_END,
     };
     
    +static void *
    +build_slic(void)
    +{
    +    void *buf = malloc_high(sizeof(SLIC));
    +    if(buf)
    +    {
    +        memcpy(buf, SLIC, sizeof(SLIC));
    +        return buf;
    +    }
    +    else
    +        warn_noalloc();
    +    return NULL;
    +}
    +
    +static void *
    +build_msdm(void)
    +{
    +    if(win_serial[0])
    +    {
    +        struct acpi_table_msdm *msdm;
    +        size_t msdm_len = sizeof(*msdm);
    +        msdm = malloc_high(msdm_len);
    +        if(msdm)
    +        {
    +            memset(msdm, 0, msdm_len);
    +            msdm->msdm_version = cpu_to_le32(1);
    +            msdm->msdm_data_type = cpu_to_le32(1);
    +            msdm->msdm_data_length = cpu_to_le32(29);
    +            memcpy(msdm->msdm_data, win_serial, 29);
    +            build_header((void*)msdm, MSDM_SIGNATURE, msdm_len, 3);
    +            return msdm;
    +        }
    +        else
    +            warn_noalloc();
    +    }
    +    return NULL;
    +}
    +
    +static void
    +build_rsdp(u32 *tables, u32 tbl_idx)
    +{
    +    // Build final rsdt table
    +    struct rsdt_descriptor_rev1 *rsdt;
    +    size_t rsdt_len = sizeof(*rsdt) + sizeof(u32) * tbl_idx;
    +    rsdt = malloc_high(rsdt_len);
    +    if (!rsdt) {
    +        warn_noalloc();
    +        return;
    +    }
    +    memset(rsdt, 0, rsdt_len);
    +    memcpy(rsdt->table_offset_entry, tables, sizeof(u32) * tbl_idx);
    +    build_header((void*)rsdt, RSDT_SIGNATURE, rsdt_len, 1);
    +
    +    // Build rsdp pointer table
    +    struct rsdp_descriptor rsdp;
    +    memset(&rsdp, 0, sizeof(rsdp));
    +    rsdp.signature = cpu_to_le64(RSDP_SIGNATURE);
    +    memcpy(rsdp.oem_id, BUILD_APPNAME6, 6);
    +    rsdp.rsdt_physical_address = cpu_to_le32((u32)rsdt);
    +    rsdp.checksum -= checksum(&rsdp, 20);
    +    copy_acpi_rsdp(&rsdp);
    +}
    +
     #define MAX_ACPI_TABLES 20
     void
     acpi_setup(void)
    @@ -624,6 +703,9 @@
         if (pci->device == PCI_DEVICE_ID_INTEL_ICH9_LPC)
             ACPI_INIT_TABLE(build_mcfg_q35());
     
    +    ACPI_INIT_TABLE(build_slic());
    +    ACPI_INIT_TABLE(build_msdm());
    +
         struct romfile_s *file = NULL;
         for (;;) {
             file = romfile_findprefix("acpi/", file);
    @@ -664,24 +746,32 @@
             build_header(dsdt, DSDT_SIGNATURE, sizeof(AmlCode), 1);
         }
     
    -    // Build final rsdt table
    -    struct rsdt_descriptor_rev1 *rsdt;
    -    size_t rsdt_len = sizeof(*rsdt) + sizeof(u32) * tbl_idx;
    -    rsdt = malloc_high(rsdt_len);
    -    if (!rsdt) {
    -        warn_noalloc();
    -        return;
    +    build_rsdp(tables, tbl_idx);
    +}
    +
    +void
    +acpi_add_slic(void)
    +{
    +    u32 tables[MAX_ACPI_TABLES], tbl_idx = 0;
    +
    +    //Copy Exsiting Tables
    +    if (RsdpAddr && RsdpAddr->signature == RSDP_SIGNATURE)
    +    {
    +        struct rsdt_descriptor_rev1 *rsdt = (void*)RsdpAddr->rsdt_physical_address;
    +        if (rsdt && rsdt->signature == RSDT_SIGNATURE)
    +        {
    +            void *end = (void*)rsdt + rsdt->length;
    +            int i;
    +            for (i=0; (void*)&rsdt->table_offset_entry < end; i++)
    +                tables[tbl_idx++] = (u32)(rsdt->table_offset_entry);
    +        }
         }
    -    memset(rsdt, 0, rsdt_len);
    -    memcpy(rsdt->table_offset_entry, tables, sizeof(u32) * tbl_idx);
    -    build_header((void*)rsdt, RSDT_SIGNATURE, rsdt_len, 1);
     
    -    // Build rsdp pointer table
    -    struct rsdp_descriptor rsdp;
    -    memset(&rsdp, 0, sizeof(rsdp));
    -    rsdp.signature = cpu_to_le64(RSDP_SIGNATURE);
    -    memcpy(rsdp.oem_id, BUILD_APPNAME6, 6);
    -    rsdp.rsdt_physical_address = cpu_to_le32((u32)rsdt);
    -    rsdp.checksum -= checksum(&rsdp, 20);
    -    copy_acpi_rsdp(&rsdp);
    +    ACPI_INIT_TABLE(build_slic());
    +    ACPI_INIT_TABLE(build_msdm());
    +    
    +    free((void*)RsdpAddr->rsdt_physical_address);
    +    free(RsdpAddr);
    +    RsdpAddr = NULL;
    +    build_rsdp(tables, tbl_idx);
     }
    diff -uNr ../src.orig/fw/paravirt.c ./fw/paravirt.c
    --- ../src.orig/fw/paravirt.c 2014-05-28 22:09:15.000000000 +1000
    +++ ./fw/paravirt.c 2014-09-28 23:25:37.000000000 +1000
    @@ -159,7 +159,10 @@
             RsdpAddr = find_acpi_rsdp();
     
             if (RsdpAddr)
    +        {
    +            acpi_add_slic();
                 return;
    +        }
     
             /* If present, loader should have installed an RSDP.
              * Not installed? We might still be able to continue
    diff -uNr ../src.orig/std/acpi.h ./std/acpi.h
    --- ../src.orig/std/acpi.h 2014-02-07 03:18:17.000000000 +1100
    +++ ./std/acpi.h 2014-09-28 23:24:24.000000000 +1000
    @@ -269,4 +269,15 @@
         struct acpi_mcfg_allocation allocation[0];
     } PACKED;
     
    +#define MSDM_SIGNATURE 0x4d44534d       // MSDM
    +struct acpi_table_msdm {
    +    ACPI_TABLE_HEADER_DEF;
    +    u32 msdm_version;
    +    u32 msdm_reserved;
    +    u32 msdm_data_type;
    +    u32 msdm_data_reserved;
    +    u32 msdm_data_length;
    +    u8  msdm_data[29];
    +} PACKED;
    +
     #endif // acpi.h
    diff -uNr ../src.orig/util.h ./util.h
    --- ../src.orig/util.h 2014-05-28 22:09:15.000000000 +1000
    +++ ./util.h 2014-09-27 16:07:32.000000000 +1000
    @@ -62,6 +62,7 @@
     
     // fw/acpi.c
     void acpi_setup(void);
    +void acpi_add_slic(void);
     
     // fw/biostable.c
     void copy_pir(void *pos);
    diff -uNr ../src.orig/win-serial.str ./win-serial.str
    --- ../src.orig/win-serial.str 1970-01-01 10:00:00.000000000 +1000
    +++ ./win-serial.str 2014-09-28 23:17:57.000000000 +1000
    @@ -0,0 +1 @@
    +static char win_serial[] = "";
    
     
  12. donhw

    donhw MDL Novice

    Jan 21, 2014
    3
    2
    0
    Thanks! That was a lot easier than what I did. LOL I downloaded pve-qemu-kvm from git and applied the patch from my post above. Worked fine too. One advantage is it may be able to use a different slic file per vm. Have not tested that and it may be of no use anyway.
     
  13. TimSmall

    TimSmall MDL Novice

    Oct 10, 2014
    1
    1
    0
    #53 TimSmall, Oct 13, 2014
    Last edited by a moderator: Apr 20, 2017
    patch to use slic from file now in Debian qemu

    BTW, the version of kvm / qemu 2.1 in Debian (and thus will probably get into other derived distros such as Ubuntu) is now carrying a patch which allows you to use the stock Seabios, and just specify -
    Code:
    qemu -acpitable file=/sys/firmware/acpi/tables/SLIC
    or similar.

    I call this using a wrapper script like this:

    Code:
    #!/bin/sh
    exec qemu-system-x86_64 -enable-kvm -acpitable file=/sys/firmware/acpi/tables/SLIC "$@"
    The original patch and related discussion thread on the qemu developer mailing list is here: lists.nongnu.org/archive/html/qemu-devel/2014-04/msg00879.html

    With a bit more development this patch stands a reasonable chance of being accepted into upstream qemu, which would be nice so that there would be no more BIOS or qemu patching required...
     
  14. ehisfunfunfun

    ehisfunfunfun MDL Novice

    Nov 12, 2014
    1
    0
    0
    #54 ehisfunfunfun, Nov 24, 2014
    Last edited by a moderator: Apr 20, 2017
    I tried following the instructions silverado posted but I get the following error:

    Code:
      Compile checking out/src/misc.o
      Compiling whole program out/ccode32flat.o
      Compiling whole program out/ccode16.o
      Building ld scripts
    Version: ?-20141124_145702-acmeinc
    Fixed space: 0xe05b-0x10000  total: 8101  slack: 11  Percent slack: 0.1%
    16bit size:           35660
    32bit segmented size: 2210
    32bit flat size:      22080
    32bit flat init size: 72000
    Lowmem size:          2160
    f-segment var size:   1634
      Linking out/rom16.o
      Stripping out/rom16.strip.o
      Linking out/rom32seg.o
      Stripping out/rom32seg.strip.o
      Linking out/rom.o
    out/code32flat.o: In function `qemu_platform_setup':
    /root/biostemp/seaslic-master/seabios.submodule/src/fw/paravirt.c:163: undefined reference to `acpi_add_slic'
    make: *** [out/rom.o] Error 1
    
    
    Am I missing something here?
     
  15. nexus76

    nexus76 MDL Addicted

    Jan 25, 2009
    788
    300
    30
    Stop hovering to collapse... Click to collapse... Hover to expand... Click to expand...
  16. donhw

    donhw MDL Novice

    Jan 21, 2014
    3
    2
    0
    Good news for proxmox 5. No longer need to patch. Just put slic.bin somewhere and add
    args: -acpitable sig=SLIC,file=path/to/slic.bin to /etc/pve/nodes/yournode/qemu-server/101.conf .

    With this you need to do this for each vm.
     
  17. David77

    David77 MDL Novice

    Mar 16, 2017
    9
    3
    0
    #57 David77, Aug 6, 2017
    Last edited: Aug 6, 2017
    Does anyone have an updated procedure for Seabios 1.10.2 for Proxmox 5?
    The Procedure for 1.7.5 appears to fail. I was unable to run the .sh so I hand coded the modules.
    Compiles fine but fails to start in vm " Guest has not initialized the display yet"

    Update
    Using Zorin 12 - I am able to run the patch successfully, however same result.
    Will not startup in the vm.

    I can simply add the SLIC table, Dell oem string, compile and will activate. That's not the goal.
    I would like to see ( learn) how to properly add all the table so the tools report correctly.

    This really started out as a way into linux. I first did the VMware thing. Using the knowledge gathered her on MDL I was able to load a Dell SLIC into 6006.rom with the tools and eventually build an ESXI installation disk with dell 6006.rom. Ok Works.. Blew it away and now learning about Proxmox and Seabios. Much more fun... However I am stuck... not sure whats wrong.

    And Yes "args: -acpitable sig=SLIC,file=path/to/slic.bin to /etc/pve/nodes/yournode/qemu-server/101.conf ." works for 2008+ but fails to activate xp/2003 without the oem string.
     
  18. David77

    David77 MDL Novice

    Mar 16, 2017
    9
    3
    0
    Here is a little helper script that will update all Windows vm config files if needed.

    Assume you have created a dir /SLIC and placed the SLIC.BIN & Update.sh in there.
    And assume the node name is pve

    Create file named Update.sh with:

    for file in /etc/pve/nodes/pve/qemu-server/*
    do
    if grep -q "ostype: w" "${file}"
    then
    if grep -q "args: -acpitable" "${file}"
    then
    echo "ACPI Found in ${file}"
    else
    echo "ACPI NOT Found in ${file} - Updating"
    echo "args: -acpitable sig=SLIC,file=/SLIC/SLIC.BIN" >> "${file}"
    fi
    fi
    done


    To run from putty as root - sh /SLIC/Update.sh
    To run from Windows Get plink along with putty - plink root@.ip address sh /SLIC/Update.sh
    - enter the root pw when asked.
     
  19. fbifido1

    fbifido1 MDL Novice

    Mar 6, 2018
    21
    2
    0
    Anyone got this working on Proxmox VE v6.0?
     
  20. Zento

    Zento MDL Novice

    Jun 16, 2009
    1
    2
    0
    Working in v6.0-4 using @donhw info.