Initcalls, the mechanism The simple solution is defining a special ELF section Every driver defines a structure in that ELF section The linker builds an array for us The linker script provides the usual names for begin and end Considering the linking mechanism, this is what happens Each object files has code and data section It may also have an init section Then, if the linker finds an unresolved symbol in this object file It picks the whole file for the final link Eventually, it may discard unused sections (--gc-sections)