From 03b4efe9c85ecb923210f8c19bfc5ff4db61812c Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 14 Dec 2009 15:28:55 +0000 Subject: [PATCH] * Use the kernel config generator for Linux 2.6.27. * Move kernel patches out of all-packages.nix to os-specific/linux/kernel/patches.nix. * Make the kernel config available under $out/config (it's also in $out/lib/modules/$version/build/.config, but that's kind of hard to find). svn path=/nixpkgs/branches/kernel-config/; revision=18937 --- pkgs/os-specific/linux/kernel/builder.sh | 6 +- .../os-specific/linux/kernel/linux-2.6.27.nix | 217 +++++++++++++++++- .../os-specific/linux/kernel/linux-2.6.29.nix | 8 +- .../os-specific/linux/kernel/linux-2.6.32.nix | 4 +- pkgs/os-specific/linux/kernel/patches.nix | 82 +++++++ pkgs/top-level/all-packages.nix | 142 ++---------- 6 files changed, 322 insertions(+), 137 deletions(-) create mode 100644 pkgs/os-specific/linux/kernel/patches.nix diff --git a/pkgs/os-specific/linux/kernel/builder.sh b/pkgs/os-specific/linux/kernel/builder.sh index 58d257438100..07eb4edded4f 100644 --- a/pkgs/os-specific/linux/kernel/builder.sh +++ b/pkgs/os-specific/linux/kernel/builder.sh @@ -1,8 +1,7 @@ source $stdenv/setup -export SHELL=bash -export ARCH=$arch +makeFlags="ARCH=$arch" configurePhase() { @@ -28,7 +27,7 @@ configurePhase() { # Create the config file. echo "generating kernel configuration..." echo "$kernelConfig" > kernel-config - KERNEL_CONFIG=kernel-config perl -w $generateConfig + DEBUG=1 ARCH=$arch KERNEL_CONFIG=kernel-config perl -w $generateConfig } @@ -77,6 +76,7 @@ installPhase() { # copy config cp .config $out/lib/modules/$version/build/.config + ln -s $out/lib/modules/$version/build/.config $out/config if test "$arch" != um; then # copy all Makefiles and Kconfig files diff --git a/pkgs/os-specific/linux/kernel/linux-2.6.27.nix b/pkgs/os-specific/linux/kernel/linux-2.6.27.nix index 16ca672da8cb..9548f785fb65 100644 --- a/pkgs/os-specific/linux/kernel/linux-2.6.27.nix +++ b/pkgs/os-specific/linux/kernel/linux-2.6.27.nix @@ -1,25 +1,218 @@ -args @ {stdenv, fetchurl, userModeLinux ? false, ...}: - -assert !userModeLinux; +args @ { stdenv, fetchurl, userModeLinux ? false, extraConfig ? "", ... }: import ./generic.nix ( rec { - version = "2.6.27.39"; + version = "2.6.27.41"; src = fetchurl { url = "mirror://kernel/linux/kernel/v2.6/linux-${version}.tar.bz2"; - sha256 = "0l43mbh19d2h98c43y6i6xx39dhcwr9q2ggn8qhrw8jlgzn42hq8"; + sha256 = "1a26yycbry64214pf1z96rz3jyrylqh0barsdsw7m1x15v7s6gn8"; }; - features = { - iwlwifi = true; - }; - + features.iwlwifi = true; + config = - if stdenv.system == "i686-linux" then ./config-2.6.27-i686-smp else - if stdenv.system == "x86_64-linux" then ./config-2.6.27-x86_64-smp else - abort "No kernel configuration for your platform!"; + '' + # Don't include any debug features. + DEBUG_KERNEL n + + # Support drivers that need external firmware. + STANDALONE n + + # Make /proc/config.gz available. + IKCONFIG_PROC y + + # Optimize with -O2, not -Os. + CC_OPTIMIZE_FOR_SIZE n + + # Virtualisation (KVM, Xen...). + PARAVIRT_GUEST y + KVM_CLOCK y + KVM_GUEST y + XEN y + + # We need 64 GB (PAE) support for Xen guest support. + HIGHMEM64G? y + + # Enable the kernel's built-in memory tester. + MEMTEST y + + # Include the CFQ I/O scheduler in the kernel, rather than as a + # module, so that the initrd gets a good I/O scheduler. + IOSCHED_CFQ y + + # Disable some expensive (?) features. + MARKERS n + KPROBES n + NUMA? n + PM_TRACE_RTC n + + # Enable various subsystems. + ACCESSIBILITY y # Accessibility support + AUXDISPLAY y # Auxiliary Display support + DONGLE y # Serial dongle support + HIPPI y + MTD_COMPLEX_MAPPINGS y # needed for many devices + NET_POCKET y # enable pocket and portable adapters + SCSI_LOWLEVEL y # enable lots of SCSI devices + SCSI_LOWLEVEL_PCMCIA y + SPI y # needed for many devices + SPI_MASTER y + WAN y + + # Networking options. + IP_PNP n + IPV6_PRIVACY y + NETFILTER_ADVANCED y + IP_VS_PROTO_TCP y + IP_VS_PROTO_UDP y + IP_VS_PROTO_ESP y + IP_VS_PROTO_AH y + IP_DCCP_CCID3 n # experimental + CLS_U32_PERF y + CLS_U32_MARK y + + # Wireless networking. + IPW2100_MONITOR y # support promiscuous mode + IPW2200_MONITOR y # support promiscuous mode + IWLWIFI_LEDS? y + IWLWIFI_RFKILL y + IWLAGN_SPECTRUM_MEASUREMENT y + IWLAGN_LEDS y + IWL4965 y # Intel Wireless WiFi 4965AGN + IWL5000 y # Intel Wireless WiFi 5000AGN + IWL3945_RFKILL y + IWL3945_LEDS y + HOSTAP_FIRMWARE y # Support downloading firmware images with Host AP driver + HOSTAP_FIRMWARE_NVRAM y + + # Some settings to make sure that fbcondecor works - in particular, + # disable tileblitting and the drivers that need it. + + # Enable various FB devices. + FB_EFI y + FB_NVIDIA_I2C y # Enable DDC Support + FB_RIVA_I2C y + FB_ATY_CT y # Mach64 CT/VT/GT/LT (incl. 3D RAGE) support + FB_ATY_GX y # Mach64 GX support + FB_SAVAGE_I2C y + FB_SAVAGE_ACCEL y + FB_SIS_300 y + FB_SIS_315 y + FB_3DFX_ACCEL y + FB_TRIDENT_ACCEL y + FB_GEODE y + + # Sound. + SND_AC97_POWER_SAVE y # AC97 Power-Saving Mode + SND_USB_CAIAQ_INPUT y + PSS_MIXER y # Enable PSS mixer (Beethoven ADSP-16 and other compatible) + + # Enable a bunch of USB storage devices. + USB_STORAGE_DATAFAB y + USB_STORAGE_FREECOM y + USB_STORAGE_ISD200 y + USB_STORAGE_USBAT y + USB_STORAGE_SDDR09 y + USB_STORAGE_SDDR55 y + USB_STORAGE_JUMPSHOT y + USB_STORAGE_ONETOUCH y + USB_STORAGE_KARMA y + USB_STORAGE_CYPRESS_ATACB y + + # USB serial devices. + USB_SERIAL_GENERIC y # USB Generic Serial Driver + USB_SERIAL_KEYSPAN_MPR y # include firmware for various USB serial devices + USB_SERIAL_KEYSPAN_USA28 y + USB_SERIAL_KEYSPAN_USA28X y + USB_SERIAL_KEYSPAN_USA28XA y + USB_SERIAL_KEYSPAN_USA28XB y + USB_SERIAL_KEYSPAN_USA19 y + USB_SERIAL_KEYSPAN_USA18X y + USB_SERIAL_KEYSPAN_USA19W y + USB_SERIAL_KEYSPAN_USA19QW y + USB_SERIAL_KEYSPAN_USA19QI y + USB_SERIAL_KEYSPAN_USA49W y + USB_SERIAL_KEYSPAN_USA49WLC y + + # Filesystem options - in particular, enable extended attributes and + # ACLs for all filesystems that support them. + EXT2_FS_XATTR y # Ext2 extended attributes + EXT2_FS_POSIX_ACL y # Ext2 POSIX Access Control Lists + EXT2_FS_SECURITY y # Ext2 Security Labels + EXT2_FS_XIP y # Ext2 execute in place support + REISERFS_FS_XATTR y + REISERFS_FS_POSIX_ACL y + REISERFS_FS_SECURITY y + JFS_POSIX_ACL y + JFS_SECURITY y + XFS_QUOTA y + XFS_POSIX_ACL y + XFS_RT y # XFS Realtime subvolume support + OCFS2_DEBUG_MASKLOG n + UBIFS_FS_XATTR y + UBIFS_FS_ADVANCED_COMPR y + NFSD_V2_ACL y + NFSD_V3 y + NFSD_V3_ACL y + NFSD_V4 y + CIFS_XATTR y + CIFS_POSIX y + + # Security related features. + STRICT_DEVMEM y # Filter access to /dev/mem + SECURITY_SELINUX_BOOTPARAM_VALUE 0 # disable SELinux by default + + # Misc. options. + 8139TOO_8129 y + 8139TOO_PIO n # PIO is slower + AIC79XX_DEBUG_ENABLE n + AIC7XXX_DEBUG_ENABLE n + AIC94XX_DEBUG n + B43_PCMCIA y + BLK_DEV_BSG n + BLK_DEV_CMD640_ENHANCED y # CMD640 enhanced support + BLK_DEV_IDEACPI y # IDE ACPI support + BLK_DEV_INTEGRITY y + BLK_DEV_IO_TRACE n + BSD_PROCESS_ACCT_V3 y + BT_HCIUART_BCSP y + BT_HCIUART_H4 y # UART (H4) protocol support + BT_HCIUART_LL y + BT_RFCOMM_TTY y # RFCOMM TTY support + CPU_FREQ_DEBUG n + CRASH_DUMP n + DMAR? n # experimental + FUSION y # Fusion MPT device support + IRDA_ULTRA y # Ultra (connectionless) protocol + JOYSTICK_IFORCE_232 y # I-Force Serial joysticks and wheels + JOYSTICK_IFORCE_USB y # I-Force USB joysticks and wheels + JOYSTICK_XPAD_FF y # X-Box gamepad rumble support + JOYSTICK_XPAD_LEDS y # LED Support for Xbox360 controller 'BigX' LED + KALLSYMS_EXTRA_PASS n + LDM_PARTITION y # Windows Logical Disk Manager (Dynamic Disk) support + LEDS_TRIGGER_IDE_DISK y # LED IDE Disk Trigger + LOGIRUMBLEPAD2_FF y # Logitech Rumblepad 2 force feedback + LOGO n # not needed + MEDIA_ATTACH y + MEGARAID_NEWGEN y + MODVERSIONS y + MTRR_SANITIZER y + NET_FC y # Fibre Channel driver support + PCI_LEGACY y + PPP_MULTILINK y # PPP multilink support + SCSI_LOGGING y # SCSI logging facility + SERIAL_8250 y # 8250/16550 and compatible serial support + SLIP_COMPRESSED y # CSLIP compressed headers + SLIP_SMART y + THERMAL_HWMON y # Hardware monitoring support + USB_DEBUG n + USB_EHCI_ROOT_HUB_TT y # Root Hub Transaction Translators + X86_MCE y + + ${extraConfig} + ''; } // args diff --git a/pkgs/os-specific/linux/kernel/linux-2.6.29.nix b/pkgs/os-specific/linux/kernel/linux-2.6.29.nix index 9a7fb3a34711..e91d956ce745 100644 --- a/pkgs/os-specific/linux/kernel/linux-2.6.29.nix +++ b/pkgs/os-specific/linux/kernel/linux-2.6.29.nix @@ -1,4 +1,4 @@ -args @ {stdenv, fetchurl, userModeLinux ? false, ...}: +args @ { stdenv, fetchurl, userModeLinux ? false, extraConfig ? "", ... }: import ./generic.nix ( @@ -33,9 +33,7 @@ import ./generic.nix ( XEN y # We need 64 GB (PAE) support for Xen guest support. - ${stdenv.lib.optionalString (stdenv.system == "i686-linux") '' - HIGHMEM64G y - ''} + HIGHMEM64G? y # Enable the kernel's built-in memory tester. MEMTEST y @@ -223,6 +221,8 @@ import ./generic.nix ( USB_EHCI_ROOT_HUB_TT y # Root Hub Transaction Translators X86_CHECK_BIOS_CORRUPTION y X86_MCE y + + ${extraConfig} ''; } diff --git a/pkgs/os-specific/linux/kernel/linux-2.6.32.nix b/pkgs/os-specific/linux/kernel/linux-2.6.32.nix index 40f0c6fdf2c0..7ae765ad1d65 100644 --- a/pkgs/os-specific/linux/kernel/linux-2.6.32.nix +++ b/pkgs/os-specific/linux/kernel/linux-2.6.32.nix @@ -1,4 +1,4 @@ -args @ {stdenv, fetchurl, userModeLinux ? false, ...}: +args @ { stdenv, fetchurl, userModeLinux ? false, extraConfig ? "", ... }: import ./generic.nix ( @@ -205,6 +205,8 @@ import ./generic.nix ( USB_EHCI_ROOT_HUB_TT y # Root Hub Transaction Translators X86_CHECK_BIOS_CORRUPTION y X86_MCE y + + ${extraConfig} ''; } diff --git a/pkgs/os-specific/linux/kernel/patches.nix b/pkgs/os-specific/linux/kernel/patches.nix new file mode 100644 index 000000000000..7bc5519a0823 --- /dev/null +++ b/pkgs/os-specific/linux/kernel/patches.nix @@ -0,0 +1,82 @@ +{ fetchurl }: + +let + + fbcondecorConfig = + '' + FB_CON_DECOR y + + # fbcondecor is picky about some other settings. + FB y + FB_TILEBLITTING n + FB_MATROX n + FB_S3 n + FB_VT8623 n + FB_ARK n + FB_CFB_FILLRECT y + FB_CFB_COPYAREA y + FB_CFB_IMAGEBLIT y + FB_VESA y + FRAMEBUFFER_CONSOLE y + ''; + +in + +{ + + sec_perm_2_6_24 = + { name = "sec_perm-2.6.24"; + patch = ./sec_perm-2.6.24.patch; + features.secPermPatch = true; + }; + + fbcondecor_2_6_27 = + { name = "fbcondecor-0.9.4-2.6.27"; + patch = fetchurl { + url = http://dev.gentoo.org/~spock/projects/fbcondecor/archive/fbcondecor-0.9.4-2.6.27.patch; + sha256 = "170l9l5fvbgjrr4klqcwbgjg4kwvrrhjpmgbfpqj0scq0s4q4vk6"; + }; + extraConfig = fbcondecorConfig; + features.fbConDecor = true; + }; + + fbcondecor_2_6_28 = + { name = "fbcondecor-0.9.5-2.6.28"; + patch = fetchurl { + url = http://dev.gentoo.org/~spock/projects/fbcondecor/archive/fbcondecor-0.9.5-2.6.28.patch; + sha256 = "105q2dwrwi863r7nhlrvljim37aqv67mjc3lgg529jzqgny3fjds"; + }; + extraConfig = fbcondecorConfig; + features.fbConDecor = true; + }; + + fbcondecor_2_6_29 = + { name = "fbcondecor-0.9.6-2.6.29.2"; + patch = fetchurl { + url = http://dev.gentoo.org/~spock/projects/fbcondecor/archive/fbcondecor-0.9.6-2.6.29.2.patch; + sha256 = "1yppvji13sgnql62h4wmskzl9l198pp1pbixpbymji7mr4a0ylx1"; + }; + extraConfig = fbcondecorConfig; + features.fbConDecor = true; + }; + + fbcondecor_2_6_31 = + { name = "fbcondecor-0.9.6-2.6.31.2"; + patch = fetchurl { + url = http://dev.gentoo.org/~spock/projects/fbcondecor/archive/fbcondecor-0.9.6-2.6.31.2.patch; + sha256 = "1avk0yn0y2qbpsxf31r6d14y4a1mand01r4k4i71yfxvpqcgxka9"; + }; + extraConfig = fbcondecorConfig; + features.fbConDecor = true; + }; + + # From http://patchwork.kernel.org/patch/19495/ + ext4_softlockups_2_6_28 = + { name = "ext4-softlockups-fix"; + patch = fetchurl { + url = http://patchwork.kernel.org/patch/19495/raw; + sha256 = "0vqcj9qs7jajlvmwm97z8cljr4vb277aqhsjqrakbxfdiwlhrzzf"; + }; + }; + +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index dbe6b5605725..4e9aa67d30b9 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5377,6 +5377,10 @@ let cross = "sparc-linux"; }; + kernelPatches = import ../os-specific/linux/kernel/patches.nix { + inherit fetchurl; + }; + kernel_2_6_25 = import ../os-specific/linux/kernel/linux-2.6.25.nix { inherit fetchurl stdenv perl mktemp module_init_tools; kernelPatches = [ @@ -5388,15 +5392,8 @@ let extraConfig = "CONFIG_FB_CON_DECOR=y"; features = { fbConDecor = true; }; } - { name = "sec_perm-2.6.24"; - patch = ../os-specific/linux/kernel/sec_perm-2.6.24.patch; - features = { secPermPatch = true; }; - } + kernelPatches.sec_perm_2_6_24 ]; - extraConfig = - lib.optional (getConfig ["kernel" "timer_stats"] false) "CONFIG_TIMER_STATS=y" ++ - lib.optional (getConfig ["kernel" "no_irqbalance"] false) "# CONFIG_IRQBALANCE is not set" ++ - [(getConfig ["kernel" "addConfig"] "")]; }; kernel_2_6_26 = import ../os-specific/linux/kernel/linux-2.6.26.nix { @@ -5410,97 +5407,33 @@ let extraConfig = "CONFIG_FB_CON_DECOR=y"; features = { fbConDecor = true; }; } - { name = "sec_perm-2.6.24"; - patch = ../os-specific/linux/kernel/sec_perm-2.6.24.patch; - features = { secPermPatch = true; }; - } + kernelPatches.sec_perm_2_6_24 ]; - extraConfig = - lib.optional (getConfig ["kernel" "no_irqbalance"] false) "# CONFIG_IRQBALANCE is not set" ++ - [(getConfig ["kernel" "addConfig"] "")]; }; - kernel_2_6_27 = import ../os-specific/linux/kernel/linux-2.6.27.nix { + kernel_2_6_27 = makeOverridable (import ../os-specific/linux/kernel/linux-2.6.27.nix) { inherit fetchurl stdenv perl mktemp module_init_tools; - kernelPatches = [ - { name = "fbcondecor-0.9.4-2.6.27"; - patch = fetchurl { - url = http://dev.gentoo.org/~spock/projects/fbcondecor/archive/fbcondecor-0.9.4-2.6.27.patch; - sha256 = "170l9l5fvbgjrr4klqcwbgjg4kwvrrhjpmgbfpqj0scq0s4q4vk6"; - }; - extraConfig = "CONFIG_FB_CON_DECOR=y"; - features = { fbConDecor = true; }; - } - { name = "sec_perm-2.6.24"; - patch = ../os-specific/linux/kernel/sec_perm-2.6.24.patch; - features = { secPermPatch = true; }; - } - ]; - extraConfig = - lib.optional (getConfig ["kernel" "no_irqbalance"] false) "# CONFIG_IRQBALANCE is not set" ++ - [(getConfig ["kernel" "addConfig"] "")]; + kernelPatches = + [ kernelPatches.fbcondecor_2_6_27 + kernelPatches.sec_perm_2_6_24 + ]; }; kernel_2_6_28 = makeOverridable (import ../os-specific/linux/kernel/linux-2.6.28.nix) { inherit fetchurl stdenv perl mktemp module_init_tools; - kernelPatches = [ - { name = "fbcondecor-0.9.5-2.6.28"; - patch = fetchurl { - url = http://dev.gentoo.org/~spock/projects/fbcondecor/archive/fbcondecor-0.9.5-2.6.28.patch; - sha256 = "105q2dwrwi863r7nhlrvljim37aqv67mjc3lgg529jzqgny3fjds"; - }; - extraConfig = "CONFIG_FB_CON_DECOR=y"; - features = { fbConDecor = true; }; - } - { name = "sec_perm-2.6.24"; - patch = ../os-specific/linux/kernel/sec_perm-2.6.24.patch; - features = { secPermPatch = true; }; - } - { # http://patchwork.kernel.org/patch/19495/ - name = "ext4-softlockups-fix"; - patch = fetchurl { - url = http://patchwork.kernel.org/patch/19495/raw; - sha256 = "0vqcj9qs7jajlvmwm97z8cljr4vb277aqhsjqrakbxfdiwlhrzzf"; - }; - } - ]; - extraConfig = - lib.optional (getConfig ["kernel" "no_irqbalance"] false) "# CONFIG_IRQBALANCE is not set" ++ - [(getConfig ["kernel" "addConfig"] "")]; + kernelPatches = + [ kernelPatches.fbcondecor_2_6_28 + kernelPatches.sec_perm_2_6_24 + kernelPatches.ext4_softlockups + ]; }; kernel_2_6_29 = makeOverridable (import ../os-specific/linux/kernel/linux-2.6.29.nix) { inherit fetchurl stdenv perl mktemp module_init_tools; - kernelPatches = [ - { name = "fbcondecor-0.9.5-2.6.28"; - patch = fetchurl { - url = http://dev.gentoo.org/~spock/projects/fbcondecor/archive/fbcondecor-0.9.6-2.6.29.2.patch; - sha256 = "1yppvji13sgnql62h4wmskzl9l198pp1pbixpbymji7mr4a0ylx1"; - }; - extraConfig = - '' - FB_CON_DECOR y - - # fbcondecor is picky about some other settings. - FB y - FB_TILEBLITTING n - FB_MATROX n - FB_S3 n - FB_VT8623 n - FB_ARK n - FB_CFB_FILLRECT y - FB_CFB_COPYAREA y - FB_CFB_IMAGEBLIT y - FB_VESA y - FRAMEBUFFER_CONSOLE y - ''; - features = { fbConDecor = true; }; - } - { name = "sec_perm-2.6.24"; - patch = ../os-specific/linux/kernel/sec_perm-2.6.24.patch; - features = { secPermPatch = true; }; - } - ]; + kernelPatches = + [ kernelPatches.fbcondecor_2_6_29 + kernelPatches.sec_perm_2_6_24 + ]; }; kernel_2_6_31 = makeOverridable (import ../os-specific/linux/kernel/linux-2.6.31.nix) { @@ -5531,36 +5464,10 @@ let kernel_2_6_32 = makeOverridable (import ../os-specific/linux/kernel/linux-2.6.32.nix) { inherit fetchurl stdenv perl mktemp module_init_tools; - kernelPatches = [ - { name = "fbcondecor-0.9.6-2.6.31.2"; - patch = fetchurl { - url = http://dev.gentoo.org/~spock/projects/fbcondecor/archive/fbcondecor-0.9.6-2.6.31.2.patch; - sha256 = "1avk0yn0y2qbpsxf31r6d14y4a1mand01r4k4i71yfxvpqcgxka9"; - }; - extraConfig = - '' - FB_CON_DECOR y - - # fbcondecor is picky about some other settings. - FB y - FB_TILEBLITTING n - FB_MATROX n - FB_S3 n - FB_VT8623 n - FB_ARK n - FB_CFB_FILLRECT y - FB_CFB_COPYAREA y - FB_CFB_IMAGEBLIT y - FB_VESA y - FRAMEBUFFER_CONSOLE y - ''; - features = { fbConDecor = true; }; - } - { name = "sec_perm-2.6.24"; - patch = ../os-specific/linux/kernel/sec_perm-2.6.24.patch; - features = { secPermPatch = true; }; - } - ]; + kernelPatches = + [ kernelPatches.fbcondecor_2_6_31 + kernelPatches.sec_perm_2_6_24 + ]; }; /* Kernel modules are inherently tied to a specific kernel. So @@ -5694,6 +5601,7 @@ let kernelPackages_2_6_31_zen = recurseIntoAttrs (kernelPackagesFor kernel_2_6_31_zen); kernelPackages_2_6_31_zen_bfs = recurseIntoAttrs (kernelPackagesFor kernel_2_6_31_zen_bfs); kernelPackages_2_6_31 = recurseIntoAttrs (kernelPackagesFor kernel_2_6_31); + kernelPackages_2_6_32 = recurseIntoAttrs (kernelPackagesFor kernel_2_6_32); # The current default kernel / kernel modules. kernelPackages = kernelPackages_2_6_28;