那些经常出现的符号
__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:请求内核把一个模块从内核空间剔除