问个嵌入式linux中驱动编程的问题,有个模块 static int _init embed_hello_init (void)

初学嵌入式linux,不明白这句是什么意思,后面embed_hello_init 是结构体名吧,前面的int _init 是什么意思啊,麻烦哪位详细解答下,谢谢!!!

1)embed_hello_init 不是结构体名,是函数名
2)int _init部分,int 表示函数的返回值类型,是整型
扣除_init去看,static int embed_hello_init (void),就是定义一个静态的无入参函数,返回值是整型。这些概念跟嵌入式,linux,驱动都没有任何关系,是C语法的概念。

回到_init,这是linux 内核编程的一个特殊宏,,展开是一个gcc的扩展属性语法,限制了函数链接时放elf文件的那个section。
定义大概如下(不同内核版本可能有差异):
#define __init __attribute__((__section__(".init")))

通过把init函数限制在一个固定的section,一个作用是在启动时简单遍历section调用初始化函数即可,另外一个作用是在初始化完成后,可以马上释放该section所占空间给系统用(因为初始化函数通常只在系统启动后执行一次)。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-23
_init是内核模块函数用的,貌似这样的模块编译时,这些函数名都会存在一张叫init的初始化表中,这样可以方便内核启动时快速加载,当然对应的是_exit
第2个回答  2013-01-24
整个起名叫模块入口函数,static应该知道吧,int是函数的返回值, _init是指定该函数为模块入口函数,即模块运行时从这里开始,embed_hello_init是函数名,带一个void参数
第3个回答  2013-01-23
返回值,在头文件中typedef 了