26
« Ostatnia wiadomość wysłana przez pavbaranov dnia Wrzesień 05, 2015, 11:37:07 »
Wersja dla kernela 4.2. Poniższy PKGBUILD jest skonstruowany nieco inaczej, a mianowicie nakłada patch gc (który jest obecnie wyłącznie przystosowanym BFS dla kernela 4.2) na waniliowe źródła kernela. Dodatkowo nakładane są patche BFQ (jeszcze dla linii 4.1, ale pracuje bez problemu) oraz patch graysky'ego w oryginalnej wersji. Nie trzeba zatem stosować opcji "native" dla procesorów Intel.
PKGBUILD
# Maintainer: pavbaranov
# Contributor: Piotr Gorski <lucjan.lucjanov@gmail.com>
# Contributor: Tobias Powalowski <tpowa@archlinux.org>
# Contributor: Thomas Baechler <thomas@archlinux.org>
### BUILD OPTIONS
# Set these variables to ANYTHING that is not null to enable them
# Tweak kernel options prior to a build via nconfig
_makenconfig=
# Tweak kernel options prior to a build via menuconfig
_makemenuconfig=
# Tweak kernel options prior to a build via xconfig
_makexconfig=y
# Tweak kernel options prior to a build via gconfig
_makegconfig=
# NUMA is optimized for multi-socket motherboards.
# A single multi-core CPU actually runs slower with NUMA enabled.
# See, https://bugs.archlinux.org/task/31187
_NUMAdisable=y
# Compile ONLY probed modules
# As of mainline 2.6.32, running with this option will only build the modules
# that you currently have probed in your system VASTLY reducing the number of
# modules built and the build time to do it.
#
# WARNING - ALL modules must be probed BEFORE you begin making the pkg!
#
# To keep track of which modules are needed for your specific system/hardware,
# give module_db script a try: https://aur.archlinux.org/packages/modprobed-db
# This PKGBUILD will call it directly to probe all the modules you have logged!
#
# More at this wiki page ---> https://wiki.archlinux.org/index.php/Modprobed_db
_localmodcfg=y
# Use the current kernel's .config file
# Enabling this option will use the .config of the RUNNING kernel rather than
# the ARCH defaults. Useful when the package gets updated and you already went
# through the trouble of customizing your config options. NOT recommended when
# a new kernel is released, but again, convenient for package bumps.
_use_current=
### Do not edit below this line unless you know what you're doing
pkgbase=linux-gc
pkgname=('linux-gc' 'linux-gc-headers' 'linux-gc-docs')
_kernelname=-gc
#_srcname=linux-gc-linux-4.1.y-gc
_srcname=linux-4.2
pkgver=4.2
pkgrel=1
pkgdesc="Alfred Chen's linux kernel line (incl. BFQ, BFS and more)"
arch=('i686' 'x86_64')
url="http://cchalpha.blogspot.com/"
license=('GPL2')
options=('!strip')
makedepends=('kmod' 'inetutils' 'bc')
optdepends=('modprobed-db') # if you set _localmodcfg=y above, you had to install modprobed-db from AUR before compile this kernel
_bfqrel=v7r8
_bfqpath="http://algo.ing.unimo.it/people/paolo/disk_sched/patches/4.1.0-${_bfqrel}"
_gcc_patch="enable_additional_cpu_optimizations_for_gcc_v4.9+_kernel_v3.15+.patch"
#source=(#"https://codeload.github.com/cchalpha/linux-gc/zip/linux-4.1.y-gc")
source=('https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.2.tar.xz'
'https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.2.tar.sign'
'https://bitbucket.org/alfredchen/linux-gc/downloads/gc_v4.2_0463_1.patch'
'https://bitbucket.org/alfredchen/linux-gc/downloads/fix_topology_thread_cpumask.patch'
"${_bfqpath}/0001-block-cgroups-kconfig-build-bits-for-BFQ-v7r8-4.1.patch"
"${_bfqpath}/0002-block-introduce-the-BFQ-v7r8-I-O-sched-for-4.1.patch"
"${_bfqpath}/0003-block-bfq-add-Early-Queue-Merge-EQM-to-BFQ-v7r8-for-4.1.0.patch"
'0001-make_flush_workqueue_non_gpl.patch'
'0001-e1000e-Fix-tight-loop-implementation-of-systime-read.patch'
'0001-netfilter-conntrack-use-nf_ct_tmpl_free-in-CT-synpro.patch'
"http://repo-ck.com/source/gcc_patch/${_gcc_patch}.gz"
'linux-gc.preset'
'change-default-console-loglevel.patch'
'config' 'config.x86_64'
)
prepare() {
cd ${_srcname}
### set DEFAULT_CONSOLE_LOGLEVEL to 4 (same value as the 'quiet' kernel param)
# remove this when a Kconfig knob is made available by upstream
# (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227)
msg "Patching set DEFAULT_CONSOLE_LOGLEVEL to 4"
patch -p1 -i "${srcdir}/change-default-console-loglevel.patch"
### Apply Alfred Chen's gc patch (BFS)
msg "Patching Alfred Chen's gc patch (BFQ, BFS and more)"
patch -p1 -i "${srcdir}/gc_v4.2_0463_1.patch"
patch -p1 -i "${srcdir}/fix_topology_thread_cpumask.patch"
### Apply BFQ patch
msg "Patcching source with BFQ patches"
for p in "${srcdir}"/000{1,2,3}-block*.patch; do
patch -Np1 -i "$p"
done
### Apply more GCC CPU optimizations (aka graysky's patch)
msg "Patching source with gcc patchto enable more cpus types"
patch -Np1 -i "${srcdir}/${_gcc_patch}"
### Apply patches from Arch's sources
patch -Np1 -i "${srcdir}/0001-e1000e-Fix-tight-loop-implementation-of-systime-read.patch"
patch -Np1 -i "${srcdir}/0001-make_flush_workqueue_non_gpl.patch"
patch -Np1 -i "${srcdir}/0001-netfilter-conntrack-use-nf_ct_tmpl_free-in-CT-synpro.patch"
### Clean tree and copy ARCH config over
msg "Running make mrproper to clean source tree"
make mrproper
if [ "${CARCH}" = "x86_64" ]; then
cat "${srcdir}/config.x86_64" > ./.config
else
cat "${srcdir}/config" > ./.config
fi
### Optionally use running kernel's config
# code originally by nous; http://aur.archlinux.org/packages.php?ID=40191
if [ -n "$_use_current" ]; then
if [[ -s /proc/config.gz ]]; then
msg "Extracting config from /proc/config.gz..."
# modprobe configs
zcat /proc/config.gz > ./.config
else
warning "You kernel was not compiled with IKCONFIG_PROC!"
warning "You cannot read the current config!"
warning "Aborting!"
exit
fi
fi
if [ "${_kernelname}" != "" ]; then
sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config
sed -i "s|CONFIG_LOCALVERSION_AUTO=.*|CONFIG_LOCALVERSION_AUTO=n|" ./.config
fi
### Optionally disable NUMA since >99% of users have mono-socket systems.
# For more, see: https://bugs.archlinux.org/task/31187
if [ -n "$_NUMAdisable" ]; then
if [ "${CARCH}" = "x86_64" ]; then
msg "Disabling NUMA from kernel config..."
sed -i -e 's/CONFIG_NUMA=y/# CONFIG_NUMA is not set/' \
-i -e '/CONFIG_AMD_NUMA=y/d' \
-i -e '/CONFIG_X86_64_ACPI_NUMA=y/d' \
-i -e '/CONFIG_NODES_SPAN_OTHER_NODES=y/d' \
-i -e '/# CONFIG_NUMA_EMU is not set/d' \
-i -e '/CONFIG_NODES_SHIFT=6/d' \
-i -e '/CONFIG_NEED_MULTIPLE_NODES=y/d' \
-i -e '/# CONFIG_MOVABLE_NODE is not set/d' \
-i -e '/CONFIG_USE_PERCPU_NUMA_NODE_ID=y/d' \
-i -e '/CONFIG_ACPI_NUMA=y/d' ./.config
fi
fi
# set extraversion to pkgrel
sed -ri "s|^(EXTRAVERSION =).*|\1 -${pkgrel}|" Makefile
# don't run depmod on 'make install'. We'll do this ourselves in packaging
sed -i '2iexit 0' scripts/depmod.sh
# get kernel version
msg "Running make prepare for you to enable patched options of your choosing"
make prepare
### Optionally load needed modules for the make localmodconfig
# See https://aur.archlinux.org/packages/modprobed-db
if [ -n "$_localmodcfg" ]; then
msg "If you have modprobe-db installed, running it in recall mode now"
if [ -e /usr/bin/modprobed-db ]; then
[[ ! -x /usr/bin/sudo ]] && echo "Cannot call modprobe with sudo. Install via pacman -S sudo and configure to work with this user." && exit 1
sudo /usr/bin/modprobed-db recall
fi
msg "Running Steven Rostedt's make localmodconfig now"
make localmodconfig
fi
if [ -n "$_makenconfig" ]; then
msg "Running make nconfig"
make nconfig
fi
if [ -n "$_makemenuconfig" ]; then
msg "Running make menuconfig"
make menuconfig
fi
if [ -n "$_makexconfig" ]; then
msg "Running make xconfig"
make xconfig
fi
if [ -n "$_makegconfig" ]; then
msg "Running make gconfig"
make gconfig
fi
# rewrite configuration
yes "" | make config >/dev/null
# save configuration for later reuse
if [ "${CARCH}" = "x86_64" ]; then
cat .config > "${startdir}/config.x86_64.last"
else
cat .config > "${startdir}/config.last"
fi
}
build() {
cd ${_srcname}
msg "Running make bzImage and modules"
make ${MAKEFLAGS} LOCALVERSION= bzImage modules
}
package_linux-gc() {
pkgdesc='Linux Kernel and modules with the BFQ scheduler.'
depends=('coreutils' 'linux-firmware' 'mkinitcpio>=0.7')
optdepends=('crda: to set the correct wireless channels of your country' 'nvidia-gc: nVidia drivers for linux-gc' 'modprobed-db: Keeps track of EVERY kernel module that has ever been probed - useful for those of us who make localmodconfig')
backup=("etc/mkinitcpio.d/linux-gc.preset")
install=linux-gc.install
cd ${_srcname}
KARCH=x86
# get kernel version
_kernver="$(make LOCALVERSION= kernelrelease)"
_basekernel=${_kernver%%-*}
_basekernel=${_basekernel%.*}
mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot}
make LOCALVERSION= INSTALL_MOD_PATH="${pkgdir}" modules_install
cp arch/$KARCH/boot/bzImage "${pkgdir}/boot/vmlinuz-linux-gc"
# set correct depmod command for install
cp -f "${startdir}/${install}" "${startdir}/${install}.pkg"
true && install=${install}.pkg
sed \
-e "s/KERNEL_NAME=.*/KERNEL_NAME=-gc/g" \
-e "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/g" \
-i "${startdir}/${install}"
# install mkinitcpio preset file for kernel
install -D -m644 "${srcdir}/linux-gc.preset" "${pkgdir}/etc/mkinitcpio.d/linux-gc.preset"
sed \
-e "1s|'linux.*'|'linux-gc'|" \
-e "s|ALL_kver=.*|ALL_kver=\"/boot/vmlinuz-linux-gc\"|" \
-e "s|default_image=.*|default_image=\"/boot/initramfs-linux-gc.img\"|" \
-e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-linux-gc-fallback.img\"|" \
-i "${pkgdir}/etc/mkinitcpio.d/linux-gc.preset"
# remove build and source links
rm -f "${pkgdir}"/lib/modules/${_kernver}/{source,build}
# remove the firmware
rm -rf "${pkgdir}/lib/firmware"
# make room for external modules
ln -s "../extramodules-${_basekernel}${_kernelname:gc}" "${pkgdir}/lib/modules/${_kernver}/extramodules"
# add real version for building modules and running depmod from post_install/upgrade
mkdir -p "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:gc}"
echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:gc}/version"
# Now we call depmod...
depmod -b "${pkgdir}" -F System.map "${_kernver}"
# move module tree /lib -> /usr/lib
mkdir -p "${pkgdir}/usr"
mv "${pkgdir}/lib" "${pkgdir}/usr/"
# add vmlinux
install -D -m644 vmlinux "${pkgdir}/usr/lib/modules/${_kernver}/build/vmlinux"
}
package_linux-gc-headers() {
pkgdesc='Header files and scripts to build modules for linux-gc.'
depends=('linux-gc')
install -dm755 "${pkgdir}/usr/lib/modules/${_kernver}"
cd ${_srcname}
KARCH=x86
# get kernel version
_kernver="$(make LOCALVERSION= kernelrelease)"
_basekernel=${_kernver%%-*}
_basekernel=${_basekernel%.*}
install -D -m644 Makefile \
"${pkgdir}/usr/lib/modules/${_kernver}/build/Makefile"
install -D -m644 kernel/Makefile \
"${pkgdir}/usr/lib/modules/${_kernver}/build/kernel/Makefile"
install -D -m644 .config \
"${pkgdir}/usr/lib/modules/${_kernver}/build/.config"
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/include"
for i in acpi asm-generic config crypto drm generated keys linux math-emu \
media net pcmcia scsi sound trace uapi video xen; do
cp -a include/${i} "${pkgdir}/usr/lib/modules/${_kernver}/build/include/"
done
# copy arch includes for external modules
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/x86"
cp -a arch/x86/include "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/x86/"
# copy files necessary for later builds, like nvidia and vmware
cp Module.symvers "${pkgdir}/usr/lib/modules/${_kernver}/build"
cp -a scripts "${pkgdir}/usr/lib/modules/${_kernver}/build"
# fix permissions on scripts dir
chmod og-w -R "${pkgdir}/usr/lib/modules/${_kernver}/build/scripts"
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/.tmp_versions"
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/kernel"
cp arch/${KARCH}/Makefile "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/"
if [ "${CARCH}" = "i686" ]; then
cp arch/${KARCH}/Makefile_32.cpu "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/"
fi
cp arch/${KARCH}/kernel/asm-offsets.s "${pkgdir}/usr/lib/modules/${_kernver}/build/arch/${KARCH}/kernel/"
# add docbook makefile
install -D -m644 Documentation/DocBook/Makefile \
"${pkgdir}/usr/lib/modules/${_kernver}/build/Documentation/DocBook/Makefile"
# add dm headers
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/md"
cp drivers/md/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/md"
# add inotify.h
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/include/linux"
cp include/linux/inotify.h "${pkgdir}/usr/lib/modules/${_kernver}/build/include/linux/"
# add wireless headers
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/net/mac80211/"
cp net/mac80211/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/net/mac80211/"
# add dvb headers for external modules
# in reference to:
# http://bugs.archlinux.org/task/9912
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-core"
cp drivers/media/dvb-core/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-core/"
# and...
# http://bugs.archlinux.org/task/11194
###
### DO NOT MERGE OUT THIS IF STATEMENT
### IT AFFECTS USERS WHO STRIP OUT THE DVB STUFF SO THE OFFICIAL ARCH CODE HAS A CP
### LINE THAT CAUSES MAKEPKG TO END IN AN ERROR
###
if [ -d include/config/dvb/ ]; then
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/include/config/dvb/"
cp include/config/dvb/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/include/config/dvb/"
fi
# add dvb headers for http://mcentral.de/hg/~mrec/em28xx-new
# in reference to:
# http://bugs.archlinux.org/task/13146
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-frontends/"
cp drivers/media/dvb-frontends/lgdt330x.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-frontends/"
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/i2c/"
cp drivers/media/i2c/msp3400-driver.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/i2c/"
# add dvb headers
# in reference to:
# http://bugs.archlinux.org/task/20402
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/usb/dvb-usb"
cp drivers/media/usb/dvb-usb/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/usb/dvb-usb/"
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-frontends"
cp drivers/media/dvb-frontends/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/dvb-frontends/"
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/tuners"
cp drivers/media/tuners/*.h "${pkgdir}/usr/lib/modules/${_kernver}/build/drivers/media/tuners/"
# add xfs and shmem for aufs building
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/fs/xfs"
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build/mm"
# removed in 3.17 series
#cp fs/xfs/xfs_sb.h "${pkgdir}/usr/lib/modules/${_kernver}/build/fs/xfs/xfs_sb.h"
# copy in Kconfig files
for i in $(find . -name "Kconfig*"); do
mkdir -p "${pkgdir}"/usr/lib/modules/${_kernver}/build/`echo ${i} | sed 's|/Kconfig.*||'`
cp ${i} "${pkgdir}/usr/lib/modules/${_kernver}/build/${i}"
done
chown -R root.root "${pkgdir}/usr/lib/modules/${_kernver}/build"
find "${pkgdir}/usr/lib/modules/${_kernver}/build" -type d -exec chmod 755 {} \;
# strip scripts directory
find "${pkgdir}/usr/lib/modules/${_kernver}/build/scripts" -type f -perm -u+w 2>/dev/null | while read binary ; do
case "$(file -bi "${binary}")" in
*application/x-sharedlib*) # Libraries (.so)
/usr/bin/strip ${STRIP_SHARED} "${binary}";;
*application/x-archive*) # Libraries (.a)
/usr/bin/strip ${STRIP_STATIC} "${binary}";;
*application/x-executable*) # Binaries
/usr/bin/strip ${STRIP_BINARIES} "${binary}";;
esac
done
# remove unneeded architectures
rm -rf "${pkgdir}"/usr/lib/modules/${_kernver}/build/arch/{alpha,arm,arm26,arm64,avr32,blackfin,c6x,cris,frv,h8300,hexagon,ia64,m32r,m68k,m68knommu,mips,microblaze,mn10300,openrisc,parisc,powerpc,ppc,s390,score,sh,sh64,sparc,sparc64,tile,unicore32,um,v850,xtensa}
}
package_linux-gc-docs() {
pkgdesc="Kernel hackers manual - HTML documentation that comes with the linux-gc kernel"
depends=('linux-gc')
cd ${_srcname}
KARCH=x86
# get kernel version
_kernver="$(make LOCALVERSION= kernelrelease)"
_basekernel=${_kernver%%-*}
_basekernel=${_basekernel%.*}
mkdir -p "${pkgdir}/usr/lib/modules/${_kernver}/build"
cp -al Documentation "${pkgdir}/usr/lib/modules/${_kernver}/build"
find "${pkgdir}" -type f -exec chmod 444 {} \;
find "${pkgdir}" -type d -exec chmod 755 {} \;
# remove a file already in linux package
rm -f "${pkgdir}/usr/lib/modules/${_kernver}/build/Documentation/DocBook/Makefile"
}
sha512sums=('a87bbce3c0c6d810a41bbba1c0dcaae80dc38dded9f8571e97fa4ee5a468d655daf52d260911412f7c7da3171a5114e89d63da14b1753b9a3eb2cc38fd89b9ee'
'SKIP'
'954a3dba503b4699205462b1652bd7102fa00f6c742a7122d55c693a81248bcd18999281c3e611fd94923e9adda60422889c028c2fb798093408c07e33577ee4'
'd50d5c2e7955408ba98687265a33d62e15a3c6d4166c26cfd0e7b54623e247dd468134d7ae4fc5388b0e9bbbbec20832be11bc5db2565967d9e8b8118f1cabfc'
'383cd020ab882389731ef78abca727eccc8247ed82b95c89df93d7065bfde093b82e32190ad1fb29b37de35eb20b40339f2c02ad694a3978884255b193f5bc1a'
'f7bcb50e7de166e0d89194a3cad1feae99c4a5a9918e8af691d7635ed8ef64762ff2af4702dc6ba0eef0fc01ad75173abddbf01ae89bc6e03ace5e54f4098b12'
'1db70764577d3e8d5e65351bdef7f2cf61d2546138a6342c4bf4e5e6738b8e06b5291a9a0c12f9fc2c8cb620048006d05474cf75902cb26e7504038150cf0a44'
'0eaa8ffd523ec0cd101fb77f2686474fcae6a705ee457257d8eaf20a3da6af79180b225c157591f17bc55035cd94c9eae3c789f504bc9226efb5d3aaa569b229'
'790f82eb281d698db6d3b599a0dcece93345c183a6ebe4478d3e17fa916a2a6d763e89058543b32a87beddab37924078c618e8de1bd3cbcc0747be681be3349b'
'151f797ee9c7756bf711422e47482644072988803fa894e62d34ec8d85375e5097dbdc70eecfb7ac8b0d813c634e043a522dba6e3155424013537939cdc931da'
'76bf6a9f22b023ab8f780884f595dac1801d150ecd94f88da229c5c9ea98d2c3ef8add01ff7e18e4cbbfa5e6e9c022c4042ee62c779a8485203c1b0e082b8ccc'
'fadc871208943c485c96e19cf2d8565d7e71adc155dbc0eafbe06472f6a21f034ad4b39e0c5dc18caad897e9aa57b142b7169482ab9973686b2234344e0c9933'
'd9d28e02e964704ea96645a5107f8b65cae5f4fb4f537e224e5e3d087fd296cb770c29ac76e0ce95d173bc420ea87fb8f187d616672a60a0cae618b0ef15b8c8'
'b68b1fcd896f98dce22e9de167cf2d56085244ad365ff256121d489e0753f0cc46ad36729c21548bfa1e4a58558de5815bd2ae1e29831e4efa4597e9e4b87965'
'9f86c58a565248dbc9690b826515f0e73a85f533993626d063d29881308adc5916f37d896c1d43f290ef0b64903485f0740a9a375c12b29d5922a79ef128c251')
validpgpkeys=(
'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linus Torvalds
'647F28654894E3BD457199BE38DBBDC86092693E' # Greg Kroah-Hartman
)