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所占空间给系统用(因为初始化函数通常只在系统启动后执行一次)。
温馨提示:答案为网友推荐,仅供参考