I ask myself why there isn't a way to put the device tree, as the hardware description, together with the bootloader on some ROM chip and build the Linux OS independently from any hardware specs, at least within some defined limits.
Resposta: Barato. Ninguém quer pagar pelo chip da ROM. O SoC tem uma ROM de inicialização, mas a árvore de dispositivos varia dependendo do circuito em que o SoC está, então isso não é bom. Você precisaria de um "chip de BIOS" separado, como placas x86 para fazer isso funcionar.
Você pode fazer isso funcionar tratando o cartão SD que a maioria das placas ARM inicializa como o chip da BIOS; basta colocar o U-Boot e a árvore de dispositivos nele e fazer com que o U-Boot carregue o kernel de uma unidade USB. Então a unidade USB seria (razoavelmente) portátil da placa ARM para a placa ARM.
Em termos de otimização, enquanto você pode compilar para o ARM genericamente, vale a pena direcionar um processador específico (muito mais do que em x86_64).