gpt4 book ai didi

linux - 为什么我的符号没有用 EXPORT_SYMBOL 导出?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:10 25 4
gpt4 key购买 nike

我正在制作一个简单的内核对象。但不知何故,变量没有用 EXPORT_SYMBIL 宏导出。来源是:

#include <linux/module.h>
#include <linux/init.h>

MODULE_LICENSE("Dual BSD/GPL");

int hello_int __attribute__ ((__unused__));
EXPORT_SYMBOL(hello_int);

static int hello_init(void)
{
printk(KERN_ALERT "driver loaded\n");
return 0;
}

static void hello_exit(void)
{
printk(KERN_ALERT "driver unloaded\n");
}

module_init(hello_init);
module_exit(hello_exit);

但是。

# insmod hello.ko
# cat /proc/kallsyms | grep hello

d9fb0000 t hello_exit [hello]
d9fb000c t hello_init [hello]
d9fb0000 t cleanup_module [hello]
d9fb000c t init_module [hello]
d9f6374e t br_hello_timer_expired [bridge]
d9f64027 t show_hello_timer [bridge]
d9f640fb t store_hello_time [bridge]
d9f64264 t set_hello_time [bridge]
d9f641ee t show_hello_time [bridge]

那里没有 hello_int。但可以肯定的是,

# cat Module.symvers

0x8ed8de1a hello_int /home/ken/myprojects/hello/hello EXPORT_SYMBOL

为什么?有什么问题吗?

# uname -a
Linux debian-6-0-6-i386 2.6.32-5-686 #1 SMP Sun Sep 23 09:49:36 UTC 2012 i686 GNU/Linux

这里是 Makefile:

obj-m := hello.o

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

最佳答案

你的问题是内核没有配置 CONFIG_KALLSYMS_ALL设置,导致它只导出函数而不导出变量。我发现很难 track what happened in relation to this ,但看起来在某个时刻该标志已在其中一个内核更新中启用。

关于linux - 为什么我的符号没有用 EXPORT_SYMBOL 导出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12785512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com