Install Intel Atom

How to Install Linux (FC9) on an Intel Atom based Processor/Motherboard

Date: 6 October 2008

The Goal

The goal is to purchase and build an Intel Atom based box and plug it in to a network running

and have Cobbler build the box.

The Challenges

This project involves a number of challenges:-

  • as a result of specific hardware embedded in to the Intel Atom Motherboard [Intel D945GCLF], you will need to compile your own driver. The on board lan is a Realtek RTL8101E (10ec:8136). You can check your hardware with lspci -v and lspci -n The fact that the network card was not supported was a particular pain as obviously this was needed in order to boot the computer. Actually, pxe was able to download the initrd image but the stock initrd image did not include my r8101 driver I built or the ata_piix driver required for my sata drive.

Dead Ends

Along the way I encountered a number of dead ends, either because the path became too complex for me to follow or because the information I found appeared conflicted. Therefore, I abandoned these paths even though they may work for you. I've taken a few moments to list them here:

mkinitrd

Using mkinitrd is a dead end because it doesn't include the anaconda stage 1 stuff that you need to boot. Thanks to

for pointing me in the right direction.

The Solution

Compile the Realtek r8101 Driver

The driver needs to be compiled on the same architecture as the initrd. I started with a pre-built initrd provided as part of cobbler which was based on 2.6.26.5-45.fc9.i586. Therefore, I needed a system with that kernel in order to compile the driver which presented the first problem. I understand there is a way to compile for target architectures but I didn't know how to do it, so I attached a cdrom to one of the Atom boxes, disabled the on board lan via the bios and installed FC9 using optical media. Once this was complete I was able to compile the driver: The driver source can be downloaded from

 tar -xjvf r8101-1.009.00.tar.bz2
 cd r8101-1.009.00
 make clean modules
 sudu make install
 depmod -a
 insmod ./src/r8101.ko

I have a copy of the module I created here. It is in a gzip as this is the format you will need it in if you want to insert it on to an initrd image.

Modify the initrd

As mentioned above, I started with an initrd from my cobbler server which was compiled for 2.6.26.5-45.fc9.i586. I located the initrd.img I wanted to use and then inspected it as follows: Make a directory to modify the initrd in

 mkdir ~/initrd

Copy the initrd from my cobbler location

 cp /tftpboot/pxelinux.cfg/initrd.img ~

The file is actually a compressed gzip file so we rename it

 mv ~/initrd.img initrd.img.gz

De-compress the file

 gunzip initrd.img.gz
 cd initrd
 cpio -i -d -H newc -F ../initrd.img --no-absolute-filenames

NOTE: many sites tell you that the initrd file is in an iso9660 format and you can mount it on the loop filesystem. However, FC9 uses an initramfs which is a cpio file so you can save yourself some time by not going down that dead-end. You need to copy the driver from above to the modules/2.6.25-14.fc9.i586/kernel/drivers/net/ directory

 cp ~/r8101-1.009.00/src/r8101.ko.gz initrd/modules/2.6.25-14.fc9.i586/kernel/drivers/net/

NOTE: make sure you have gziped your driver You will need to edit a few files to add the new driver details. In each file, I searched for the definition of the driver for the Realtek r8169 and then edited the line before that one. File: modules/modules-info

 r8101
 eth
 "RealTek? RTL-8101 Gigabit Ethernet driver"

File: modules/2.6.25-14.fc9.i586/modules.networking

 r8101.ko

File: modules/2.6.25-14.fc9.i586/modules.order

 kernel/drivers/net/r8101.ko

File: modules/2.6.25-14.fc9.i586/modules.dep

 /lib/modules/2.6.25-14.fc9.i586/kernel/drivers/net/r8101.ko.gz:

File: modules/2.6.25-14.fc9.i586/modules.alias Modified:

 alias pci:v000010ECd00008169sv*sd*bc*sc*i* r8101
 alias pci:v000010ECd00008168sv*sd*bc*sc*i* r8101
 alias pci:v000010ECd00008167sv*sd*bc*sc*i* r8101
 alias pci:v000010ECd00008136sv*sd*bc*sc*i* r8101
 alias pci:v000010ECd00008129sv*sd*bc*sc*i* r8101

Added:

 alias pci:v000010EC000008136sv*sd*bc*sc*i* r8101

Compress the file again

 find . |cpio -H newc -o > ../initrd-2.6.25-14.fc9.i586.img
 scp initrd-2.6.25-14.fc9.i586.akuna.img.gz root@192.168.1.2:/tftpboot/images/FC-9-i386/
 chmod 666 /tftpboot/images/FC-9-i386/initrd-2.6.25-14.fc9.i586.akuna.img.gz

Then boot the computer and select the correct profile from Cobblers boot menu.

End Notes

Actually, this was a relatively simple problem to solve from a technical viewpoint but I found it difficult to find the correct information specifically about:

  • the fact that the FC9 initrd file was an initramfs which when discovered, enabled me to pack the initrd image back up and then deploy it to the cobbler server
  • the fact that I couldn't use mkinitrd - which stumped me until I was put straight by the local lug (attributed above)
  • identifying the network card because I couldn't boot the computer to interrogate the software

Other things not covered in this page (yet)

  • this helps you to install FC9 but the driver is not actually installed on the PC, so you will need to do that and you will need to blacklist the r8168 and r8169 drivers in /etc/modprobe.confd/blacklist - this may be possible by using the blacklist= command in anaconda
  • when your kernel updates - the driver will need to be rebuilt
  • I would like to be able to generate the appropriate initrd.img from scratch and have had a look at doing it. There are some notes in anaconda-runtime and anaconda packages about using buildinstall and some other good notes about creating initramfs disks but I have yet to crack the problem
  • some people choose to replace the r8169 driver with a renamed r8101 driver
Tags: