this is obsolete doc -- see http://doc.nethence.com/ instead

Custom Linux kernel configuration (2.6) 

 

Introduction 

Although 'oldconfig' or 'silentoldconfig' are supposed to be used to upgrade the kernel by skipping the existing settings, I simply use those targets to deal with driver dependencies, as I edit the ‘.config’ file directly. 

 

Base configuration 

cd /usr/src/linux/
make distclean
ls -l *.config*
ls -al *config*
make defconfig
mv -f .config .config.defconfig.dist

 

# AMD64/EM64T 64-bit
sed '/^CONFIG_GENERIC_CPU/d' .config.defconfig.dist > .config
make silentoldconfig

 

# AMD 32-bit
#cat >> .config <<EOF9
#CONFIG_MK8=y
#CONFIG_HIGHMEM64G=y
#EOF9
#make silentoldconfig

 

# File systems, NFS, Samba client, network bridging
# Note. ACL and SECURITY are already enabled for EXT3.
# Note. BSD_DISKLABEL is already enabled.
# Note. FUSE_FS for NTFS-3G
cat >> .config <<EOF9
CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y
CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
CONFIG_FUSE_FS=y
CONFIG_UFS_FS=y

 

CONFIG_NFSD=y
CONFIG_NFSD_V3=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFSD_V4=y

 

CONFIG_CIFS=y
CONFIG_BRIDGE=y
EOF9
make silentoldconfig
#grep BSD_DISKLABEL .config

 

Hardware specific 

See [Hardware specific Linux kernel configurations] (http://pbraun.nethence.com/doc/sysutils_linux/kernel_hardware.html) 

 

XEN domain 0 kernel 

 

#
# XEN domain 0
#

 

# Note. Those are built-in as modules for the XEN Python scripts to work.
cat >> .config <<EOF9
CONFIG_DUMMY=m
CONFIG_TUN=m
CONFIG_BONDING=m
EOF9
make silentoldconfig

 

cat >> .config <<EOF9
CONFIG_PARAVIRT_GUEST=y
CONFIG_XEN=y
CONFIG_XEN_DOM0=y
CONFIG_XEN_NETDEV_BACKEND=y
CONFIG_XEN_BLKDEV_BACKEND=y
CONFIG_XEN_BLKDEV_TAP=y
CONFIG_XEN_GNTDEV=y
CONFIG_XEN_PLATFORM_PCI=y
EOF9
make silentoldconfig

 

Compilation and installation 

Eventually add some tag to the kernel name which prints with uname, 

mv Makefile Makefile.dist
sed 's/^EXTRAVERSION = \(.*\)$/EXTRAVERSION = \1.custom/' Makefile.dist > Makefile
#sed 's/^EXTRAVERSION = \(.*\)$/EXTRAVERSION = \1.xen/' Makefile.dist > Makefile

and proceed with the compilation, 

# Note. -j twice the number of cores
(( jobs = `grep ^processor /proc/cpuinfo | wc -l` * 2 ))
echo jobs: $jobs
time nice make -j$jobs
unset jobs

 

version=`grep version .config | awk '{print $NF}'`
echo version: $version
# Note. I am assuming the EXTRAVERSION has been added.
ls -lkd /lib/modules/$version.custom/
rm -rf /lib/modules/$version.custom/
#ls -lkd /lib/modules/$version.xen/
#rm -rf /lib/modules/$version.xen/
unset version
make modules_install
cp -f arch/x86_64/boot/bzImage /boot/vmlinuz.custom
#cp -f arch/x86_64/boot/bzImage /boot/vmlinuz.xen

 

Boot loader 

# Note. There is no seperate /boot partition.
grub-install --no-floppy /dev/sda
cd /boot/grub/
mv -f grub.cfg grub.cfg.old.`date +%s`
cat > grub.cfg <<EOF9
# Note. acpi_enforce_resources=lax for the IT87 sensor not to conflict with
# ACPI.  acpi=off works too.
# lala=lala as a workaround against a bug in the very early versions of Grub2
# (1.98).  The first kernel argument used to be omitted.

 

set default=XEN
set timeout=3

 

menuentry Linux {
        insmod ext2
        set root=(hd0,1)
        linux /boot/vmlinuz lala=lala root=/dev/sda1 ro acpi_enforce_resources=lax
}

 

menuentry Linux.custom {
        insmod ext2
        set root=(hd0,1)
        linux /boot/vmlinuz.custom lala=lala root=/dev/sda1 ro acpi_enforce_resources=lax
}

 

# Note. Change dom0_mem accordingly.
menuentry XEN {
        insmod ext2
        set root=(hd0,1)
        multiboot /boot/xen.gz lala=lala dom0_mem=1024M
        module /boot/vmlinuz.xen lala=lala root=/dev/sda1 ro nomodeset noreboot
acpi_enforce_resources=lax
}
EOF9

 

Ready to go 

sync
shutdown -r now

 

References 

Greg Kroah-Hartman, Linux Kernel in a Nutshell, O'Reilly Media, 2007