10
votes

Compilation croisée pour le routeur MIPS de X86

Mon objectif final est de compiler des outils sans fil pour mon ancien modem / routeur d'actiontec, afin que je puisse le configurer en tant que pont sans fil et Ethernet. Actuellement, les fonctionnalités sans fil sont (apparemment) contrôlées par le même binaire qui gère la majeure partie de l'interface Web, mais il semble qu'ils utilisaient les outils sans fil de la bibliothèque utilisées en interne pendant au moins une partie des fonctionnalités.

Je n'ai jamais cross compilé. Pour une architecture différente de la CPU avant et pas sûre de savoir comment identité pleinement ce que je dois faire. J'essaie d'utiliser UCLIBC car il semble être utilisé dans le reste du système, mais je ne sais pas comment configurer Buildroot pour l'environnement des modems. J'ai fait un Meilleure hypothèse sur ce que la configuration doit être basée sur les informations de la région ci-dessous, mais quelque chose de mal depuis un Une application C simple qui ne renvoie que 0 compilée avec elle ne fonctionne pas correctement. xxx


3 commentaires

Localisez toute application binaire sur le système MIPS et EXEC Fichier dessus et partagez la sortie avec nous


D'accord, la sortie du fichier pour un exécutable du système est la suivante: ELF 32 bits LSB exécutable, MIPS, MIPS-I Version 1 (SYSV), liée dynamique (utilise des BIB partagées), dépouillé merci pour toute votre aide jusqu'à présent.


duplicailler possible de y a-t-il un moyen de Utilisez GCC pour convertir C en Mips?


3 Réponses :


9
votes

Vous avez raison, vous avez besoin d'un MIPS Toolchain em> pour compiler votre application et Buildroot peut faire ça. Mais vous devrez peut-être avoir besoin de modifier les options Menuconfig em> de Buildroot. en fonction de la sortie du fichier code> strong>, vos options peuvent changer. Sur mon système, les applications binaires informent les éléments suivants:

ELF 32 bits MSB exécutable, MIPS, MIPS32 REL2 version 1 (SYSV) CODE> P>

Ce sont les options que j'ai activées Pour My Buildroot's's Menuconfig: P>

Target Architecture (mips)  ---> 
Target Architecture Variant (mips 32r2)  --->                                                            
Target ABI (o32)  --->                                                                                   
Target options  --->                                                                                     
Build options  --->   
    (/opt/cross-mips-buildroot) Toolchain and header file location?                                                                                   
Toolchain  --->        
    Toolchain type (Buildroot toolchain)  ---> 
    Kernel Headers (Linux 2.6.34.x kernel headers)  --->
    uClibc C library Version (uClibc 0.9.31.x)  ---> 
    [*] Build/install a shared libgcc?
    [*] Enable compiler tls support       
    [*] Build gdb debugger for the Target
    [*] Build gdb server for the Target
    [*] Build gdb for the Host
        GDB debugger Version (gdb 6.8)  --->
    [*] Enable large file (files > 2 GB) support?
    [*] Enable WCHAR support
    [*] Use software floating point by default
    [*] Enable stack protection support
    [*] Build/install c++ compiler and libstdc++?
    [*] Include target utils in cross toolchain  
Package Selection for the target  --->   
    [*] BusyBox
    [*]   Run BusyBox's own full installation
    Libraries  ---> 
        Networking  ---> 
            [*] libcurl
        Text and terminal handling  ---> 
            [*] icu
            -*- ncurses    
Target filesystem options  --->                                                                          
Bootloaders  --->                                                                                        
Kernel  --->


2 commentaires

@ Nightfly19 Vous voulez probablement changer la variante de l'architecture de la cible puisque la version est la version 1, pas 2.


Merci!! Vous avez fourni toute l'aide que je devais faire fonctionner la chaîne d'outils. Ma configuration s'est révélée être une petite endiane également pour toute cette question suivant également une situation similaire, de sorte que l'architecture devait être MIPSEL.



1
votes

Départ:

http://www.kegel.com/cosstool/

C'est le site faisant autorité sur la compilation croisée sous GCC.


0 commentaires

0
votes

S'il vous plaît n'hésitez pas à regarder dans Projet Dockcross . Ils offrent des chaînes de traverse d'outils comme Docker conteneurs pour diverses architectures.

Personnellement, je préfère garder mon Le système hôte aussi propre que possible, c'est donc un match parfait pour moi. Pour obtenir un simple Hello World Exemple et courez s'il vous plaît suivre les marches de la README .rst .

helloworld.c sur MIPS

Cependant, veuillez vérifier ma compilation Mon Hello World pour un NETGEAR N600 WNDR3700V2 Routeur Exécuter DD-WRT . (J'ai relié la page Wiki OpenWrt au lieu du DD-WRT, préférez celui-ci).

Vérifiez quelle arche est utilisée sur le routeur, veuillez faire confiance aux pages Wiki ou simplement connecter via SSH / Telnet et exécuter Commande UNAOM -A . < Pré> xxx

afin que nous puissions tirer le conteneur MIPS de dockerhub: xxx

crée un dossier de projet simple appelé helloworld et mais un code de code. xxx

Nous pouvons la compiler avec dockcross . xxx < p> Maintenant, nous sommes prêts à transférer et à exécuter votre helloworld exécutable. xxx

Si vous ne savez pas où votre chargeur est situé, veuillez utiliser Fichier commande. Si la commande n'est pas disponible, veuillez consulter PROJET . Ici serait le DD-WRT officiel TUT ici


0 commentaires