Как переименовать имя модуля ядра без переименования файла .ko, переданного в insmod?

#linux #module #kernel #kernel-module

#linux #модуль #ядро #kernel-module

Вопрос:

Мне нужно переименовать модуль ядра (имя, которое отображается с помощью lsmod) уже существующего драйвера без изменения имени исходного файла.

например

 # insmod xxx.ko
<<module loads successfully>>
# lsmod
Module                  Size  Used by    Tainted: P
xxx                   191527  0
#
  
  • Я хочу переименовать xxx в yyy.

  • Теперь я знаю, что изменение имени исходного файла драйвера (когда речь идет об одном файле) изменяет имя модуля.

  • Но я не хочу менять имя исходного файла.

Ответ №1:

Переименуйте свой obj-m в Makefile и установите зависимость от obj-m исходного модуля.

Например, у меня есть файл hello.c , содержащий весь мой исходный код. Но я хочу, чтобы модуль был mynewname .

Вот весь Makefile, который делает это:

 obj-m := mynewname.o 
mynewname-objs := hello.o

KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD  := $(shell pwd)

default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

clean:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) clean
  

Я установил obj-m значение mynewname.o и делаю mynewname.o зависимым от hello.o . После вызова make вы получите mynewname.ko .

Комментарии:

1. Можно ли задать имя модуля в самом коде модуля (hello.c)?

2. Я не пробовал, но вы можете попробовать использовать MODULE_ALIAS макрос, чтобы позволить modprobe загружать ваш модуль с другим именем.