Ubuntu 12.10 on AMD64 hardware reports missing microcode

On upgrading to Ubuntu 12.10 and rebooting the system (which has a AMD Phenom II processor) the system reported “failed to load file amd-ucode/microcode_amd.bin”.

This indicates that the the microcode kernel module has been unable to find the amd-ucode directory in “/lib/firmware”

Fortunately this is easily fixed:

  • create the directory “/lib/firmware/amd-ucode” if it does not already exist using the command 

mkdir /lib/firmware/amd-ucode

  • Browse to http://www.amd64.org/support/microcode.html.  Here you will find information on AMD’s Linux support.
  • Download the file “amd-ucode-latest.tar” you should see a link to this at the bottom of the page.  (It’s good practice when downloading critical software like this to verify the PGP signature of the file, the above page provide conveniently provides instructions so I won’t repeat them here)
  • Extract the file using the Archive manager open a command prompt navigate to the directory where you downloaded the file and type 

tar xf amd-ucode-latest.tar

  • This creates a directory (at the time of writing it is called “amd-ucode-2012-09-10” but you may have a later version)
  • From this directory you need to copy or move the files “microcode_amd.bin” and “microcode_amd_fam15h.bin” the first supports several older generations of AMD hardware and the second supports the 15h family.  There are several readme files and some which provide support for Solaris X86.
  • Copy the microcode_amd.bin files and microcode_amd_fam15h.bin files using the following command (the microcode module will use only the section of these files which are needed for your hardware)

cp microcode_amd.bin   /lib/firmware/amd-ucode

cp microcode_amd_fam15h.bin    /lib/firmware/amd-ucode

  • To activate these modules you can reboot or use the modprobe command to remove and reinstall the microcode kernel module as follows
  • modprobe -r microcode modprobe microcode
  • Next time you boot the “failed to load” message should no longer be displayed and the processor microcode should be updated correctly.
  • To check that it is updated type the following at a command prompt

dmesg | grep microcode

This will display output similar to the following:

[ 14.174582] microcode: CPU0: patch_level=0x010000c8
[ 14.222343] microcode: CPU1: patch_level=0x010000c8
[ 14.223834] microcode: CPU2: patch_level=0x010000c8
[ 14.225326] microcode: CPU3: patch_level=0x010000c8
[ 14.226881] microcode: Microcode Update Driver: v2.00 <tigran@aivazian.fsnet.co.uk>, Peter Oruba