La compilación estable más reciente de Linux: no puede representar un cambio en vmlinux-gdb.py:

5 minutos de lectura

Avatar de usuario de Fabby
Fabby

La cuestión:

  • Han pasado 20 años desde:
    • La última vez que escribí > 1K de código C
    • compilado cualquier cosa> 10K líneas fuente
  • El soporte de mi Distro actual (Ubuntu 16.04) para un 0cf3:e300 Atheros Communications, Inc. El controlador WiFi es pésimo: 8-12 Mbps es lo mejor que obtengo.

Lo que sé sobre las prioridades de la versión del kernel:

  1. Use el kernel de su propia distribución (fuera de discusión: demasiado lento)
  2. Usa lo último kernel estable
  3. Usa el kernel LTS más reciente

Lo que he probado:

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
git checkout -b stable v5.1.2
cp /boot/config-`uname -r` .config
yes '' | make oldconfig
make -j `getconf _NPROCESSORS_ONLN\' deb-pkg LOCALVERSION=-fab

Lo cual me da el siguiente error:

dpkg-source: error: cannot represent change to vmlinux-gdb.py:
dpkg-source: error:   new version is symlink to /home/fab-user/Documents/Source/linux/scripts/gdb/vmlinux-gdb.py
dpkg-source: error:   old version is nonexistent

en la siguiente salida completa:

make -j `getconf _NPROCESSORS_ONLN` deb-pkg LOCALVERSION=-fab
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/confdata.o
  HOSTCC  scripts/kconfig/expr.o
  LEX     scripts/kconfig/lexer.lex.c
  YACC    scripts/kconfig/parser.tab.h
  YACC    scripts/kconfig/parser.tab.c
  HOSTCC  scripts/kconfig/preprocess.o
  HOSTCC  scripts/kconfig/symbol.o
  HOSTCC  scripts/kconfig/lexer.lex.o
  HOSTCC  scripts/kconfig/parser.tab.o
  HOSTLD  scripts/kconfig/conf
scripts/kconfig/conf  --syncconfig Kconfig
  UPD     include/config/kernel.release
make clean
/bin/bash ./scripts/package/mkdebian
  TAR     linux-5.1.2-fab.tar.gz
origversion=$(dpkg-parsechangelog -SVersion |sed 's/-[^-]*$//');\
    mv linux-5.1.2-fab.tar.gz ../linux-5.1.2-fab_${origversion}.orig.tar.gz
dpkg-buildpackage -r"fakeroot -u" -a$(cat debian/arch)  -i.git -us -uc
dpkg-buildpackage: source package linux-5.1.2-fab
dpkg-buildpackage: source version 5.1.2-fab-1
dpkg-buildpackage: source distribution xenial
dpkg-buildpackage: source changed by fab-user <fab-user@fab-ux-predator>
dpkg-buildpackage: host architecture amd64
 dpkg-source -i.git --before-build linux
 fakeroot -u debian/rules clean
rm -rf debian/*tmp debian/files
make clean
 dpkg-source -i.git -b linux
dpkg-source: info: using source format '1.0'
dpkg-source: warning: source directory 'linux' is not <sourcepackage>-<upstreamversion> 'linux-5.1.2-fab-5.1.2-fab'
dpkg-source: warning: .orig directory name linux.orig is not <package>-<upstreamversion> (wanted linux-5.1.2-fab-5.1.2-fab.orig)
dpkg-source: info: building linux-5.1.2-fab using existing linux-5.1.2-fab_5.1.2-fab.orig.tar.gz
dpkg-source: info: building linux-5.1.2-fab in linux-5.1.2-fab_5.1.2-fab-1.diff.gz
dpkg-source: error: cannot represent change to vmlinux-gdb.py:
dpkg-source: error:   new version is symlink to /home/fab-user/Documents/Source/linux/scripts/gdb/vmlinux-gdb.py
dpkg-source: error:   old version is nonexistent
dpkg-source: warning: ignoring deletion of file .scmversion, use --include-removal to override
dpkg-source: error: cannot represent change to linux-5.1.1-fab.tar.gz: binary file contents changed
dpkg-source: warning: the diff modifies the following upstream files: 
 .clang-format
 .cocciconfig
 .config.old
 .get_maintainer.ignore
 .mailmap
 .version
 CREDITS
 LICENSES/exceptions/GCC-exception-2.0
 LICENSES/exceptions/Linux-syscall-note
 LICENSES/other/Apache-2.0
 LICENSES/other/CDDL-1.0
 LICENSES/other/GPL-1.0
 LICENSES/other/ISC
 LICENSES/other/Linux-OpenIB
 LICENSES/other/MPL-1.1
 LICENSES/other/X11
 LICENSES/preferred/BSD-2-Clause
 LICENSES/preferred/BSD-3-Clause
 LICENSES/preferred/BSD-3-Clause-Clear
 LICENSES/preferred/GPL-2.0
 LICENSES/preferred/LGPL-2.0
 LICENSES/preferred/LGPL-2.1
 LICENSES/preferred/MIT
 MAINTAINERS
 Module.symvers
 README
dpkg-source: info: use the '3.0 (quilt)' format to have separate and documented changes to upstream files, see dpkg-source(1)
dpkg-source: error: unrepresentable changes to source
dpkg-buildpackage: error: dpkg-source -i.git -b linux gave error exit status 1
scripts/package/Makefile:70: recipe for target 'deb-pkg' failed
make[1]: *** [deb-pkg] Error 1
Makefile:1396: recipe for target 'deb-pkg' failed
make: *** [deb-pkg] Error 2

así que terminé haciendo:

git checkout -b v4.19.38 v4.19.38

lo que me da hasta 10 MB/S en lugar de los 12 Mbps del kernel estándar de mi distribución, y funciona muy bien, pero necesito reiniciar mi máquina cada 24 horas si quiero mantener la velocidad máxima del controlador WiFi.

La pregunta:

¿Estoy condenado a quedarme el 4.19.38?
¿Hay alguna manera de hacer que las versiones 4.19.39-5.12 funcionen de forma permanente?

Simplemente eliminando el vmlinux-pdb.py enlace simbólico a scripts/gdb/vmlinux-gdb.py resolvió el problema para mí.

Entonces, en el directorio raíz de las fuentes del kernel, haga

$ rm vmlinux-gdb.py

Ver también https://www.spinics.net/lists/linux-kbuild/msg18761.html

  • Me tomó un tiempo probarlo: voté a favor el día que publicaste y acepté ahora… 0:-)

    – fabby

    2 de noviembre de 2019 a las 10:07


  • Esta respuesta no funcionó para mí, pero la respuesta de @Tim Richardson parece ser correcta: el problema está relacionado con un problema de repositorio sucio. En este caso, eliminar el script podría ayudar, pero no siempre. Es mejor asegurarse de que el repositorio de git esté “limpio”.

    – djonda

    2 de febrero de 2021 a las 18:53

Avatar de usuario de Tim Richardson
tim richardson

Me encontré con este problema al intentar compilar desde el repositorio de git de ubuntu.

scripts/gdb/vmlinux-gdb.py 

es un síntoma de que quedan archivos de una compilación anterior. Incluso después de deshacerse de él, es posible que se encuentre con más errores (tuve que eliminar el tarball de origen de Linux a continuación).

hacer

git status

para ver una serie de archivos sin seguimiento. Deshacerse de ellos es el objetivo.

En lugar de buscar los archivos uno por uno, un juego de golpear un topo, más fácil es

  • Comprométete con todo lo que necesites

  • eliminar archivos que no son rastreados por git

haciendo

git clean -r

y ejecute esto en la parte superior del árbol de fuentes.

entonces intenta compilar

Simplemente puede tomar el controlador precompilado del núcleo anterior y forzarlo en el nuevo kernel con -f parámetro. Simplemente obtendrá un mensaje de “núcleo corrupto” en journalctl pero puedes ignorarlo.

Siempre y cuando el ITB no cambia usted debe ser bueno para ir.

  • @Fabby ¡Estoy de acuerdo en que es una solución más elegante!

    – WinEunuuchs2Unix

    2 de noviembre de 2019 a las 16:35

Me encontré con este problema al intentar compilar desde el repositorio de git de ubuntu.

scripts/gdb/vmlinux-gdb.py

Como dijo correctamente @Tim Richardson, es un síntoma de que quedan archivos de una compilación anterior. Sin embargo, no existe la opción “-r” para “git clean”.

git clean -f

trabajó para mi

¿Ha sido útil esta solución?