linux内核符号表

所谓内核符号表就是在内核内部函数或变量中可供外部引用的函数和变量的符号表。在 2.6 内核下,使用以下命令可以看到内核符号表:
引用
beyes@linux-beyes:/> cat /proc/kallsyms | more
c0100000 T _text
c0100000 T startup_32
c0100054 t default_entry
c01000b0 T startup_32_smp
c0100132 t checkCPUtype
c01001b3 t is486
c01001ba t is386
c0100227 t check_x87
c010025a t setup_idt
c0100277 t rp_sidt
c01002fa t early_divide_err
c0100300 t early_illegal_opcode
.... ....

在内核符号表中,左边一列是符号地址,右边一列是函数和变量。在一个模块加载后,任何一个被模块导出的符号都会成为内核符号表的一部分。一般情况下,你设计的一个模块实现了自己所需的功能,这里也并不一定需要要所有的符号都导出来。但是,如果希望别人也能用到自己的模块,那就需要将其导出。

使用以下宏可以导出符号到内核符号表:
引用
EXPORT_SYMBOL(符号名);
EXPORT_SYMBOL_GPL(符号名);


使用 EXPORT_SYMBOL_GPL() 只用于包含 GPL 许可权的模块。

示例代码
引用
#include
#include

MODULE_LICENSE("Dual BSD/GPL");

int add_int(int a, int b)
{
    return (a + b);
}

int sub_int(int a, int b)
{
    return (a - b);
}

EXPORT_SYMBOL(add_int);
EXPORT_SYMBOL(sub_int);


编译后用 insmod 加载到内核中,然后执行以下命令:
引用
beyes@linux-beyes:~/C/kernel/modadd> cat /proc/kallsyms |grep add_int
f9d70034 r __ksymtab_add_int    [modadd]
f9d7004c r __kstrtab_add_int    [modadd]
f9d70040 r __kcrctab_add_int    [modadd]
6ce40a9f a __crc_add_int    [modadd]
f9d70000 T add_int    [modadd]
(滤掉一些多余的输出)
beyes@linux-beyes:~/C/kernel/modadd> cat /proc/kallsyms |grep sub_int
f9d7002c r __ksymtab_sub_int    [modadd]
f9d70044 r __kstrtab_sub_int    [modadd]
f9d7003c r __kcrctab_sub_int    [modadd]
bb5e85f9 a __crc_sub_int    [modadd]
f9d70004 T sub_int    [modadd]
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(5912) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-10-21 19:41:04

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com

评论热议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值