Das objcopy macht auch keinen Sinn mehr auf eine "flache Binärdatei", insofern kannst du das sowieso weglassen. Ansonsten weiß ich nicht, was du damit gerne "anfangen" würdest. Wenn du das mal genauer spezifizieren könntest und dann auch noch sagst was dann passiert bzw. wieso es nicht geht, dann könnte man dir vielleicht helfen.
edit: Das Problem ist wahrscheinlich (wie ich oben schon erwähnt hatte), dass du ld nicht sagst, an welche Adresse der Code gelinkt wird. An genau diese Adresse muss der Bootloader dann auch den Code laden (sonst funktionieren absolute Jumps/Calls, Datenzugriffe, etc... nicht, was hoffensichtlich einsichtig sein sollte).
edit2: Was ganz wesentliches vergessen: Dein Bootloader weiß nicht an welcher Adresse innerhalb der Datei sich der Einsprungspunkt (also zB main) befindet. Das ist auch einer der Gründe warum man ungern auf ein Dateiformat verzichtet (wie bereits oben erwähnt). Aber mit irgendeiner weiteren Frickellösung kriegt man auch das hin.