Кросс-компиляция для маршрутизатора MIPS от x86 - PullRequest
10 голосов
/ 20 января 2011

Моя конечная цель - собрать беспроводные инструменты для моего старого модема / маршрутизатора Actiontec, чтобы я мог настроить его как мост беспроводной связи к Ethernet.В настоящее время его беспроводные функции (по-видимому) управляются тем же двоичным файлом, который управляет большей частью веб-интерфейса, но похоже, что они использовали библиотеку, которую беспроводные инструменты используют внутри, по крайней мере, для некоторых функций.

Я имеюникогда раньше не кросс-компилировал для другой архитектуры ЦП и не уверен, как полностью идентифицировать то, что мне нужно сделать.Я пытаюсь использовать uClibc, поскольку он, кажется, используется в остальной части системы, но я не уверен, как настроить buildroot для среды модемов.Я сделал лучшее предположение о том, что конфигурация должна основываться на информации из proc ниже, но что-то не так, поскольку простое приложение C, которое возвращает только 0, скомпилированное с ним, не может работать должным образом.

# cat /proc/version 
Linux version 2.4.17_mvl21-malta-mips_fp_le (root@localhost.localdomain) (gcc version 2.95.3 20010315 (release/MontaVista)) #1 Thu Apr 21 18:04:37 PDT 2005
# cat /proc/cpuinfo 
processor               : 0
cpu model               : MIPS 4KEc V4.8
BogoMIPS                : 149.91
wait instruction        : no
microsecond timers      : yes
extra interrupt vector  : yes
hardware watchpoint     : yes
VCED exceptions         : not available
VCEI exceptions         : not available

Ответы [ 2 ]

9 голосов
/ 20 января 2011

Вы правы, вам нужен правильный mips toolchain для кросс-компиляции вашего приложения, и Buildroot может это сделать. Но вам может понадобиться настроить параметры menuconfig в buildroot. В зависимости от значения file ваши параметры могут изменяться. В моей системе бинарные приложения сообщают следующее:

ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1 (SYSV)

Это опции, которые я включил для настройки меню моего Buildroot:

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  --->

Сама цепочка инструментов установлена ​​в / opt / cross-mips-buildroot . Вы можете найти компилятор и другие инструменты в / opt / cross-mips-buildroot / usr / bin /

Попробуйте скомпилировать простое приложение hello world и посмотреть, сможете ли вы запустить его внутри системы mips.

Примечание: эта конфигурация не будет создавать компилятор C ++. Если вам это нужно, вы можете grep LIBSTDCPP .config и проверить, включено ли это или нет, и изменить его на ваши лайки. Затем make menuconfig, чтобы это произошло.

1 голос
/ 21 января 2011

Выезд:

http://www.kegel.com/crosstool/

Это авторитетный сайт по кросс-компиляции в GCC.

...