# DEFINE _ init _ attribute _ (_ Section _ (". init. Text ")))
# DEFINE _ initdata _ attribute _ (_ Section __(". init. data ") # DEFINE _ exitdata _ attribute _ (_ Section __(". exit. data ") # DEFINE _ exit_call _ attribute_used _ attribute _ (_ Section __(". exitcall. exit ") # ifdef Module # DEFINE _ exit _ attribute _ (_ Section __(". exit. text ") # else # DEFINE _ exit _ attribute_used _ attribute _ (_ Section __(". exit. text ") # endif
_ Init and _ exit mark functions __initdata and _ exitdata mark data.
This macro definition shows that the labeled functions and data are actually put into a specific (code or data) segment.
The function marked as initialization indicates that it is used during initialization.
After the module is loaded
Will throw the initialization function. In this way, the memory occupied by the function can be released.
The _ exit modifier markup function is only used when the module is detached. If the module is directly compiled into the kernel
Or the kernel Cannot uninstall the module. Functions marked by this label will be simply discarded.