Problemas compilación de un sólo módulo (warning **** undefined!)

7 envíos / 0 nuevos
Último envío
#1 Dom, 03/11/2019 - 20:07
empanada
Imagen de empanada
Desconectado/a
se unió: 05/11/16

Problemas compilación de un sólo módulo (warning **** undefined!)

Buenas.

En un portatil Lenovo MiiX 320 me he encontrado un acelerómetro ST Microelectronics cuyo driver, aunque está en las fuentes del kernel, no está compilado por defecto en Debian (si en Ubuntu).

Una de las opciones es instalar las fuentes del kernel y recompilar el nucleo completo (partiendo del .config actual, simplemente añadiendo el módulo deseado como "M"). Hasta aquí todo correcto: la compilación se realiza correctamente y se generan los paquetes *.deb correctamente.

Pero también hay otra manera mas elegante de no comerse una compilación completa : compilar sólo el/los módulos necesarios. Esta opción no la he logrado aún.

Durante la compilación de los módulos que necesito, salen varios "warning **** undefined!!" 

A decir verdad, la compilación, e incluso la instalación, llegan a término, pero con los warning durante compilación y con los warning de "undefined symbol" durante la instalación en /lib/modules/.

Los warning evidentemente no auguran nada bueno, y en el momento de la carga del módulo (el momento de la verdad), de nuevo "undefined symbol".

Lo curioso es que sólamente los módulos que me interesa compilar de ese directorio (drivers/iio/accel) fallan : los drivers marcados por defecto por el kernel como  "M", o un par de ellos al azar que he activado (mc3230 y stk8312) como "M" se cargan correctamente.

En la doc del kernel se habla explícitamente de los warnings por funciones undefined : Building External Modules , en el capítulo "6.3 Symbols From Another External Module" pero no se como aplicar a mi caso alguna de las tres técnicas que describe.

A continuación los detalles.

# uname -r -v
4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u1 (2019-09-20)
# dpkg -l|grep linux-source-4.19

ii linux-source-4.19 4.19.67-2+deb10u1 all Linux kernel source for version 4.19 with Debian patches

 

# dpkg -l|grep linux-headers-4.19

ii linux-headers-4.19.0-6-amd64 4.19.67-2+deb10u1 amd64 Header files for Linux 4.19.0-6-amd64

El kernel en ejecución es el mismo que las cabeceras y las fuentes.

 

- Verificar dependencias de los módulos a compilar

Sección en /usr/src/linux-source-4.19/drivers/iio/accel/Kconfig dedicada a los módulos de ST Microelectronics (ST_ACCEL*):

config IIO_ST_ACCEL_3AXIS

tristate "STMicroelectronics accelerometers 3-Axis Driver"

depends on (I2C || SPI_MASTER) && SYSFS

depends on !SENSORS_LIS3_I2C

depends on !SENSORS_LIS3_SPI

select IIO_ST_SENSORS_CORE

select IIO_ST_ACCEL_I2C_3AXIS if (I2C)

select IIO_ST_ACCEL_SPI_3AXIS if (SPI_MASTER)

select IIO_TRIGGERED_BUFFER if (IIO_BUFFER)

help

Say yes here to build support for STMicroelectronics accelerometers:

LSM303DLH, LSM303DLHC, LIS3DH, LSM330D, LSM330DL, LSM330DLC,

LIS331DLH, LSM303DL, LSM303DLM, LSM330, LIS2DH12, H3LIS331DL,

LNG2DM

 

This driver can also be built as a module. If so, these modules

will be created:

- st_accel (core functions for the driver [it is mandatory]);

- st_accel_i2c (necessary for the I2C devices [optional*]);

- st_accel_spi (necessary for the SPI devices [optional*]);

 

(*) one of these is necessary to do something.

 

config IIO_ST_ACCEL_I2C_3AXIS

tristate

depends on IIO_ST_ACCEL_3AXIS

depends on IIO_ST_SENSORS_I2C

 

config IIO_ST_ACCEL_SPI_3AXIS

tristate

depends on IIO_ST_ACCEL_3AXIS

depends on IIO_ST_SENSORS_SPI

 

- Comprobar que en el kernel actual las dependencias se cumplen (I2C, SPI_MASTER y SYSFS):

# cat /boot/config-$(uname -r) |grep CONFIG_I2C=
CONFIG_I2C=y

# cat /boot/config-$(uname -r) |grep CONFIG_SPI_MASTER=
CONFIG_SPI_MASTER=y

# cat /boot/config-$(uname -r) |grep CONFIG_SYSFS=
CONFIG_SYSFS=y

 

Se copian en el directorio de las fuentes varios archivos necesarios

# cd /usr/src/linux-source-4.19

# mkdir include/config

# cp /usr/src/linux-headers-$(uname -r)/include/config/kernel.release include/config/

# cp /usr/src/linux-headers-$(uname -r)/Module.symvers .

# cp /boot/System.map-$(uname -r) System.map

 

Se edita Makefile para que coincida la versión del kernel en ejecución con la de las fuentes:

# nano Makefile

# cat Makefile|grep "SUBLEVEL ="

SUBLEVEL = 0-6-amd64

 

Se copia la configuración del kernel en ejecución y se edita con make menuvconfig para marcar como “M” “STMicroelectronics accelerometers 3-Axis Driver” , en el menú Drivers→Industrial IO → Accelerometers

# cp /boot/config-$(uname -r) .config

# make menuconfig

HOSTCC scripts/basic/fixdep
UPD scripts/kconfig/.mconf-cfg
HOSTCC scripts/kconfig/mconf.o
YACC scripts/kconfig/zconf.tab.c
LEX scripts/kconfig/zconf.lex.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTCC scripts/kconfig/lxdialog/checklist.o
HOSTCC scripts/kconfig/lxdialog/inputbox.o
HOSTCC scripts/kconfig/lxdialog/menubox.o
HOSTCC scripts/kconfig/lxdialog/textbox.o
HOSTCC scripts/kconfig/lxdialog/util.o
HOSTCC scripts/kconfig/lxdialog/yesno.o
HOSTLD scripts/kconfig/mconf
scripts/kconfig/mconf Kconfig
*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.

 

# make scripts
HOSTCC scripts/kconfig/conf.o
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf --syncconfig Kconfig
WRAP arch/x86/include/generated/uapi/asm/bpf_perf_event.h
WRAP arch/x86/include/generated/uapi/asm/poll.h
WRAP arch/x86/include/generated/asm/dma-contiguous.h
WRAP arch/x86/include/generated/asm/early_ioremap.h
WRAP arch/x86/include/generated/asm/export.h
WRAP arch/x86/include/generated/asm/mcs_spinlock.h
WRAP arch/x86/include/generated/asm/mm-arch-hooks.h
HOSTCC scripts/genksyms/genksyms.o
YACC scripts/genksyms/parse.tab.c
HOSTCC scripts/genksyms/parse.tab.o
LEX scripts/genksyms/lex.lex.c
YACC scripts/genksyms/parse.tab.h
HOSTCC scripts/genksyms/lex.lex.o
HOSTLD scripts/genksyms/genksyms
CC scripts/mod/empty.o
HOSTCC scripts/mod/mk_elfconfig
MKELF scripts/mod/elfconfig.h
HOSTCC scripts/mod/modpost.o
CC scripts/mod/devicetable-offsets.s
UPD scripts/mod/devicetable-offsets.h
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/sumversion.o
HOSTLD scripts/mod/modpost
HOSTCC scripts/selinux/genheaders/genheaders
HOSTCC scripts/selinux/mdp/mdp
HOSTCC scripts/bin2c
HOSTCC scripts/kallsyms
HOSTCC scripts/conmakehash
HOSTCC scripts/recordmcount
HOSTCC scripts/sortextable
HOSTCC scripts/asn1_compiler
HOSTCC scripts/sign-file
HOSTCC scripts/extract-cert

 

# make prepare
SYSTBL arch/x86/include/generated/asm/syscalls_32.h
SYSHDR arch/x86/include/generated/asm/unistd_32_ia32.h
SYSHDR arch/x86/include/generated/asm/unistd_64_x32.h
SYSTBL arch/x86/include/generated/asm/syscalls_64.h
HYPERCALLS arch/x86/include/generated/asm/xen-hypercalls.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_32.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_64.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_x32.h
HOSTCC arch/x86/tools/relocs_32.o
HOSTCC arch/x86/tools/relocs_64.o
HOSTCC arch/x86/tools/relocs_common.o
HOSTLD arch/x86/tools/relocs
UPD include/config/kernel.release
expr: argument non entier
UPD include/generated/uapi/linux/version.h
UPD include/generated/utsrelease.h
UPD include/generated/package.h
CC kernel/bounds.s
UPD include/generated/bounds.h
UPD include/generated/timeconst.h
CC arch/x86/kernel/asm-offsets.s
UPD include/generated/asm-offsets.h
CALL scripts/checksyscalls.sh
DESCEND objtool
HOSTCC /usr/src/linux-source-4.19/tools/objtool/fixdep.o
HOSTLD /usr/src/linux-source-4.19/tools/objtool/fixdep-in.o
LINK /usr/src/linux-source-4.19/tools/objtool/fixdep
CC /usr/src/linux-source-4.19/tools/objtool/exec-cmd.o
CC /usr/src/linux-source-4.19/tools/objtool/help.o
CC /usr/src/linux-source-4.19/tools/objtool/pager.o
CC /usr/src/linux-source-4.19/tools/objtool/parse-options.o
CC /usr/src/linux-source-4.19/tools/objtool/run-command.o
CC /usr/src/linux-source-4.19/tools/objtool/sigchain.o
CC /usr/src/linux-source-4.19/tools/objtool/subcmd-config.o
LD /usr/src/linux-source-4.19/tools/objtool/libsubcmd-in.o
AR /usr/src/linux-source-4.19/tools/objtool/libsubcmd.a
GEN /usr/src/linux-source-4.19/tools/objtool/arch/x86/lib/inat-tables.c
CC /usr/src/linux-source-4.19/tools/objtool/arch/x86/decode.o
LD /usr/src/linux-source-4.19/tools/objtool/arch/x86/objtool-in.o
CC /usr/src/linux-source-4.19/tools/objtool/builtin-check.o
CC /usr/src/linux-source-4.19/tools/objtool/builtin-orc.o
CC /usr/src/linux-source-4.19/tools/objtool/check.o
CC /usr/src/linux-source-4.19/tools/objtool/orc_gen.o
CC /usr/src/linux-source-4.19/tools/objtool/orc_dump.o
CC /usr/src/linux-source-4.19/tools/objtool/elf.o
CC /usr/src/linux-source-4.19/tools/objtool/special.o
CC /usr/src/linux-source-4.19/tools/objtool/objtool.o
CC /usr/src/linux-source-4.19/tools/objtool/libstring.o
CC /usr/src/linux-source-4.19/tools/objtool/str_error_r.o
LD /usr/src/linux-source-4.19/tools/objtool/objtool-in.o
LINK /usr/src/linux-source-4.19/tools/objtool/objtool
# make modules_prepare

expr: argument non entier
CALL scripts/checksyscalls.sh
DESCEND objtool

 

Se compila el directorio completo (aunque se puede editar drivers/iio/accel/Makefile para compilar solamente los archivos relacionados con el driver que nos interesa(los warning y el resultado final no cambian)). Ya se ven los WARNING *** undefined!

# make -C . M=drivers/iio/accel
make : on entre dans le répertoire «/usr/src/linux-source-4.19»
CC [M] drivers/iio/accel/bmc150-accel-core.o
CC [M] drivers/iio/accel/bmc150-accel-i2c.o
CC [M] drivers/iio/accel/bmc150-accel-spi.o
CC [M] drivers/iio/accel/hid-sensor-accel-3d.o
CC [M] drivers/iio/accel/kxcjk-1013.o
CC [M] drivers/iio/accel/mc3230.o
CC [M] drivers/iio/accel/mma9551_core.o
CC [M] drivers/iio/accel/mma9551.o
CC [M] drivers/iio/accel/mma9553.o
CC [M] drivers/iio/accel/stk8312.o
CC [M] drivers/iio/accel/st_accel_core.o
CC [M] drivers/iio/accel/st_accel_buffer.o
LD [M] drivers/iio/accel/st_accel.o
CC [M] drivers/iio/accel/st_accel_i2c.o
CC [M] drivers/iio/accel/st_accel_spi.o
Building modules, stage 2.
MODPOST 13 modules
WARNING: "st_sensors_spi_configure" [drivers/iio/accel/st_accel_spi.ko] undefined!
WARNING: "st_sensors_i2c_configure" [drivers/iio/accel/st_accel_i2c.ko] undefined!
WARNING: "st_sensors_set_dataready_irq" [drivers/iio/accel/st_accel.ko] undefined!
WARNING: "st_sensors_power_enable" [drivers/iio/accel/st_accel.ko] undefined!
WARNING: "st_sensors_set_enable" [drivers/iio/accel/st_accel.ko] undefined!
WARNING: "st_sensors_trigger_handler" [drivers/iio/accel/st_accel.ko] undefined!
WARNING: "st_sensors_deallocate_trigger" [drivers/iio/accel/st_accel.ko] undefined!
WARNING: "st_sensors_sysfs_sampling_frequency_avail" [drivers/iio/accel/st_accel.ko] undefined!
WARNING: "st_sensors_allocate_trigger" [drivers/iio/accel/st_accel.ko] undefined!
WARNING: "st_sensors_set_fullscale_by_gain" [drivers/iio/accel/st_accel.ko] undefined!
WARNING: "st_sensors_check_device_support" [drivers/iio/accel/st_accel.ko] undefined!
WARNING: "st_sensors_validate_device" [drivers/iio/accel/st_accel.ko] undefined!
WARNING: "st_sensors_power_disable" [drivers/iio/accel/st_accel.ko] undefined!
WARNING: "st_sensors_init_sensor" [drivers/iio/accel/st_accel.ko] undefined!
WARNING: "st_sensors_debugfs_reg_access" [drivers/iio/accel/st_accel.ko] undefined!
WARNING: "st_sensors_set_odr" [drivers/iio/accel/st_accel.ko] undefined!
WARNING: "st_sensors_sysfs_scale_avail" [drivers/iio/accel/st_accel.ko] undefined!
WARNING: "st_sensors_set_axis_enable" [drivers/iio/accel/st_accel.ko] undefined!
WARNING: "st_sensors_read_info_raw" [drivers/iio/accel/st_accel.ko] undefined!
CC drivers/iio/accel/bmc150-accel-core.mod.o
LD [M] drivers/iio/accel/bmc150-accel-core.ko
CC drivers/iio/accel/bmc150-accel-i2c.mod.o
LD [M] drivers/iio/accel/bmc150-accel-i2c.ko
CC drivers/iio/accel/bmc150-accel-spi.mod.o
LD [M] drivers/iio/accel/bmc150-accel-spi.ko
CC drivers/iio/accel/hid-sensor-accel-3d.mod.o
LD [M] drivers/iio/accel/hid-sensor-accel-3d.ko
CC drivers/iio/accel/kxcjk-1013.mod.o
LD [M] drivers/iio/accel/kxcjk-1013.ko
CC drivers/iio/accel/mc3230.mod.o
LD [M] drivers/iio/accel/mc3230.ko
CC drivers/iio/accel/mma9551.mod.o
LD [M] drivers/iio/accel/mma9551.ko
CC drivers/iio/accel/mma9551_core.mod.o
LD [M] drivers/iio/accel/mma9551_core.ko
CC drivers/iio/accel/mma9553.mod.o
LD [M] drivers/iio/accel/mma9553.ko
CC drivers/iio/accel/st_accel.mod.o
LD [M] drivers/iio/accel/st_accel.ko
CC drivers/iio/accel/st_accel_i2c.mod.o
LD [M] drivers/iio/accel/st_accel_i2c.ko
CC drivers/iio/accel/st_accel_spi.mod.o
LD [M] drivers/iio/accel/st_accel_spi.ko
CC drivers/iio/accel/stk8312.mod.o
LD [M] drivers/iio/accel/stk8312.ko
make : on quitte le répertoire « /usr/src/linux-source-4.19 »

 

Al instalar, depmod nos da warning’s de “undefined symbol”

# make -C . M=drivers/iio/accel modules_install
make : on entre dans le répertoire « /usr/src/linux-source-4.19 »
INSTALL drivers/iio/accel/bmc150-accel-core.ko
INSTALL drivers/iio/accel/bmc150-accel-i2c.ko
INSTALL drivers/iio/accel/bmc150-accel-spi.ko
INSTALL drivers/iio/accel/hid-sensor-accel-3d.ko
INSTALL drivers/iio/accel/kxcjk-1013.ko
INSTALL drivers/iio/accel/mc3230.ko
INSTALL drivers/iio/accel/mma9551.ko
INSTALL drivers/iio/accel/mma9551_core.ko
INSTALL drivers/iio/accel/mma9553.ko
INSTALL drivers/iio/accel/st_accel.ko
INSTALL drivers/iio/accel/st_accel_i2c.ko
INSTALL drivers/iio/accel/st_accel_spi.ko
INSTALL drivers/iio/accel/stk8312.ko
DEPMOD 4.19.0-6-amd64
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel_i2c.ko needs unknown symbol st_sensors_i2c_configure
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel.ko needs unknown symbol st_sensors_read_info_raw
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel.ko needs unknown symbol st_sensors_set_axis_enable
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel.ko needs unknown symbol st_sensors_sysfs_scale_avail
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel.ko needs unknown symbol st_sensors_set_odr
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel.ko needs unknown symbol st_sensors_debugfs_reg_access
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel.ko needs unknown symbol st_sensors_init_sensor
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel.ko needs unknown symbol st_sensors_power_disable
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel.ko needs unknown symbol st_sensors_validate_device
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel.ko needs unknown symbol st_sensors_check_device_support
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel.ko needs unknown symbol st_sensors_set_fullscale_by_gain
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel.ko needs unknown symbol st_sensors_allocate_trigger
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel.ko needs unknown symbol st_sensors_sysfs_sampling_frequency_avail
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel.ko needs unknown symbol st_sensors_deallocate_trigger
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel.ko needs unknown symbol st_sensors_trigger_handler
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel.ko needs unknown symbol st_sensors_set_enable
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel.ko needs unknown symbol st_sensors_power_enable
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel.ko needs unknown symbol st_sensors_set_dataready_irq
depmod: WARNING: /lib/modules/4.19.0-6-amd64/extra/st_accel_spi.ko needs unknown symbol st_sensors_spi_configure
make : on quitte le répertoire « /usr/src/linux-source-4.19 »

 

Y al cargar, evidentemente, error

# modprobe st_accel

modprobe: ERROR: could not insert 'st_accel': Unknown symbol in module, or unknown parameter (see dmesg)

Con dmesg vemos los mismo unknown symbols que ya nos avanzaba depmod

# dmesg|grep st_accel
[ 739.665457] st_accel: Unknown symbol st_sensors_read_info_raw (err -2)
[ 739.665485] st_accel: Unknown symbol st_sensors_set_axis_enable (err -2)
[ 739.665511] st_accel: Unknown symbol st_sensors_sysfs_scale_avail (err -2)
[ 739.665537] st_accel: Unknown symbol st_sensors_set_odr (err -2)
[ 739.665567] st_accel: Unknown symbol st_sensors_debugfs_reg_access (err -2)
[ 739.665595] st_accel: Unknown symbol st_sensors_init_sensor (err -2)
[ 739.665621] st_accel: Unknown symbol st_sensors_power_disable (err -2)
[ 739.665649] st_accel: Unknown symbol st_sensors_validate_device (err -2)
[ 739.665674] st_accel: Unknown symbol st_sensors_check_device_support (err -2)
[ 739.665700] st_accel: Unknown symbol st_sensors_set_fullscale_by_gain (err -2)
[ 739.665727] st_accel: Unknown symbol st_sensors_allocate_trigger (err -2)
[ 739.665752] st_accel: Unknown symbol st_sensors_sysfs_sampling_frequency_avail (err -2)
[ 739.665778] st_accel: Unknown symbol st_sensors_deallocate_trigger (err -2)
[ 739.665804] st_accel: Unknown symbol st_sensors_trigger_handler (err -2)
[ 739.665829] st_accel: Unknown symbol st_sensors_set_enable (err -2)
[ 739.665854] st_accel: Unknown symbol st_sensors_power_enable (err -2)
[ 739.665880] st_accel: Unknown symbol st_sensors_set_dataready_irq (err -2)

 

Sin embargo otros módulos que se han compilado al mismo tiempo, que están en el mismo directorio, compilaron y se cargan sin problemas:

# modprobe stk8312

Si has llegado hasta aquí...gracias por leer el tostón. 

Un saludo

Dom, 03/11/2019 - 20:46
empanada
Imagen de empanada
Desconectado/a
se unió: 05/11/16

Buenas.

Creo que no es posible compilar estos módulos de manera independiente para el kernel genérico debian ya que las funciones que necesitan estos módulos no se definieron como EXPORT_SYMBOL al compilarlo.

Este hilo es bastante viejo pero creo que la conclusión es la misma que en mi caso: Compile and install modules without kernel recompile.

Si no me equivoco, los EXPORT_SYMBOL disponibles están en "/usr/src/linux-headers-$(uname -r)/Module.symvers", y como el comando

cat /usr/src/linux-headers-$(uname -r)/Module.symvers | grep st_sensors

da como resultado NADA de NADA, parece que la única vía posible para tener este módulo disponible es recompilar el kernel de nuevo.

Un saludo.

BLUES

Lun, 04/11/2019 - 09:47
Panko
Imagen de Panko
Desconectado/a
moderador
se unió: 18/02/16

¿Te has asegurado que las fuentes de los modulos son compatibles para la versión  del kernel que vas a compilarlos? No siempre es así, y en algunos casos te piden algo que ya no existe en el kernel actual, y en otros algo que existe en un kernel más nuevo que el  que tienes.

Ya sea de donde bajes las fuentes de los módulos, o en el mismo nombre, o dentro de las fuentes en algún README o INSTALL es más que probable te indique para que versión/es del núcleo  son compatibles dichas fuentes.

  No hay bar que por bien no venga....
Mar, 05/11/2019 - 20:24 (Responder a #3)
empanada
Imagen de empanada
Desconectado/a
se unió: 05/11/16

Panko wrote:

¿Te has asegurado que las fuentes de los modulos son compatibles para la versión  del kernel que vas a compilarlos? No siempre es así, y en algunos casos te piden algo que ya no existe en el kernel actual, y en otros algo que existe en un kernel más nuevo que el  que tienes.

Ya sea de donde bajes las fuentes de los módulos, o en el mismo nombre, o dentro de las fuentes en algún README o INSTALL es más que probable te indique para que versión/es del núcleo  son compatibles dichas fuentes.

El kernel en ejecución es exactamente el mismo que las fuentes instaladas. Ambos son el kernel por defecto en Buster en este momento. Estaba indicado en el primer mensaje.

# uname -v

4.19.67-2+deb10u1 (2019-09-20)

 

# dpkg -l|grep linux-source-4.19 

ii linux-source-4.19 4.19.67-2+deb10u1 all Linux kernel source for version 4.19 with Debian patches

 

De hecho el resto de módulos que residen en el mismo directorio del kernel (drivers/iio/accel), compilan e instalan sin warnings, pero sobre todo, se cargan sin problemas (también está indicado en el primer mensaje). 

El problema estoy casi seguro que es el tema de que estos módulos necesitan que algunas funciones se hayan exportado en el momento de compilación del kernel original. Esto depende del código de los módulos, evidentemente.

Un saludo.

BLUES

Mar, 05/11/2019 - 21:18
Panko
Imagen de Panko
Desconectado/a
moderador
se unió: 18/02/16

No, no has entendido mi pregunta.... no hablo del kernel, hablo del código fuente del modulo en cuestión.... un código fuente del modulo de hace dos años no  te va a funcionar con  un kernel actual, y un código fuente de hoy no te va a funcionar con un kernel de hace dos años....

Digo yo que si no está, no viene en las sources, así que es externo, simplemente, has bajado las fuentes del modulo equivocadas, o necesitas un kernel mas nuevo con sus fuentes correspondientes. Tener 17535 modulos en las fuentes del  kernel no significa absolutamente nada en cuanto a cualquier cosas que bajes de cualquier sitio....

 

Que algo que no esté compilado en el kernel si esté en las fuentes, es por alguna razón, por ejemplo, soporte incompleto, entrada inicial en las  fuentes... etc. Esto te lleva a necesitar unas fuentes del modulo externas, de ahí lo de "compilar modulos externos". Es exactamente lo mismo que se hace con virtualbox, nvidia-driver, etc... Tu problema es que intentas compilar un modulo del kernel que ya existe en las fuentes, sin soporte completo, lo que te lleva a necesitar fuentes externas compatibles.

Y, si no fuera este el caso, es un bug que debe ser reportado, una cosa es una duda con tu sistema, su funcionamiento, o que no entiendas como se compila un software determinado, y otra que exista un bug. En este caso, o es lo que te he dicho, necesitas unas fuentes del modulo externas o has encontrado un bug que deberías reportar una vez buscado información al respecto.

  No hay bar que por bien no venga....
Lun, 11/11/2019 - 19:14 (Responder a #5)
empanada
Imagen de empanada
Desconectado/a
se unió: 05/11/16

Panko wrote:

No, no has entendido mi pregunta.... no hablo del kernel, hablo del código fuente del modulo en cuestión.... un código fuente del modulo de hace dos años no  te va a funcionar con  un kernel actual, y un código fuente de hoy no te va a funcionar con un kernel de hace dos años....

Es muy probable que no la haya entendido debido a mis limitaciones intelectuales...aunque también es posible que si la haya entendido y los papeles de mal entendedor estén invertidos. No es muy probable... pero posible, es ¿no?

 

Panko wrote:
Digo yo que si no está, no viene en las sources, así que es externo, simplemente, has bajado las fuentes del modulo equivocadas, o necesitas un kernel mas nuevo con sus fuentes correspondientes. Tener 17535 modulos en las fuentes del  kernel no significa absolutamente nada en cuanto a cualquier cosas que bajes de cualquier sitio....

La respuesta está en tu corazón...digoooooo, en la primera frase del primer mensaje:

empanada wrote:
En un portatil Lenovo MiiX 320 me he encontrado un acelerómetro ST Microelectronics cuyo driver, aunque está en las fuentes del kernel, no está compilado por defecto en Debian (si en Ubuntu).

Si , podría ser que hubiera bajado el código fuente de los módulos del porntube, o de forocoches, pero va a ser que no, que está tal cual, en todo su esplendor, en las fuentes del kernel debian actual en debian buster, y que, efectivamente, estaba indicado en la primera frase del primer mensaje.

 

Panko wrote:
Que algo que no esté compilado en el kernel si esté en las fuentes, es por alguna razón, por ejemplo, soporte incompleto, entrada inicial en las  fuentes... etc. Esto te lleva a necesitar unas fuentes del modulo externas, de ahí lo de "compilar modulos externos". Es exactamente lo mismo que se hace con virtualbox, nvidia-driver, etc... Tu problema es que intentas compilar un modulo del kernel que ya existe en las fuentes, sin soporte completo, lo que te lleva a necesitar fuentes externas compatibles.

Buen intento, pero de nuevo...stack overflow: podría ser correcto de no ser porque la respuesta está también en el primer mensaje, segunda frase:

empanada wrote:
Una de las opciones es instalar las fuentes del kernel y recompilar el nucleo completo (partiendo del .config actual, simplemente añadiendo el módulo deseado como "M"). Hasta aquí todo correcto: la compilación se realiza correctamente y se generan los paquetes *.deb correctamente.

 

Panko wrote:
Y, si no fuera este el caso, es un bug que debe ser reportado, una cosa es una duda con tu sistema, su funcionamiento, o que no entiendas como se compila un software determinado, y otra que exista un bug. En este caso, o es lo que te he dicho, necesitas unas fuentes del modulo externas o has encontrado un bug que deberías reportar una vez buscado información al respecto.

Sería una posibilidad, en especial que no entienda como compilar un software, plausible debido a las limitaciones congénitas del remitente, declaradas en el primer párrafo de este mensaje, sino fuera que la respuesta está en el segundo mensaje:

empanada wrote:
no es posible compilar estos módulos de manera independiente para el kernel genérico debian ya que las funciones que necesitan estos módulos no se definieron como EXPORT_SYMBOL al compilarlo.

Este hilo es bastante viejo pero creo que la conclusión es la misma que en mi caso: Compile and install modules without kernel recompile.

Si no me equivoco, los EXPORT_SYMBOL disponibles están en "/usr/src/linux-headers-$(uname -r)/Module.symvers", y como el comando

cat /usr/src/linux-headers-$(uname -r)/Module.symvers | grep st_sensors
da como resultado NADA de NADA, parece que la única vía posible para tener este módulo disponible es recompilar el kernel de nuevo.

Un saludo...y feliz navidad.

 

BLUES

Mié, 13/11/2019 - 19:17
Panko
Imagen de Panko
Desconectado/a
moderador
se unió: 18/02/16

Vamos, que te has respondido tu mismo... ¿Has reportado algo a debian-bug-reports?

  No hay bar que por bien no venga....