Как написать Hello World для OpenWRT и/или dd-wrt

Я работаю над запуском программы Hello World на Linksys WRT54G-V4 под управлением dd-wrt или OpenWRT.

Прямо сейчас на этом маршрутизаторе работает dd-wrt по причинам, которые я объясню ниже. Я хотел бы переключить этот маршрутизатор на OpenWRT, потому что мне не удалось собрать dd-wrt или его набор инструментов. Я «предполагаю», что цепочка инструментов OpenWRT должна создавать исполняемые двоичные файлы, которые также будут работать на dd-wrt.

OpenWRT было довольно просто собрать, так как у него есть хорошая система сборки, управляемая через меню. Используя этот удобный инструмент, я создал цепочку инструментов, которая будет выполнять перекрестную компиляцию из моей машины x86 Ubuntu в цель MIPS.

Следуя инструкциям, я смог собрать OpenWRT и создать образы для brcm47xx и brcm63xx.

Например, вот успешная компиляция моей маленькой программы Hello World:

jim@ubuntu:~/Desktop/tests$ cat helloC.c
#include <stdio.h>
int main (int argc, char **argv)
{
  printf("Hello World\n");
  return 0;
}
jim@ubuntu:~/Desktop/tests$
jim@ubuntu:~/Desktop/tests$ mipsel-openwrt-linux-gcc -o HelloWorld helloC.c
jim@ubuntu:~/Desktop/tests$
jim@ubuntu:~/Desktop/tests$ file HelloWorld
HelloWorld: ELF 32-bit LSB executable, MIPS, MIPS32 version 1, dynamically linked (uses shared libs), with unknown capability 0xf41 = 0x756e6700, with unknown capability 0x70100 = 0x3040000, not stripped
jim@ubuntu:~/Desktop/tests$

К сожалению, когда я пытаюсь запустить HelloWorld на моем WRT54G-V4 с dd-wrt, я получаю ошибку seg.

Глядя на Википедию, вижу, что в этом роутере используется Broadcom BCM5352.

Когда я запускаю make menuconfig в каталоге OpenWRT/trunk, я не вижу опции для BCM5352, поэтому я не хочу прошивать свой маршрутизатор одним из образов, которые я создал в каталогах brcm47xx или brcm63xx. Я не хочу ошибаться и замуровывать роутер.

Вопрос 1. Какую конфигурацию Broadcom следует выбрать с помощью make menuconfig, чтобы настроить мой WRT54G-V4 с его чипсетом BCM5352?

Вопрос 2. Должен ли мой исполняемый файл HelloWorld, который я сгенерировал выше, запускаться непосредственно из командной строки на 54G, или я должен сделать его пакетом для http://www.gargoyle-router.com/wiki/doku.php?id=openwrt_coding ?

ТИА


person Jim In Texas    schedule 06.09.2012    source источник
comment
Я совсем не уверен, что вы правильно настроили свой инструментарий в Ubuntu :( Посмотрите здесь: wiki.openwrt.org/doc/devel/crosscompile   -  person paulsm4    schedule 06.09.2012
comment
Я смог заставить его работать, у меня не было правильной версии open-wrt. Я вернусь и отвечу на свой вопрос, что именно я сделал в последний раз.   -  person Jim In Texas    schedule 08.09.2012
comment
Круто - спасибо за продолжение :)   -  person paulsm4    schedule 08.09.2012


Ответы (1)


Вы можете следовать официальному руководству (от: http://www.dd-wrt.com/forum/viewtopic.php?p=21499&sid=de90601a8d51747d1c8ccec29284127d)

1. The helloworld.c source
Code:   
#include <stdio.h>

int main ( void ) {
        printf( "Hello world!\n" );
}   

2. Get and unpack the toolchain in your homedir
Code:   
cd ~
wget ftp://ftp.dd-wrt.com/sourcecode/toolchains.x86.debian.sp1.tar.bz2
tar -jxf toolchains.x86.debian.sp1.tar.bz2  

3. Add the path to your cross-compiler executable to your path environment variable and compile helloworld.c
Code:   
PATH=~/toolchains/4.1.0-uclibc-0.9.28/bin:$PATH mipsel-linux-uclibc-gcc helloworld.c -o helloworld  

4. Check if its correctly compiled with the cross-compiler
Code:   
file helloworld
helloworld: ELF 32-bit LSB executable, MIPS, version 1 (SYSV), dynamically linked (uses shared libs), not stripped  

5. Finally, transfer the helloworld binary file to your router, set the executable bit and run it.

Протестировано с Ubuntu 6.06.1 LTS.

person Pol Hallen    schedule 23.07.2016