【问题标题】:How to rename a kernel module name without renaming the .ko passed to insmod?如何重命名内核模块名称而不重命名传递给 insmod 的 .ko?
【发布时间】:2014-08-16 12:45:22
【问题描述】:

我需要重命名已经存在的驱动程序的内核模块(使用 lsmod 显示的名称)而不更改源文件的名称。

例如

# insmod xxx.ko
<<module loads successfully>>
# lsmod
Module                  Size  Used by    Tainted: P
xxx                   191527  0
#
  • 我想将 xxx 重命名为 yyy。

  • 现在我知道更改驱动程序源文件的名称(当它涉及单个文件时)会更改模块的名称。

  • 但我不想更改源文件的名称。

【问题讨论】:

    标签: linux module kernel kernel-module


    【解决方案1】:

    在 Makefile 中重命名 obj-m 并将 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。

    【讨论】:

    • 是否可以在模块代码本身(hello.c)中设置模块名称?
    • 我没有尝试过,但你可以尝试使用MODULE_ALIAS 宏来允许 modprobe 使用不同的名称加载你的模块。
    猜你喜欢
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    相关资源
    最近更新 更多