I wish there was a GUI/visualization for all this.
Everything is relatively simple to understand when visualized like it would be on a lecture slide. But reading about it in manpages and blog articles is overwhelming.
Why not draw your own picture as you read an article? Then you'll understand it better. That's how I read contracts. After that you can usually toss the drawing because the picture will be in your head and from then on you can just refer to the text if you need to.
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.
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.
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.
Everything is relatively simple to understand when visualized like it would be on a lecture slide. But reading about it in manpages and blog articles is overwhelming.