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