Cross compiler son propre code en C pour GLInet
Lorsque nous avons voulut installer un mécanisme de test de la bande passante on a installé un cross compilateur pour OpenWRT sur une machine Windows WSL (ca marche probablement sur n'importe quel Linux).
L'installation est faite dans :
$HOME/source/openwrt-sdk-18.06.1-ar71xx-generic_gcc-7.3.0_musl.Linux-x86_64
On fait un petit set-env.sh :
export ROUTER_IP=192.168.8.1
export STAGING_DIR=$HOME/source/openwrt-sdk-18.06.1-ar71xx-generic_gcc-7.3.0_musl.Linux-x86_64/staging_dir
export TOOLCHAIN=$STAGING_DIR/toolchain-mips_24kc_gcc-7.3.0_musl
export CROSS=$TOOLCHAIN/bin/mips-openwrt-linux
On lance la conf avec :
source set-env.sh
On crée un répertoire sources dans notre environnement de cross compilation
mkdir sources
cd sources
On y mets notre hello.c:
// hello.c
#include <stdio.h>
int main(void) {
puts("Hello from GL-AR150 (mips_24kc)!");
return 0;
}
On le compile:
$CROSS-gcc -Os -s -fPIC -o hello hello.c
C'est instantané (vive le C!) et on retrouve un binaire hello:
file hello
Qui nous donne:
hello: ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-mips-sf.so.1, stripped
On le copie sur le routeur:
scp hello root@${ROUTER_IP}:.
ssh root@${ROUTER_IP}
Et là on peut le lancer:
BusyBox v1.28.3 () built-in shell (ash)
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
OpenWrt 18.06.1, r7258-5eb055306f
-----------------------------------------------------
root@GL-AR150:~# ./hello
Hello from GL-AR150 (mips_24kc)!
root@GL-AR150:~#
C'est-t-y pas chouette?