2015-04-11 15:53:47

by Eduardo Cruz

[permalink] [raw]
Subject: Problems exporting symbols from the main kernel to a module

I am modifying the kernel to provide some statistics about memory usage.
For that, part of my code is added in the main kernel, and part is in a module.

The kernel version is 2.6.32.
The target machine is an ia64 machine.
Newer kernels do not boot the machine.
I'm using a debian distribution.

In the main kernel, in arch/ia64/mm/fault.c, I added the following
function pointer:

void (*module_task_added)(struct task_struct *) = NULL;
EXPORT_SYMBOL(module_task_added);

In the module, i have:

extern void (*module_task_added)(struct task_struct *);

void handler_func (struct task_struct *task) {
...
}

int init_module () {
module_task_added = handler_func;
}

when I compile the module, i get the following warning:

WARNING: "module_task_added"
[/home/ehmcruz/linux-tammu/tammu-module/tammu.ko] undefined!


when I try to load the module, it fails resolving the symbol module_task_added:

[ 3306.496239] tammu: Unknown symbol module_task_added


I already verified that the symbol is present in /proc/kallsyms:

a000000100ac1b78 S module_task_added

however, I don't know why, the variable doesn't appear in Module.symvers

Anyone can help me?

thanks in advance

--
Eduardo Henrique Molina da Cruz
PhD student
Parallel and Distributed Processing Group
Federal University of Rio Grande do Sul (UFRGS)


2015-04-11 18:16:09

by Eduardo Cruz

[permalink] [raw]
Subject: Re: Problems exporting symbols from the main kernel to a module

I solved the issue.
Nevermind.

2015-04-11 12:53 GMT-03:00 Eduardo Cruz <[email protected]>:
> I am modifying the kernel to provide some statistics about memory usage.
> For that, part of my code is added in the main kernel, and part is in a module.
>
> The kernel version is 2.6.32.
> The target machine is an ia64 machine.
> Newer kernels do not boot the machine.
> I'm using a debian distribution.
>
> In the main kernel, in arch/ia64/mm/fault.c, I added the following
> function pointer:
>
> void (*module_task_added)(struct task_struct *) = NULL;
> EXPORT_SYMBOL(module_task_added);
>
> In the module, i have:
>
> extern void (*module_task_added)(struct task_struct *);
>
> void handler_func (struct task_struct *task) {
> ...
> }
>
> int init_module () {
> module_task_added = handler_func;
> }
>
> when I compile the module, i get the following warning:
>
> WARNING: "module_task_added"
> [/home/ehmcruz/linux-tammu/tammu-module/tammu.ko] undefined!
>
>
> when I try to load the module, it fails resolving the symbol module_task_added:
>
> [ 3306.496239] tammu: Unknown symbol module_task_added
>
>
> I already verified that the symbol is present in /proc/kallsyms:
>
> a000000100ac1b78 S module_task_added
>
> however, I don't know why, the variable doesn't appear in Module.symvers
>
> Anyone can help me?
>
> thanks in advance
>
> --
> Eduardo Henrique Molina da Cruz
> PhD student
> Parallel and Distributed Processing Group
> Federal University of Rio Grande do Sul (UFRGS)



--
Eduardo Henrique Molina da Cruz
PhD student
Parallel and Distributed Processing Group
Federal University of Rio Grande do Sul (UFRGS)