# Microcode update attempt, unbootable (Meltdown-related)

## gordonp

Hi -

I have an older ASUS P6T motherboard, with a Xeon hex-core CPU (presenting as 12 Linux "processing units").  This runs kvm/QEMU to host a half-dozen virtual-machines.  Generally it works well.  From /proc/cpuinfo:

```
model name   : Intel(R) Xeon(R) CPU           X5680  @ 3.33GHz
```

With the arrival of Meltdown/Spectre, I followed the Gentoo wiki page for Intel microcode updating, for two other, more-recent workstations:

```
https://wiki.gentoo.org/wiki/Intel_microcode
```

With the success of these two more-recent workstations, I decided to try microcode updating for my server.  What I got was an non-booting system  :Sad: 

I followed the wiki *to the letter*.  I use genkernel + initramfs, but I also performed the indicated modifications to /etc/grub.d/10_linux.  This same approach worked on the two more-recent workstations...

Part-way through boot-up, my system halted entirely, with a message along the lines:

```
Unable to find /boot/early_ucode.cpio
```

Hmmm... something went wrong  :Sad: 

I tried a couple more times - using a Gentoo RescueCD and chroot.  Believe me, I strictly followed that wiki to the letter, and it continually failed.

A day later,  after ripping out the microcode-updating stuff and rescuing my system, I Googled more widely, and now see that there is no microcode for my CPU:

```
hydra ~ # iucode_tool -S -l /lib/firmware/intel-ucode/*

iucode_tool: system has processor(s) with signature 0x000206c2

microcode bundle 1: /lib/firmware/intel-ucode/06-03-02

microcode bundle 2: /lib/firmware/intel-ucode/06-05-00

microcode bundle 3: /lib/firmware/intel-ucode/06-05-01

microcode bundle 4: /lib/firmware/intel-ucode/06-05-02

microcode bundle 5: /lib/firmware/intel-ucode/06-05-03

microcode bundle 6: /lib/firmware/intel-ucode/06-06-00

microcode bundle 7: /lib/firmware/intel-ucode/06-06-05

microcode bundle 8: /lib/firmware/intel-ucode/06-06-0a

microcode bundle 9: /lib/firmware/intel-ucode/06-06-0d

microcode bundle 10: /lib/firmware/intel-ucode/06-07-01

microcode bundle 11: /lib/firmware/intel-ucode/06-07-02

microcode bundle 12: /lib/firmware/intel-ucode/06-07-03

microcode bundle 13: /lib/firmware/intel-ucode/06-08-01

microcode bundle 14: /lib/firmware/intel-ucode/06-08-03

microcode bundle 15: /lib/firmware/intel-ucode/06-08-06

microcode bundle 16: /lib/firmware/intel-ucode/06-08-0a

microcode bundle 17: /lib/firmware/intel-ucode/06-09-05

microcode bundle 18: /lib/firmware/intel-ucode/06-0a-00

microcode bundle 19: /lib/firmware/intel-ucode/06-0a-01

microcode bundle 20: /lib/firmware/intel-ucode/06-0b-01

microcode bundle 21: /lib/firmware/intel-ucode/06-0b-04

microcode bundle 22: /lib/firmware/intel-ucode/06-0d-06

microcode bundle 23: /lib/firmware/intel-ucode/06-0e-08

microcode bundle 24: /lib/firmware/intel-ucode/06-0e-0c

microcode bundle 25: /lib/firmware/intel-ucode/06-0f-02

microcode bundle 26: /lib/firmware/intel-ucode/06-0f-06

microcode bundle 27: /lib/firmware/intel-ucode/06-0f-07

microcode bundle 28: /lib/firmware/intel-ucode/06-0f-0a

microcode bundle 29: /lib/firmware/intel-ucode/06-0f-0b

microcode bundle 30: /lib/firmware/intel-ucode/06-0f-0d

microcode bundle 31: /lib/firmware/intel-ucode/06-16-01

microcode bundle 32: /lib/firmware/intel-ucode/06-17-06

microcode bundle 33: /lib/firmware/intel-ucode/06-17-07

microcode bundle 34: /lib/firmware/intel-ucode/06-17-0a

microcode bundle 35: /lib/firmware/intel-ucode/06-1a-04

microcode bundle 36: /lib/firmware/intel-ucode/06-1a-05

microcode bundle 37: /lib/firmware/intel-ucode/06-1c-02

microcode bundle 38: /lib/firmware/intel-ucode/06-1c-0a

microcode bundle 39: /lib/firmware/intel-ucode/06-1d-01

microcode bundle 40: /lib/firmware/intel-ucode/06-1e-05

microcode bundle 41: /lib/firmware/intel-ucode/06-25-02

microcode bundle 42: /lib/firmware/intel-ucode/06-25-05

microcode bundle 43: /lib/firmware/intel-ucode/06-26-01

microcode bundle 44: /lib/firmware/intel-ucode/06-2a-07

microcode bundle 45: /lib/firmware/intel-ucode/06-2d-06

microcode bundle 46: /lib/firmware/intel-ucode/06-2d-07

microcode bundle 47: /lib/firmware/intel-ucode/06-2f-02

microcode bundle 48: /lib/firmware/intel-ucode/06-3a-09

microcode bundle 49: /lib/firmware/intel-ucode/06-3c-03

microcode bundle 50: /lib/firmware/intel-ucode/06-3d-04

microcode bundle 51: /lib/firmware/intel-ucode/06-3e-04

microcode bundle 52: /lib/firmware/intel-ucode/06-3e-06

microcode bundle 53: /lib/firmware/intel-ucode/06-3e-07

microcode bundle 54: /lib/firmware/intel-ucode/06-3f-02

microcode bundle 55: /lib/firmware/intel-ucode/06-3f-04

microcode bundle 56: /lib/firmware/intel-ucode/06-45-01

microcode bundle 57: /lib/firmware/intel-ucode/06-46-01

microcode bundle 58: /lib/firmware/intel-ucode/06-47-01

microcode bundle 59: /lib/firmware/intel-ucode/06-4e-03

microcode bundle 60: /lib/firmware/intel-ucode/06-4f-01

microcode bundle 61: /lib/firmware/intel-ucode/06-55-04

microcode bundle 62: /lib/firmware/intel-ucode/06-56-02

microcode bundle 63: /lib/firmware/intel-ucode/06-56-03

microcode bundle 64: /lib/firmware/intel-ucode/06-56-04

microcode bundle 65: /lib/firmware/intel-ucode/06-5c-09

microcode bundle 66: /lib/firmware/intel-ucode/06-5e-03

microcode bundle 67: /lib/firmware/intel-ucode/06-7a-01

microcode bundle 68: /lib/firmware/intel-ucode/06-8e-09

microcode bundle 69: /lib/firmware/intel-ucode/06-8e-0a

microcode bundle 70: /lib/firmware/intel-ucode/06-9e-09

microcode bundle 71: /lib/firmware/intel-ucode/06-9e-0a

microcode bundle 72: /lib/firmware/intel-ucode/06-9e-0b

microcode bundle 73: /lib/firmware/intel-ucode/0f-00-07

microcode bundle 74: /lib/firmware/intel-ucode/0f-00-0a

microcode bundle 75: /lib/firmware/intel-ucode/0f-01-02

microcode bundle 76: /lib/firmware/intel-ucode/0f-02-04

microcode bundle 77: /lib/firmware/intel-ucode/0f-02-05

microcode bundle 78: /lib/firmware/intel-ucode/0f-02-06

microcode bundle 79: /lib/firmware/intel-ucode/0f-02-07

microcode bundle 80: /lib/firmware/intel-ucode/0f-02-09

microcode bundle 81: /lib/firmware/intel-ucode/0f-03-02

microcode bundle 82: /lib/firmware/intel-ucode/0f-03-03

microcode bundle 83: /lib/firmware/intel-ucode/0f-03-04

microcode bundle 84: /lib/firmware/intel-ucode/0f-04-01

microcode bundle 85: /lib/firmware/intel-ucode/0f-04-03

microcode bundle 86: /lib/firmware/intel-ucode/0f-04-04

microcode bundle 87: /lib/firmware/intel-ucode/0f-04-07

microcode bundle 88: /lib/firmware/intel-ucode/0f-04-08

microcode bundle 89: /lib/firmware/intel-ucode/0f-04-09

microcode bundle 90: /lib/firmware/intel-ucode/0f-04-0a

microcode bundle 91: /lib/firmware/intel-ucode/0f-06-02

microcode bundle 92: /lib/firmware/intel-ucode/0f-06-04

microcode bundle 93: /lib/firmware/intel-ucode/0f-06-05

microcode bundle 94: /lib/firmware/intel-ucode/0f-06-08

selected microcodes:

hydra ~ # 

```

Do I get this boot-failure because no applicable microcode was located?  The failure-message appears accurate (early_ucode.cpio does not exist).  However, I do have this file in /boot:

```
-rw-r--r--  1 root root 1614848 Jan 21 16:45 intel-uc.img
```

This passes the "sniff" test, being present, appropriately-named and a little bit larger than my usual initramfs file.  Everything seems like it should at least boot, even if no processor-specific microcode exists for my CPU...

Can the Gentoo wiki please be updated to handle this situation?  I can only imagine the heart-ache that someone less-experienced in rescuing systems would have :-O  :Sad: 

----------

## The_Great_Sephiroth

This is why I build my microcode, drivers, and driver firmware directly into the kernel. I have not used an initramfs in years, with the exception being on systems using whole-disk BTRFS RAID. If you were to specify an firmware file which did not exist, the kernel would not even build due to the missing file, and you could solve this ahead of time.

----------

## gordonp

 *The_Great_Sephiroth wrote:*   

> This is why I build my microcode <...> directly into the kernel

 

Your approach and suggestion is a good one...

Which makes me add:  Can the Gentoo Intel Microcode Wiki be updated to include this built-into-kernel option?  It would also prove helpful if the Wiki suggests verification-steps to check that things are sane (and that the system will likely boot!).

Thank-you,

----------

## Jaglover

Last time I checked there was a section in Gentoo Wiki about building microcode into kernel. Is it gone now?    :Shocked: 

----------

## gordonp

 *Jaglover wrote:*   

> <...>there was a section in Gentoo Wiki about building microcode into kerne

 

OK - yes, this section is present (at this time, the "build into kernel" is the last portion of the wiki-page).  It is very similar to what I currently do for ATI/AMD graphics.

But I wonder if it will work or hang at boot, when my specific CPU appears to have no available microcode?  (and this question made me Google more, and I see there are a number of microcode updates issues several years ago for my Xeon X5680... but the current Gentoo 20180108 doesn't match anything...????).

Thanks, @Jaglover, for pointing out that in-kernel options are included!

----------

## xming

see https://forums.gentoo.org/viewtopic-t-1058246-start-0.html

----------

## Naib

Has your motherboard manufacturer provided an updated bios? 

It might be worth applying that as it should come with the latest microcode *if* your CPU is still supported AND if your motherboard is still supported.

Failing that the baking into the kernel is my personal preference method as I don't like initramfs.

As to why your steps failed... The lack of a file shouldn't stop a machine booting UNLESS your initramfs contains more than just microcode. I use to use Plymouth (before 3seconds boot showed it was useless  :Smile:  ) but when I was testing it wasn't for finding the file stated in grub.cfg BUT my system still booted as it wasn't really needed to hand over to init.

So either

1) your initramfs does more than ucode and is needed to boot 

2) the ucode that was applied was accepted by the CPU but is invalid - shouldn't happen as it checks

----------

