La diferencia es que la salida vinculada de la cadena de herramientas arm-elf-xxx es un binario cargable de linux, mientras que arm-linux-xxx genera un objeto kernel (ko), que es un blob con su propio formato de vinculación (para módulos), o el kernel principal en sí, que no necesita un formato de empaquetado. Es decir, para el espacio de usuario desea que el objeto final dinámicamente vinculado sea un ejecutable ELF, una biblioteca u objeto compartido. Para el espacio del kernel, desea que el objeto final (kernel o módulo) esté en el formato de vinculación linux-arm-kernel.
Notarás que los objetos intermedios (archivos .o) de ambos objetivos son probablemente todos ELF, ya que eso es lo que espera la cadena de herramientas.
¿Están arm-linux- * y arm-elf- * enlaces simbólicos a otras aplicaciones? Por ejemplo, en mi sistema, arm-linux-gcc apunta a arm-unknown-linux-uclibceabi-gcc. – ctuffli