[compilation de kernel] Utilisation d'un kernel homemade

Reconnaissance et configuration du matériel / kernel linux
5c2v
newbie
Messages : 6
Inscription : ven. 05 févr. 2010, 15:28

[compilation de kernel] Utilisation d'un kernel homemade

Message par 5c2v »

Bonjour à tous.

Récemment heureux propriétaire d'un Thinkpad x220, je me penche sur la question de l'économie d'énergie.

À cette fin, j'ai décidé d'essayer de recompiler mon kernel en appliquant le patch ASPM (dont il est question ici), en passant par ABS et suivant ces instructions(c'est la 1ère fois que j'essaye un tel truc)

La compilation et l'installation du noyau se passent sans soucis (c'était juste looong la 1ère fois, même avec le core i7 du x220).

J'ai suivi assez fidèlement le wiki et créé un paquet installant un noyau "linux-test". J'ai aussi modifié le grub.

Mais au lancement ca ne marche pas : ca s'arrête car

Code : Tout sélectionner

/lib/modules/3.1.5-1-ARCH/module.dep
est introuvable. Et pour cause, après une rapide inspection (et assez logiquement...) le dit fichier se trouve dans

Code : Tout sélectionner

/sys/modules/3.1.5-1-test/
Il me semble pourtant avoir tout fait comme il faut... quelqu'un a une idée ?

Merci d'avance !
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10711
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [compilation de kernel] Utilisation d'un kernel homemade

Message par FoolEcho »

5c2v a écrit :La compilation et l'installation du noyau se passent sans soucis (c'était juste looong la 1ère fois, même avec le core i7 du x220).
Tu as bien modifié MAKEFLAGS dans /etc/makepkg.conf ? (essaie avec -j5, 7 ou 9 par exemple, selon l'usage que tu fais à côté pour garder une machine réactive ou pas :) )

Autrement, quel est ton PKGBUILD, tu es parti d'un existant ?
«The following statement is not true. The previous statement is true.» :nage:
Avatar de l’utilisateur
drs
archer de cavalerie
Messages : 158
Inscription : ven. 15 sept. 2006, 06:47

Re: [compilation de kernel] Utilisation d'un kernel homemade

Message par drs »

peux-tu poster le PKGBUILD que tu as utilise ainsi que la configuration de ton bootloader?
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17577
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [compilation de kernel] Utilisation d'un kernel homemade

Message par benjarobin »

@FoolEcho Avec un Core i7 tu peux aller sans problème jusqu’à 10 si celui-ci possède l'hyperthreading

Pour information la compilation du kernel avec le PKGBUILD officiel et avec les FLAGS Cpu par défaut, je met moins de 15 minutes avec mon core i7 860.
Mais il est tout à fait possible de réduire drastiquement le temps de compilation en modifiant la configuration par défaut pour enlever tout ce que ton PC n'utilisera jamais
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10711
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

Re: [compilation de kernel] Utilisation d'un kernel homemade

Message par FoolEcho »

benjarobin a écrit :@FoolEcho Avec un Core i7 tu peux aller sans problème jusqu’à 10 si celui-ci possède l'hyperthreading
C'est le flag "ht" avec /proc/cpuinfo ? Si oui, faudra que j'essaie. :D
En général, j'utilise un MAKEFLAGS à 7 sur l'i7 que je passe éventuellement à 5 pour éviter quelques ralentissements du système (je fais parfois des trucs un peu plus lourds en même temps). Sur l'exemple du kernel, ça met une vingtaine de minutes.
benjarobin a écrit :Mais il est tout à fait possible de réduire drastiquement le temps de compilation en modifiant la configuration par défaut pour enlever tout ce que ton PC n'utilisera jamais
+1
Gentoo a de très bonnes docs là-dessus, logique (que je n'ai toujours pas épluché :roll: ... vu que je fais lâchement compiler le kernel-fbcondecor pour l'eeepc par l'i7 :mrgreen: ).
«The following statement is not true. The previous statement is true.» :nage:
5c2v
newbie
Messages : 6
Inscription : ven. 05 févr. 2010, 15:28

Re: [compilation de kernel] Utilisation d'un kernel homemade

Message par 5c2v »

Alors oui j'utilise bien tous mes coeurs (et aussi ccache qui aide pas mal).

Et voici mon PKGBUILD (désolé pour le pavé). Globalement, c'est le même que celui du noyau standard (j'ai copié-collé les fichiers depuis /var/abs/core/linux/)

Pour ce qui est des modifs, j'ai ajouté le patch que je souhaitais appliquer à la liste ("aspm.patch"), j'ai changé la variable pkgname par "linux-test" et la fonction package_linux par package_linux-test.

J'ai aussi décommenté la ligne xconfig et via l'outil j'ai réglé l'option "CONFIG_LOCAL_VERSION" à "-test".

Code : Tout sélectionner

# $Id: PKGBUILD 130991 2011-07-09 12:23:51Z thomas $
# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
# Maintainer: Thomas Baechler <thomas@archlinux.org>

pkgbase=linux
# pkgname=('linux' 'linux-headers' 'linux-docs') # Build stock -ARCH kernel
pkgname=linux-test       # Build kernel with a different name
_kernelname=${pkgname#linux}
_basekernel=3.1
pkgver=${_basekernel}.5
pkgrel=1
arch=('i686' 'x86_64')
url="http://www.kernel.org/"
license=('GPL2')
makedepends=('xmlto' 'docbook-xsl')
options=('!strip')
source=("http://www.kernel.org/pub/linux/kernel/v3.x/linux-3.1.tar.xz"
        "http://www.kernel.org/pub/linux/kernel/v3.x/patch-${pkgver}.xz"
        # the main kernel config files
        'config' 'config.x86_64'
        # standard config files for mkinitcpio ramdisk
        "${pkgname}.preset"
        'change-default-console-loglevel.patch'
        'i915-fix-ghost-tv-output.patch'
        'i915-fix-incorrect-error-message.patch'
        'usb-add-reset-resume-quirk-for-several-webcams.patch'
        'aspm.patch')
md5sums=('edbdc798f23ae0f8045c82f6fa22c536'
         '829f9aa6d1ec6a4d16506d118ab0703a'
         '47070529694fa61da900d87a8da379d4'
         'e182801f4f125a16f856e69aa490a46c'
         '905cb3dbc893a1f404eacc949b04b578'
         '9d3c56a4b999c8bfbd4018089a62f662'
         '263725f20c0b9eb9c353040792d644e5'
         'a50c9076012cb2dda49952dc6ec3e9c1'
         '52d41fa61e80277ace2b994412a0c856'
         'f76c1943d264d1886a45178671c9bc4b')

build() {
  cd "${srcdir}/linux-${_basekernel}"

  # add upstream patch
  patch -p1 -i "${srcdir}/patch-${pkgver}"

  # add latest fixes from stable queue, if needed
  # http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git

  # Some chips detect a ghost TV output
  # mailing list discussion: http://lists.freedesktop.org/archives/intel-gfx/2011-April/010371.html
  # Arch Linux bug report: FS#19234
  #
  # It is unclear why this patch wasn't merged upstream, it was accepted,
  # then dropped because the reasoning was unclear. However, it is clearly
  # needed.
  patch -Np1 -i "${srcdir}/i915-fix-ghost-tv-output.patch"

  # In 3.1.1, a DRM_DEBUG message is falsely declared as DRM_ERROR. This
  # worries users, as this message is displayed even at loglevel 4. Fix
  # this.
  patch -Np1 -i "${srcdir}/i915-fix-incorrect-error-message.patch"

  # Add the USB_QUIRK_RESET_RESUME for several webcams
  # FS#26528
  patch -Np1 -i "${srcdir}/usb-add-reset-resume-quirk-for-several-webcams.patch"

  # 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)
  patch -Np1 -i "${srcdir}/change-default-console-loglevel.patch"

  patch -p1 -i "${srcdir}/aspm.patch"

  if [ "${CARCH}" = "x86_64" ]; then
    cat "${srcdir}/config.x86_64" > ./.config
  else
    cat "${srcdir}/config" > ./.config
  fi

  if [ "${_kernelname}" != "" ]; then
    sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config
  fi

  # set extraversion to pkgrel
  sed -ri "s|^(EXTRAVERSION =).*|\1 -${pkgrel}|" Makefile

  # get kernel version
  make prepare

  # load configuration
  # Configure the kernel. Replace the line below with one of your choice.
  #make menuconfig # CLI menu for configuration
  #make nconfig # new CLI menu for configuration
  make xconfig # X-based configuration
  #make oldconfig # using old config from previous kernel version
  # ... or manually edit .config

  ####################
  # stop here
  # this is useful to configure the kernel
  #msg "Stopping build"
  #return 1
  ####################

  yes "" | make config

  # build!
  make ${MAKEFLAGS} bzImage modules
}

package_linux-test() {
  pkgdesc="The Linux Kernel and modules"
  groups=('base')
  depends=('coreutils' 'linux-firmware' 'module-init-tools>=3.16' 'mkinitcpio>=0.7')
  optdepends=('crda: to set the correct wireless channels of your country')
  #provides=('kernel26')
  #conflicts=('kernel26')
  #replaces=('kernel26')
  backup=("etc/mkinitcpio.d/${pkgname}.preset")
  install=${pkgname}.install

  cd "${srcdir}/linux-${_basekernel}"

  KARCH=x86

  # get kernel version
  _kernver="$(make kernelrelease)"

  mkdir -p "${pkgdir}"/{lib/modules,lib/firmware,boot}
  make INSTALL_MOD_PATH="${pkgdir}" modules_install
  cp arch/$KARCH/boot/bzImage "${pkgdir}/boot/vmlinuz-${pkgname}"

  # add vmlinux
  install -D -m644 vmlinux "${pkgdir}/usr/src/linux-${_kernver}/vmlinux"

  # install fallback mkinitcpio.conf file and preset file for kernel
  install -D -m644 "${srcdir}/${pkgname}.preset" "${pkgdir}/etc/mkinitcpio.d/${pkgname}.preset"

  # set correct depmod command for install
  sed \
    -e  "s/KERNEL_NAME=.*/KERNEL_NAME=${_kernelname}/g" \
    -e  "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/g" \
    -i "${startdir}/${pkgname}.install"
  sed \
    -e "s|ALL_kver=.*|ALL_kver=\"/boot/vmlinuz-${pkgname}\"|g" \
    -e "s|default_image=.*|default_image=\"/boot/initramfs-${pkgname}.img\"|g" \
    -e "s|fallback_image=.*|fallback_image=\"/boot/initramfs-${pkgname}-fallback.img\"|g" \
    -i "${pkgdir}/etc/mkinitcpio.d/${pkgname}.preset"

  # remove build and source links
  rm -f "${pkgdir}"/lib/modules/${_kernver}/{source,build}
  # remove the firmware
  rm -rf "${pkgdir}/lib/firmware"
  # gzip -9 all modules to save 100MB of space
  find "${pkgdir}" -name '*.ko' -exec gzip -9 {} \;
  # make room for external modules
  ln -s "../extramodules-${_basekernel}${_kernelname:--ARCH}" "${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:--ARCH}"
  echo "${_kernver}" > "${pkgdir}/lib/modules/extramodules-${_basekernel}${_kernelname:--ARCH}/version"
}

package_linux-headers() {
  pkgdesc="Header files and scripts for building modules for linux kernel"
  provides=('kernel26-headers')
  conflicts=('kernel26-headers')
  replaces=('kernel26-headers')

  mkdir -p "${pkgdir}/lib/modules/${_kernver}"

  cd "${pkgdir}/lib/modules/${_kernver}"
  ln -sf ../../../usr/src/linux-${_kernver} build

  cd "${srcdir}/linux-${_basekernel}"
  install -D -m644 Makefile \
    "${pkgdir}/usr/src/linux-${_kernver}/Makefile"
  install -D -m644 kernel/Makefile \
    "${pkgdir}/usr/src/linux-${_kernver}/kernel/Makefile"
  install -D -m644 .config \
    "${pkgdir}/usr/src/linux-${_kernver}/.config"

  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/include"

  for i in acpi asm-generic config crypto drm generated linux math-emu \
    media net pcmcia scsi sound trace video xen; do
    cp -a include/${i} "${pkgdir}/usr/src/linux-${_kernver}/include/"
  done

  # copy arch includes for external modules
  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/arch/x86"
  cp -a arch/x86/include "${pkgdir}/usr/src/linux-${_kernver}/arch/x86/"

  # copy files necessary for later builds, like nvidia and vmware
  cp Module.symvers "${pkgdir}/usr/src/linux-${_kernver}"
  cp -a scripts "${pkgdir}/usr/src/linux-${_kernver}"

  # fix permissions on scripts dir
  chmod og-w -R "${pkgdir}/usr/src/linux-${_kernver}/scripts"
  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/.tmp_versions"

  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/kernel"

  cp arch/${KARCH}/Makefile "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/"

  if [ "${CARCH}" = "i686" ]; then
    cp arch/${KARCH}/Makefile_32.cpu "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/"
  fi

  cp arch/${KARCH}/kernel/asm-offsets.s "${pkgdir}/usr/src/linux-${_kernver}/arch/${KARCH}/kernel/"

  # add headers for lirc package
  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video"

  cp drivers/media/video/*.h  "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/"

  for i in bt8xx cpia2 cx25840 cx88 em28xx et61x251 pwc saa7134 sn9c102; do
    mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/${i}"
    cp -a drivers/media/video/${i}/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/${i}"
  done

  # add docbook makefile
  install -D -m644 Documentation/DocBook/Makefile \
    "${pkgdir}/usr/src/linux-${_kernver}/Documentation/DocBook/Makefile"

  # add dm headers
  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/md"
  cp drivers/md/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/md"

  # add inotify.h
  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/include/linux"
  cp include/linux/inotify.h "${pkgdir}/usr/src/linux-${_kernver}/include/linux/"

  # add wireless headers
  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/net/mac80211/"
  cp net/mac80211/*.h "${pkgdir}/usr/src/linux-${_kernver}/net/mac80211/"

  # add dvb headers for external modules
  # in reference to:
  # http://bugs.archlinux.org/task/9912
  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-core"
  cp drivers/media/dvb/dvb-core/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-core/"
  # and...
  # http://bugs.archlinux.org/task/11194
  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/include/config/dvb/"
  cp include/config/dvb/*.h "${pkgdir}/usr/src/linux-${_kernver}/include/config/dvb/"

  # add dvb headers for http://mcentral.de/hg/~mrec/em28xx-new
  # in reference to:
  # http://bugs.archlinux.org/task/13146
  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
  cp drivers/media/dvb/frontends/lgdt330x.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
  cp drivers/media/video/msp3400-driver.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"

  # add dvb headers
  # in reference to:
  # http://bugs.archlinux.org/task/20402
  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-usb"
  cp drivers/media/dvb/dvb-usb/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-usb/"
  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends"
  cp drivers/media/dvb/frontends/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/"
  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/common/tuners"
  cp drivers/media/common/tuners/*.h "${pkgdir}/usr/src/linux-${_kernver}/drivers/media/common/tuners/"

  # add xfs and shmem for aufs building
  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/fs/xfs"
  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}/mm"
  cp fs/xfs/xfs_sb.h "${pkgdir}/usr/src/linux-${_kernver}/fs/xfs/xfs_sb.h"

  # copy in Kconfig files
  for i in `find . -name "Kconfig*"`; do
    mkdir -p "${pkgdir}"/usr/src/linux-${_kernver}/`echo ${i} | sed 's|/Kconfig.*||'`
    cp ${i} "${pkgdir}/usr/src/linux-${_kernver}/${i}"
  done

  chown -R root.root "${pkgdir}/usr/src/linux-${_kernver}"
  find "${pkgdir}/usr/src/linux-${_kernver}" -type d -exec chmod 755 {} \;

  # strip scripts directory
  find "${pkgdir}/usr/src/linux-${_kernver}/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/src/linux-${_kernver}/arch/{alpha,arm,arm26,avr32,blackfin,cris,frv,h8300,ia64,m32r,m68k,m68knommu,mips,microblaze,mn10300,parisc,powerpc,ppc,s390,sh,sh64,sparc,sparc64,um,v850,xtensa}
}

package_linux-docs() {
  pkgdesc="Kernel hackers manual - HTML documentation that comes with the Linux kernel."
  provides=('kernel26-docs')
  conflicts=('kernel26-docs')
  replaces=('kernel26-docs')

  cd "${srcdir}/linux-${_basekernel}"

  mkdir -p "${pkgdir}/usr/src/linux-${_kernver}"
  cp -al Documentation "${pkgdir}/usr/src/linux-${_kernver}"
  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/src/linux-${_kernver}/Documentation/DocBook/Makefile"
}

Avatar de l’utilisateur
drs
archer de cavalerie
Messages : 158
Inscription : ven. 15 sept. 2006, 06:47

Re: [compilation de kernel] Utilisation d'un kernel homemade

Message par drs »

J'ai aussi décommenté la ligne xconfig et via l'outil j'ai réglé l'option "CONFIG_LOCAL_VERSION" à "-test".
ce n'est pas necessaire puisque c'est deja pris en charge par:

Code : Tout sélectionner

if [ "${_kernelname}" != "" ]; then
  sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"${_kernelname}\"|g" ./.config
fi
sinon, tu peux poster la configuration de ton bootloader? pour ton probleme, je pencherais pour un ramdisk qui ne correspond pas au kernel...
5c2v
newbie
Messages : 6
Inscription : ven. 05 févr. 2010, 15:28

Re: [compilation de kernel] Utilisation d'un kernel homemade

Message par 5c2v »

Ok, merci pour cette précision.

En effet, le problème venait de mon bootloader où j'avais laissé vmzlinuz-linux au lieux d'utiliser vmzinuz-linux-test... :oops:

Désolé pour le problème idiot et merci pour les conseils !

Plus qu'à benchmarker un peu tout ca maintenant (j'étais à 16.6 watts avant).
Répondre