Linux编程中C函数定义的第一行中出现的关键字“__init”是什么意思?

问题提出

在驱动程序模块的编写中,常常会在初始化函数的第一行中加上关键字“__init”,请问“__init”是什么意思?
比如下面的代码:

static int __init led_init(void) {
   
    // 初始化代码:注册设备、分配资源等
    return 0;
}

module_init(led_init);

详细解释

__init 的作用

在 Linux 内核代码中,__init 是一个宏,用于标记初始化函数的代码段。这是一种内核的优化方式,旨在减少内核的内存占用。


__init 的功能

  1. 标记初始化代码:

    • 内核会将带有 __init 标记的代码放入一个特殊的内存区(.init.text 段)。
    • 这段内存在初始化完成后(通常是模块加载完成或内核启动完成后)会被释放,节省内存。
  2. 仅在初始化时执行:

    • 这些代码通常只需要在模块加载或系统启动时运行一次。
    • 运行结束后,它们不会再被调用。

使用 __init 的场景

  1. 模块初始化函数:

    • 像例子中的 led_init,是模块加载时的入口函数,只需要运行一次,因此使用 __init 标记。
    • 例如:
      static int __init led_init(void) {
             
          // 初始化代码
          return 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值