__init、__initdata、__exit、__exitdata

本文深入探讨了内核中模块的初始化、数据定义、退出函数及内存管理的机制,详细解释了__init、__initdata、__exit、__exitdata宏的作用,并通过实例展示了模块如何在内核中注册和注销,以及如何有效地管理内存资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

__init 宏常用在驱动模块初始化函数的定义处,其目的是将驱动模块的初始化函数放入名叫.init.text的输入段。当内核启动完毕后,这个段中的内存会被释放掉供其他使用。

__initdata宏用于数据定义,目的是将数据放入名叫.init.data的输入段。其它几个宏也类似。

__exit只在模块卸载时使用。如果模块被直接编进内核则该函数就不会被调用。如果内核编译时没有包含该模块,则此函数将被简单地丢弃。

__exitdata:

static char hdlc_unregister_ok[] __exitdata =

         KERN_INFO "N_HDLC: line discipline unregistered\n";

static char hdlc_unregister_fail[] __exitdata =

         KERN_ERR "N_HDLC: can't unregister line discipline (err = %d)\n";

 

static void __exit n_hdlc_exit(void)

{

         /* Release tty registration of line discipline */

         int status = tty_unregister_ldisc(N_HDLC);

 

         if (status)

                   printk(hdlc_unregister_fail, status);

         else

                   printk(hdlc_unregister_ok);

}

通过它的使用推测一下它的作用,定义一个静态变量当模块的退出函数使用之后自动释放该变量,达到节省资源的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值