当前位置: 技术问答>linux和unix
内核函数地址的问题
来源: 互联网 发布时间:2017-04-28
本文导语: 我使用的是2.6内核自己编写了两个模块 a.ko、b.ko 模块功能也非常简单,代码如下: static int _init a_init(void) { printk("%p", usb_register); return 1; } static void _exit a_exit(void) { } module_init(a_init); module_init(a_exit); ...
我使用的是2.6内核自己编写了两个模块 a.ko、b.ko 模块功能也非常简单,代码如下:
static int _init a_init(void)
{
printk("%p", usb_register);
return 1;
}
static void _exit a_exit(void)
{
}
module_init(a_init);
module_init(a_exit);
两个模块代码一样, 就是打印usb_register这个内核函数的地址, 按照我自己的理解,usb_register是编译到内核里面的,它的地址应该是固定的(对于每个模块),而实际上在我insmod 这两个模块后,两个模块打印的地址是不一样的,因此感到非常不解,希望各位指点。
另外我用 cat /proc/kallsyms | grep usb 根本没有usb_register这个函数,这又是为何?
static int _init a_init(void)
{
printk("%p", usb_register);
return 1;
}
static void _exit a_exit(void)
{
}
module_init(a_init);
module_init(a_exit);
两个模块代码一样, 就是打印usb_register这个内核函数的地址, 按照我自己的理解,usb_register是编译到内核里面的,它的地址应该是固定的(对于每个模块),而实际上在我insmod 这两个模块后,两个模块打印的地址是不一样的,因此感到非常不解,希望各位指点。
另外我用 cat /proc/kallsyms | grep usb 根本没有usb_register这个函数,这又是为何?
|
usb_register这个函数调用的是usb_register_driver,这个函数是在usb的模块中。
没有加载这个模块把。
没有加载这个模块把。
|
usb_register是有的,只是没有导出来,你用usb_register_driver就好了。
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。