I thought kernel modules were elf files created by relocatable links but that seems a strange omission from the examples list if so, may be misremembering.<p>ld -r elf -o out should be a no-op on well formed input. It means create a file that will be passed to another linker invocation later. So it's a means of composing together N object files to get one file that you can use in place of those N. A little like a library.<p>I structured builds like that for a while. Source foo.c to foo.o, directory bar to bar.o containing whatever was in that directory relocatably-linked together, possibly internalising symbols as it goes.