Why do we need to use `avr-objcopy` after `avr-as`?
The *-as is the GNU Assembler utility, used to produce binary object files *.o. This format is incompatible with the Intel Hex format, which is basically plain text file, containing the binary data encoded with its textual representation. objcopy is capable of extracting the binary information in one format and translating it to another. And it is what it does.