Original Definition: Include/Linux/init. h
# 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 placed in a specific (CodeOr data) segment.
Indicates that the function is used during initialization.
After the module is loaded, the initialization function is thrown away. 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
Then the function will not be called. If the kernel does not contain this module during compilation, the functions marked with this module will be discarded.
More: http://kernelnewbies.org/FAQ/InitExitMacros