Linux 驱动编程初学(一)

今天看到 Linux 驱动程序,对一些基本的概念不了解。

        static int __init func(void)

这是 Linux 模块入口函数,__init 是在内核模块函数用的,指定该函数为模块入口函数,即模块运行时从这里开始。在模块编译时,func 函数名会存在一张叫 init 的初始化表中,这样可以方便内核启动时快速加载。

static int __exit func(void)

        原理同__init,是模块退出函数。

更深入地说,__init 和 __exit 是 linux 内核编程的一个特殊宏,展开是一个 gcc 的扩展属性语法,限制了函数连接时放 elf 文件的那个 section。定义大概如下(不同内核版本可能有差异):

#define __init __attribute__((__section__(".init")))

通过把 init 函数限制在一个固定的 section,一个作用是在启动时简单遍历 section 调用初始化函数即可,另外一个作用是在初始化完成后,可以马上释放该 section 所占空间给系统用(因为初始化函数通常只在系统启动后执行一次)。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值