<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    hi Marcos,<br>
    <br>
    I'm not a Google dev, just a hobbyist, but I've spent a lot of time
    over the past year working with coreboot for the Haswell ChromeOS
    devices (mostly the ChromeBoxes) and can offer some answers, inline
    below.<br>
    <br>
    <div class="moz-cite-prefix">On 5/8/2015 2:38 PM, Marcos Scriven
      wrote:<br>
    </div>
    <blockquote
cite="mid:CA+zKUVLnyJmthe4XnaSiSory6MTHRE15jZk0nJd3WUtHrDnrYA@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>
          <div>I have a Dell Chromebook 11 (Google codename 'Wolf')
            which I'd like to install a custom coreboot ROM on. Although
            John Lewis provides ROMs here <a moz-do-not-send="true"
              href="https://johnlewis.ie/custom-chromebook-firmware/rom-download/">https://johnlewis.ie/custom-chromebook-firmware/rom-download/</a>,
            I'd rather not use them for a few reasons:</div>
          <div><br>
          </div>
          <div>1) It's replacing one 'closed' ROM with another, in the
            sense it's from a 3rd party with no public repo or build
            scripts. Although it's possible to extract the coreboot
            config used to build them, it's not possible to reproduce
            and modify the payloads.</div>
          <div>2) I don't need his closed 'Jeltka' payload.</div>
          <div>3) I'd like to experiment with other payloads, custom
            splash screens etc.</div>
          <div>4) I wouldn't learn anything, and I'm interested!</div>
          <div><br>
          </div>
          <div>With that in mind, this guide here looked ideal (although
            there's no date on it): <a moz-do-not-send="true"
href="https://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/upstream-coreboot-on-intel-haswell-chromebook">https://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices/upstream-coreboot-on-intel-haswell-chromebook</a></div>
        </div>
      </div>
    </blockquote>
    <br>
    that's what I started with, and a good overview for what you need to
    build your own firmware.  I'd suggest however that you first build
    coreboot using the same tree/branch as the shipped firmware (which
    you linked below) before trying to get upstream coreboot working,
    particularly since Wolf hasn't been upstreamed yet.  <br>
    <br>
    Payload wise, SeaBIOS is fine to build from upstream;  I build off
    the 1.8.1 tag currently.  You're welcome to use my configs and build
    scripts for reference: <a class="moz-txt-link-freetext" href="https://github.com/MattDevo/coreboot">https://github.com/MattDevo/coreboot</a> and
    <a class="moz-txt-link-freetext" href="https://github.com/MattDevo/SeaBIOS">https://github.com/MattDevo/SeaBIOS</a><br>
    <br>
    <blockquote
cite="mid:CA+zKUVLnyJmthe4XnaSiSory6MTHRE15jZk0nJd3WUtHrDnrYA@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>
          <div><br>
          </div>
          <div>However, that prompted some questions, which I'm hoping
            someone here might be able to help with. (I did ask in the
            #chromimum-os IRC channel, but they suggested Google
            coreboot developers would be more likely to help here).</div>
        </div>
      </div>
    </blockquote>
    <br>
    also try #coreboot.  I loiter in there and am happy to help if I'm
    around (I'm MattDevo on IRC).<br>
    <br>
    <blockquote
cite="mid:CA+zKUVLnyJmthe4XnaSiSory6MTHRE15jZk0nJd3WUtHrDnrYA@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>
          <div><br>
          </div>
          <div>1) What blobs do I use?</div>
          <div><br>
          </div>
          <div>Although the guide sensibly says to backup the existing
            bios with 'flashrom -r', it also says to extract a bios.bin
            from /usr/sbin/chromeos-firwmwareupdate (I've posted details
            of both at the end). From the latter, it goes on to get you
            to extract four blobs:</div>
          <div><br>
          </div>
          <div>- SPI Descriptor</div>
          <div>- Management Engine</div>
          <div>- MRC</div>
          <div>- VBIOS</div>
        </div>
      </div>
    </blockquote>
    <br>
    that list is correct.<br>
    <br>
    <blockquote
cite="mid:CA+zKUVLnyJmthe4XnaSiSory6MTHRE15jZk0nJd3WUtHrDnrYA@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>
          <div><br>
          </div>
          <div>The first discrepancy is that the guide says the
            'Management Engine firmware' is only in the latter, but I
            was able to use ifdtool on both images to extract the same
            set of three files. The flashregion_0_flashdescriptor.bin
            files were identical, though the other two were different
            despite being the same size.</div>
        </div>
      </div>
    </blockquote>
    <br>
    The ME firmware isn't always reliably read from a running system, so
    using the blob extracted from the shell-ball firmware image is
    preferred.<br>
    <br>
    <blockquote
cite="mid:CA+zKUVLnyJmthe4XnaSiSory6MTHRE15jZk0nJd3WUtHrDnrYA@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>
          <div><br>
          </div>
          <div>The other thing is there's no reason given as to why one
            would use the MRC and VBIOS blobs from the extract, rather
            than the backup. Curiously, they are slightly different
            sizes (again details below). Looking at the config it seems
            the extracted bios image was built with from a Google
            coreboot fork four months older than the one backed up from
            the machine.</div>
        </div>
      </div>
    </blockquote>
    <br>
    these should be identical between the backup image and shell-ball
    extract.  <br>
    <br>
    <blockquote
cite="mid:CA+zKUVLnyJmthe4XnaSiSory6MTHRE15jZk0nJd3WUtHrDnrYA@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div>2) Which mainboard do I use for the Dell Chromebook 11?</div>
        </div>
      </div>
    </blockquote>
    <br>
    Wolf<br>
    <br>
    <blockquote
cite="mid:CA+zKUVLnyJmthe4XnaSiSory6MTHRE15jZk0nJd3WUtHrDnrYA@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>
          <div><br>
          </div>
          <div>Assuming I have the correct four proprietary blobs, the
            next thing is choosing the right mainboard. The guide I link
            to mentions suggests 'Falco', but I don't see how, without
            knowing the target, such a suggestion could be meaningful?</div>
        </div>
      </div>
    </blockquote>
    <br>
    Falco is used as an example because it was already upstreamed. 
    Since Wolf isn't, you would need to do so yourself, which is why I
    suggested starting with the stock firmware tree/branch.  I
    upstreamed Panther, which was somewhat easier since it doesn't have
    a built-in display or EC to worry about, but you can use Falco as a
    guide, comparing the upstream Falco branch to the shipped firmware
    tree/branch, and make similar adjustments for Wolf.<br>
    <br>
    <blockquote
cite="mid:CA+zKUVLnyJmthe4XnaSiSory6MTHRE15jZk0nJd3WUtHrDnrYA@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>
          <div><br>
          </div>
          <div>Looking here <a moz-do-not-send="true"
href="https://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices">https://www.chromium.org/chromium-os/developer-information-for-chrome-os-devices</a>
            Falco appears to be unique to the HP Chromebook 14. The
            mainboard codename for my Chromebook is 'Wolf', and that's
            not in coreboot upstream.</div>
          <div><br>
          </div>
          <div>Comparing 'src/mainboard/google' in Google's fork, and
            coreboot upstream:</div>
          <div><br>
          </div>
          <div><a moz-do-not-send="true"
href="http://review.coreboot.org/gitweb?p=coreboot.git;a=tree;f=src/mainboard/google;h=60045af24d9760f7a52555a5ef6ef3fdc77676b7;hb=HEAD">http://review.coreboot.org/gitweb?p=coreboot.git;a=tree;f=src/mainboard/google;h=60045af24d9760f7a52555a5ef6ef3fdc77676b7;hb=HEAD</a></div>
          <div><a moz-do-not-send="true"
href="https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-wolf-4389.24.B/src/mainboard/google/">https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-wolf-4389.24.B/src/mainboard/google/</a></div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div>It seems there is at least some attempt to merge
            upstream, and yet wolf isn't there. Is there a particular
            reason some mainboards are missing? Did Google stop doing so
            for some reason?</div>
        </div>
      </div>
    </blockquote>
    <br>
    To my knowledge, upstreaming boards during the Haswell days wasn't a
    priority, and was often done by non-Google devs (like me) who
    happened to have a particular device.  Within the last ~6 mos this
    has changed significantly, and there's been a large push to keep the
    two in sync. <br>
    <br>
    <blockquote
cite="mid:CA+zKUVLnyJmthe4XnaSiSory6MTHRE15jZk0nJd3WUtHrDnrYA@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>
          <div><br>
          </div>
          <div>I also note the Google keep the coreboot config source
            controlled: <a moz-do-not-send="true"
href="https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-wolf-4389.24.B/configs/config.wolf">https://chromium.googlesource.com/chromiumos/third_party/coreboot/+/firmware-wolf-4389.24.B/configs/config.wolf</a></div>
        </div>
      </div>
    </blockquote>
    <br>
    as per above, use that config to build from that branch.<br>
    <br>
    <blockquote
cite="mid:CA+zKUVLnyJmthe4XnaSiSory6MTHRE15jZk0nJd3WUtHrDnrYA@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div>Thanks</div>
          <div><br>
          </div>
          <div>Marcos</div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div>--- Some further ROM details ---</div>
          <div><br>
          </div>
          <div>bios extracted with 'flashrom -r' from my Dell Chromebook
            11:</div>
          <div><br>
          </div>
          <div>chromebook11.rom: 8192 kB, bootblocksize 3144, romsize
            8388608, offset 0x700000</div>
          <div>alignment: 64 bytes, architecture: x86</div>
          <div><br>
          </div>
          <div>Name                           Offset     Type        
            Size</div>
          <div>cmos_layout.bin                0x700000   cmos_layout
             1164</div>
          <div>pci8086,0406.rom               0x7004c0   optionrom  
             65536</div>
          <div>cpu_microcode_blob.bin         0x710500   microcode  
             41024</div>
          <div>config                         0x71a5c0   raw        
             5536</div>
          <div>fallback/vboot                 0x71bbc0   stage      
             15083</div>
          <div>(empty)                        0x71f700   null        
            2136</div>
          <div>fallback/romstage              0x71ff80   stage      
             42497</div>
          <div>fallback/coreboot_ram          0x72a600   stage      
             91450</div>
          <div>fallback/payload               0x740b80   payload    
             54898</div>
          <div>u-boot.dtb                     0x74e240   mrc_cache  
             7919</div>
          <div>(empty)                        0x750180   null        
            327192</div>
          <div>mrc.bin                        0x79ffc0   spd        
             190180</div>
          <div>(empty)                        0x7ce700   null        
            120984</div>
          <div>spd.bin                        0x7ebfc0   spd        
             1536</div>
          <div>(empty)                        0x7ec600   null        
            77144</div>
          <div><br>
          </div>
          <div>Extracting config shows "# This image was built using git
            revision 52034fc1537d4a38e792e700cbc8e9dd1fc36a9c", which is
            a commit hash from Google's fork:</div>
        </div>
      </div>
    </blockquote>
    <br>
    I'd start with this one, or whatever the latest commit is for that
    branch.<br>
    <br>
    <blockquote
cite="mid:CA+zKUVLnyJmthe4XnaSiSory6MTHRE15jZk0nJd3WUtHrDnrYA@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div>
          <div><br>
          </div>
          <div>commit cef55018e4e936af9a758675353e332df4d9d1a6</div>
          <div>Author: David Wu <<a moz-do-not-send="true"
              href="mailto:David_Wu@quantatw.com">David_Wu@quantatw.com</a>></div>
          <div>Date:   Tue Apr 29 12:59:04 2014 -0700</div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div>bios extracted from the chromeos-firwmwareupdate utility
            (which on my machine is a 7.7M binary built on 27th Apr this
            year):</div>
          <div><br>
          </div>
          <div>bios.bin: 8192 kB, bootblocksize 3144, romsize 8388608,
            offset 0x700000</div>
          <div>alignment: 64 bytes, architecture: x86</div>
          <div><br>
          </div>
          <div>Name                           Offset     Type        
            Size</div>
          <div>cmos_layout.bin                0x700000   cmos_layout
             1164</div>
          <div>pci8086,0406.rom               0x7004c0   optionrom  
             65536</div>
          <div>cpu_microcode_blob.bin         0x710500   microcode  
             43072</div>
          <div>config                         0x71adc0   raw        
             5536</div>
          <div>fallback/vboot                 0x71c3c0   stage      
             15083</div>
          <div>(empty)                        0x71ff00   null         88</div>
          <div>fallback/romstage              0x71ff80   stage      
             42497</div>
          <div>fallback/coreboot_ram          0x72a600   stage      
             91491</div>
          <div>fallback/payload               0x740bc0   payload    
             54898</div>
          <div>u-boot.dtb                     0x74e280   mrc_cache  
             7919</div>
          <div>(empty)                        0x7501c0   null        
            327128</div>
          <div>mrc.bin                        0x79ffc0   spd        
             191020</div>
          <div>(empty)                        0x7cea40   null        
            120152</div>
          <div>spd.bin                        0x7ebfc0   spd        
             1536</div>
          <div>(empty)                        0x7ec600   null        
            77144</div>
          <div><br>
          </div>
          <div>Extracting config shows "# This image was built using git
            revision 52034fc1537d4a38e792e700cbc8e9dd1fc36a9c", which is
            also a commit hash from Google's fork, but older:</div>
          <div><br>
          </div>
          <div>commit 52034fc1537d4a38e792e700cbc8e9dd1fc36a9c</div>
          <div>Author: Marc Jones <<a moz-do-not-send="true"
              href="mailto:marc.jones@se-eng.com">marc.jones@se-eng.com</a>></div>
          <div>Date:   Thu Dec 12 13:13:30 2013 -0700</div>
          <div><br>
          </div>
          <div><br>
          </div>
          <div>Differences in SPI/ME from backed up ROM and the one
            extracted from firmwareupdate tool:</div>
          <div><br>
          </div>
          <div>marcosscriven@ubuntuvm:~/coreboot/util/ifdtool$ ls -altr
            frombackup/</div>
          <div>total 8200</div>
          <div>-rw-r--r-- 1 marcosscriven marcosscriven 6291456 May  8
            19:20 flashregion_1_bios.bin</div>
          <div>-rw-r--r-- 1 marcosscriven marcosscriven    4096 May  8
            19:20 flashregion_0_flashdescriptor.bin</div>
          <div>-rw-r--r-- 1 marcosscriven marcosscriven 2093056 May  8
            19:20 flashregion_2_intel_me.bin</div>
          <div>drwxrwxr-x 2 marcosscriven marcosscriven    4096 May  8
            19:20 .</div>
          <div>drwxrwxr-x 4 marcosscriven marcosscriven    4096 May  8
            19:21 ..</div>
          <div><br>
          </div>
          <div>marcosscriven@ubuntuvm:~/coreboot/util/ifdtool$ ls -altr
            fromextract/</div>
          <div>total 8200</div>
          <div>-rw-r--r-- 1 marcosscriven marcosscriven 6291456 May  8
            19:20 flashregion_1_bios.bin</div>
          <div>-rw-r--r-- 1 marcosscriven marcosscriven    4096 May  8
            19:20 flashregion_0_flashdescriptor.bin</div>
          <div>-rw-r--r-- 1 marcosscriven marcosscriven 2093056 May  8
            19:20 flashregion_2_intel_me.bin</div>
          <div>drwxrwxr-x 4 marcosscriven marcosscriven    4096 May  8
            19:21 ..</div>
          <div>drwxrwxr-x 2 marcosscriven marcosscriven    4096 May  8
            19:21 .</div>
          <div><br>
          </div>
          <div>marcosscriven@ubuntuvm:~/coreboot/util/ifdtool$ diff
            frombackup/ fromextract/</div>
          <div>Binary files frombackup/flashregion_1_bios.bin and
            fromextract/flashregion_1_bios.bin differ</div>
          <div>Binary files frombackup/flashregion_2_intel_me.bin and
            fromextract/flashregion_2_intel_me.bin differ</div>
        </div>
      </div>
    </blockquote>
    <br>
    the bios.bin isn't applicable (just the firmware descriptor and ME);
    as I noted above, the ME extracted from a running system will differ
    slightly.<br>
    <br>
    Good luck!<br>
    <br>
    cheers,<br>
    Matt<br>
    <br>
    <blockquote
cite="mid:CA+zKUVLnyJmthe4XnaSiSory6MTHRE15jZk0nJd3WUtHrDnrYA@mail.gmail.com"
      type="cite">
      <div dir="ltr">
        <div><br>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
    </blockquote>
    <br>
  </body>
</html>