Решил тут на досуге opemu поковырять маленько.
uname -a
Linux gnu 6.8.9-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.8.9-1 (2024-05-15) x86_64 GNU/Linux
lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux trixie/sid
Release: n/a
Codename: trixie
dron@gnu:~/Рабочий-стол/sonc$
Сейчас у меня загружено ядро 6.8.9
, в Debian
для него нет linux-headers
в репе. Поэтому скачал
Распаковал, далее (всё успешно)
cp /boot/config-6.8.9-amd64 ./.config
make oldconfig && make prepare
Далее в Makefile
модуля подменил путь
Сам Makefile
для наглядности
# --force-vermagic
###################################################
MODULE_NAME := op_emu
###################################################
$(MODULE_NAME)-objs := opemu/sse3.o \
opemu/ssse3.o \
opemu/sse41.o \
opemu/sse42.o \
opemu/opemu.o \
opemu/fpins.o \
opemu/trap_hook.o \
opemu/opemu_math.o \
libudis86/syn.o \
libudis86/itab.o \
libudis86/decode.o \
libudis86/udis86.o \
libudis86/syn-att.o \
libudis86/syn-intel.o \
###################################################
obj-m += $(MODULE_NAME).o
###################################################
KBUILD_CFLAGS += -DDEBUG -g -O2 -march=native \
-mtune=native \
-mmmx \
-msse \
-msse2 \
###################################################
#KERNEL_PATH ?= /lib/modules/$(shell uname -r)/build
KERNEL_PATH = /home/dron/Рабочий-стол/linux-6.8.9
###################################################
export KBUILD_CFLAGS
###################################################
all:
make -C $(KERNEL_PATH) M=$(PWD) modules
# -rm ./*.order
# -rm ./*.symvers
# -rm ./*.mod
# -rm ./*.o
# -rm ./*.c
###################################################
clean:
make -C $(KERNEL_PATH) M=$(PWD) clean
###################################################
Всё ломается на этапе
CC [M] /mnt/STORAGE/НАБРОСКИ/opemu-linux-непонятно-что-с-лицензией/libudis86/udis86.o
CC [M] /mnt/STORAGE/НАБРОСКИ/opemu-linux-непонятно-что-с-лицензией/libudis86/syn-att.o
CC [M] /mnt/STORAGE/НАБРОСКИ/opemu-linux-непонятно-что-с-лицензией/libudis86/syn-intel.o
LD [M] /mnt/STORAGE/НАБРОСКИ/opemu-linux-непонятно-что-с-лицензией/op_emu.o
MODPOST /mnt/STORAGE/НАБРОСКИ/opemu-linux-непонятно-что-с-лицензией/Module.symvers
WARNING: Module.symvers is missing.
Modules may not have dependencies or modversions.
You may get many unresolved symbol errors.
You can set KBUILD_MODPOST_WARN=1 to turn errors into warning
if you want to proceed at your own risk.
WARNING: modpost: "memcpy" [/mnt/STORAGE/НАБРОСКИ/opemu-linux-непонятно-что-с-лицензией/op_emu.ko] undefined!
WARNING: modpost: "vsnprintf" [/mnt/STORAGE/НАБРОСКИ/opemu-linux-непонятно-что-с-лицензией/op_emu.ko] undefined!
WARNING: modpost: "__fentry__" [/mnt/STORAGE/НАБРОСКИ/opemu-linux-непонятно-что-с-лицензией/op_emu.ko] undefined!
WARNING: modpost: "__x86_indirect_thunk_rax" [/mnt/STORAGE/НАБРОСКИ/opemu-linux-непонятно-что-с-лицензией/op_emu.ko] undefined!
WARNING: modpost: "_printk" [/mnt/STORAGE/НАБРОСКИ/opemu-linux-непонятно-что-с-лицензией/op_emu.ko] undefined!
WARNING: modpost: "__stack_chk_fail" [/mnt/STORAGE/НАБРОСКИ/opemu-linux-непонятно-что-с-лицензией/op_emu.ko] undefined!
WARNING: modpost: "kernel_fpu_begin_mask" [/mnt/STORAGE/НАБРОСКИ/opemu-linux-непонятно-что-с-лицензией/op_emu.ko] undefined!
WARNING: modpost: "kernel_fpu_end" [/mnt/STORAGE/НАБРОСКИ/opemu-linux-непонятно-что-с-лицензией/op_emu.ko] undefined!
WARNING: modpost: "__x86_indirect_thunk_rdx" [/mnt/STORAGE/НАБРОСКИ/opemu-linux-непонятно-что-с-лицензией/op_emu.ko] undefined!
WARNING: modpost: "ftrace_set_filter_ip" [/mnt/STORAGE/НАБРОСКИ/opemu-linux-непонятно-что-с-лицензией/op_emu.ko] undefined!
WARNING: modpost: suppressed 11 unresolved symbol warnings because there were too many)
make[3]: *** Нет правила для сборки цели «/mnt/STORAGE/НАБРОСКИ/opemu-linux-непонятно-что-с-лицензией/op_emu.ko», требуемой для «__modfinal». Останов.
make[2]: *** [/home/dron/Рабочий-стол/linux-6.8.9/Makefile:1854: modules] Ошибка 2
make[1]: *** [Makefile:240: __sub-make] Ошибка 2
make[1]: выход из каталога «/home/dron/Рабочий-стол/linux-6.8.9»
make: *** [Makefile:34: all] Ошибка 2
Как сгенерировать Module.symvers
от текущего ядра?
Заранее, тут нету, в смысле нет каталога build
что симлинк на /usr/src/linux-headers-6.8.9
котрого тоже нету ибо нет пакета. И где Module.symvers
текущего загруженного ядра тогда брать? Типа собирать из исходников со своим конфигом и от туда? А без этого как? Например я хочу собрать модуль для 10ти ядер, которых даже в дистрибутиве нет, что мне каждое собирать? Пока не нагуглил, вот спрашиваю
/lib/modules/6.8.9-amd64$ ls
kernel modules.builtin.alias.bin modules.dep.bin modules.symbols
modules.alias modules.builtin.bin modules.devname modules.symbols.bin
modules.alias.bin modules.builtin.modinfo modules.order
modules.builtin modules.dep modules.softdep
Давно в таком виде всё это не тыкал, что я упускаю, где что недопонимаю? Сонный уже, колпачок не варит. Вот блин приключения на ровном месте, хехе.
P.S. Чисто для проверки сборки подсунул Module.symvers
из /lib/modules/6.9.7-amd64/build
, всё успешно собралось, но модуль такой загрузить нельзя понятное дело. Это так, для справки
Косвенно решено: