Build TomElliott Kernel
PRE BUILD ENVIRONMENT IS ASSUMED ALREADY INSTALLED ON THE SYSTEM YOU'RE BUILDING NOTE: It is assumed you have root access to the system you're building this on. It also assumes you know your CWD (Current Working Directory).
Contents
- 1 Build TomElliott Kernel for FOG 0.32 and earlier
- 2 Build TomElliott Kernel for FOG 0.33b and newer
- 3 Additional Patches
Build TomElliott Kernel for FOG 0.32 and earlier
The below instructions are to build the TomElliott kernel. There is an extra step involved compared to the normal kernel build as there are firmware's built directly into the kernels now.
Download the Kernel
As of the time of this writing kernel 3.13 is the latest. You can use previous, or future kernels as well though.
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.13.tar.xz
Uncompress the kernel
tar -xf linux-3.13.tar.xz
Go into uncompressed linux kernel directory
cd linux-3.13
Get the config file
wget https://svn.code.sf.net/p/freeghost/code/trunk/kernel/TomElliott.config.32 -O .config
Download the prerequisite package (THE EXTRA STEP IS HERE)
git clone git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
Prepare the build
make ARCH=i386 menuconfig
Add any choices, or don't but when you exit, it will ask you to save the config, NEEDED.
After you've saved the config.
Build the bzImage
make ARCH=i386 bzImage
This will take a while. Once successful, it will say bzImage created.
Copy the built kernel to your FOG Server's kernel directory.
NOTE: In my example, the FOG Server is the same as my build system. NOTE: Recommend to make a backup of the original /tftpboot/fog/kernel/bzImage before continuing just in case.
cp arch/x86/boot/bzImage /tftpboot/fog/kernel/bzImage
Build TomElliott Kernel for FOG 0.33b and newer
The below instructions are to build the TomElliott kernel. There is an extra step involved compared to the normal kernel build as there are firmware's built directly into the kernels now.
Download the Kernel
As of the time of this writing kernel 3.13 is the latest. You can use previous, or future kernels as well though.
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.13.tar.xz
Uncompress the kernel
tar -xf linux-3.13.tar.xz
Go into uncompressed linux kernel directory
cd linux-3.13
Get the config file
To Build 32 bit Kernel
wget https://svn.code.sf.net/p/freeghost/code/trunk/kernel/TomElliott.config.32 -O .config
To Build 64 bit Kernel
wget https://svn.code.sf.net/p/freeghost/code/trunk/kernel/TomElliott.config.64 -O .config
Download the prerequisite package (THE EXTRA STEP IS HERE)
git clone git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
Prepare the build
To Build 32 bit Kernel
make ARCH=i386 menuconfig
To Build 64 bit Kernel
NOTE: MUST BE ON A 64 BIT OS
make menuconfig
Add any choices, or don't but when you exit, it will ask you to save the config, NEEDED.
NOTE: If it doesn't ask you to save the configuration, the easiest method to ensure all will work fine is to deselect an small item and reselect it.
After you've saved the config.
Build the bzImage
To Build 32 bit Kernel
make ARCH=i386 bzImage
To Build 64 bit Kernel
make bzImage
This will take a while. Once successful, it will say bzImage created.
Copy the built kernel to your FOG Server's kernel directory.
NOTE: In my example, the FOG Server is the same as my build system. NOTE: Recommend to make a backup of the original /var/www/{html/fog,fog}/service/ipxe/bzImage before continuing just in case.
cp arch/x86/boot/bzImage /var/www/html/fog/service/ipxe/bzImage
Additional Patches
Edit the files within the linux decompressed folder:
drivers/net/usb/r8152.c
Relevant to the r8152 network cards. Search VENDOR_ID_REALTEK
If you don't see VENDOR_ID_MICROSOFT add the line: It should look like:
#define VENDOR_ID_MICROSOFT 0x045e
Search REALTEK_USB_DEVICE(VENDOR_ID_REALTEK
If you don't see VENDOR_ID_MICOSOFT add the lines:
{REALTEK_USB_DEVICE(VENDOR_ID_MICROSOFT, 0x07ab)} {REALTEK_USB_DEVICE(VENDOR_ID_MICROSOFT, 0x07c6)}
drivers/mmc/card/block.c
Relevant to MMC block devices to remove the RPMB drive from view Search card->part[idx]
Right before the line add:
if (!card->part[idx].size || (card->part[idx].area_type & MMC_BLK_DATA_AREA_RPMB)) continue;
drivers/net/ethernet/intel/e1000e/netdev.c
No longer needed for 4.9.x and hopefully forward.
Search er32(TIMINCA)
In the for loop find: rem = do_div(temp, incvalue); Remove it and add in it's place:
rem = incvalue != 0 ? do_div(temp,incvalue) : 0;
drivers/scsi/storvsc_drv.c
Search blk_queue_virt_boundary.
Delete the line and add:
if (PAGE_SIZE - 1 < 4096) { blk_queue_virt_boundary(sdevice->request_queue, 4096); } else { blk_queue_virt_boundary(sdevice->request_queue, PAGE_SIZE - 1); }
drivers/net/ethernet/intel/igb/e1000_82575.c
Search E1000_STATUS_FUNC_SHIFT;
Directly after the line add:
igb_write_phy_reg_82580(hw, I347AT4_PAGE_SELECT, 0);