2017-07-14 12:41 GMT-03:00 Gaspar Santamarina <
gasp...@gmail.com>:
>
> Ok, esta tarde cuando vuelva del laburo paso un poco mas de info y pruebo
> compilar un hello world. Sin embargo, el kernel y el bootloader los compile
> con la misma toolchain y parecen estar andando bien. No es esto prueba
> suficiente de que el compilador funciona correctamente?
¡Esa es una excelente pregunta!
Y justamente la diferencia está en el linkeo, que es parte de la toolchain:
$ file vmlinux
vmlinux: ELF 64-bit LSB executable, x86-64, version 1 (SYSV),
statically linked,
BuildID[sha1]=ef9f0845f1a918b9857809cd173d9c7ba69ecbe4, not stripped,
with debug_info
$ file busybox
busybox: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV),
dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for
GNU/Linux 4.10.0, stripped, with debug_info
Si mal no recuerdo, cuando hacés una toolchain, tenés que hacer dos stages.
Con la primer stage (de nuevo, si mal no recuerdo) ya podés cross-compilar
bootloaders y kernels. La segunda stage es la que necesitás para cross-compilar
binarios ELF linkeados con una libc.
A su vez, fijate que el ELF busybox tiene un interpreter ld (Linux Loader),
mientras que el kernel es un ELF que no necesita que nadie lo "cargue".
A lo sumo necesita que un bootloader lo mueva de flash a RAM y lo
ejecute.
Si estás con ganas de aprender, te recomiendo que leas acerca del proceso
de linkeo y sobre el loader ld:
http://www.linuxjournal.com/article/6463.