那些经常出现的符号

__init 指示链接脚本使用
#define __init        __section(.init.text) __cold notrace

Module_init()是这个什么

在/include/linux/init.h文件中定义

#define module_init(x)    __initcall(x)

#define __initcall(fn) device_initcall(fn)

#define __define_initcall(level,fn,id) \
    static initcall_t __initcall_##fn##id __used \
    __attribute__((__section__(".initcall" level ".init"))) = fn
    
    typedef int (*initcall_t)(void);
#define pure_initcall(fn)        __define_initcall("0",fn,0)

#define core_initcall(fn)        __define_initcall("1",fn,1)
#define core_initcall_sync(fn)        __define_initcall("1s",fn,1s)
#define postcore_initcall(fn)        __define_initcall("2",fn,2)
#define postcore_initcall_sync(fn)    __define_initcall("2s",fn,2s)
#define arch_initcall(fn)        __define_initcall("3",fn,3)
#define arch_initcall_sync(fn)        __define_initcall("3s",fn,3s)
#define subsys_initcall(fn)        __define_initcall("4",fn,4)
#define subsys_initcall_sync(fn)    __define_initcall("4s",fn,4s)
#define fs_initcall(fn)            __define_initcall("5",fn,5)
#define fs_initcall_sync(fn)        __define_initcall("5s",fn,5s)
#define rootfs_initcall(fn)        __define_initcall("rootfs",fn,rootfs)
#define device_initcall(fn)        __define_initcall("6",fn,6)
#define device_initcall_sync(fn)    __define_initcall("6s",fn,6s)
#define late_initcall(fn)        __define_initcall("7",fn,7)
#define late_initcall_sync(fn)        __define_initcall("7s",fn,7s)

从数字可以看出,按照重要性分成了0~7个initcall等级

MODULE_LICENSE() 开源协议,如果不指定,内核可能排斥此模块

insmod做了什么:Insmod是一个系统调用,申请内核把模块动态加载进内核
rmmod:请求内核把一个模块从内核空间剔除

 

posted @ 2018-04-10 22:57  陈帅军  阅读(136)  评论(0编辑  收藏  举报