Роутер EDUP, RTL8196C и напильник: Эпизод первый, сборка тулчейна.

Не так давно стал обладателем карманного роутера с DX’a. Из плюсов стоит отметить наличие батарейки и чехла в комплекте. На этом хорошее заканчивается.
После краткого знакомства с функционалом девайса понял, что без серьезной доработки напильником юзать сию поделку никак не катит.

Начал с того, что разобрал. Внутри заметен неотмытый флюс, криво припаянные диоды. Антенна одна, smdшная, хотя разведено на плате две. опознать бы рассыпушные кондеры, и можно было бы второй комплект напаять и внешнюю вывести. Но учитывая что их там овер 10 штук и он меньше 0603, желание как-то отпало.

Уарт нашелся легко и непринужденно, куда вскоре была впаяна PBSка.
Унутрях кривой реалтековый загрузчик и ведро 2.4 серии. Частота 390Mhz, ОЗУ – 32, ПЗУ 4 метра в виде SPI флешины, USB 2.0 EHCI.

Гугль выдал мне на RTL8196C большой жирный кукиш. опенврт, дд-врт и прочие на этот чип вроде как забили.

Но кое что я все же нашел. Первое – что человек из проекта Wive-NG ( sfstudio.livejournal.com ) явно богат SDK под этот чип, и русским народным матом ругается в адрес криворуких *** *** ****** изувечивших ядро. Пришлось под openid регистрировать аккаунт для мессаджей и комментов в жжшке и поспрашать человека, и вот что я выяснил:

* SDK есть под 2.6.30, но он его не даст ибо NDA подписал, но оно есть в виде тарболлов которые выкладывают под свои роутеры длинки и иже с ними.
* Собирать надо только наркоманским тулчейном реалтековцев ибо их чип куда-то прокачался от MIPS’a… не в ту сторону.

Ура, сказал я, и попер в сеть за сырцами. Выбор пал на сырцы от TEW-652BRP. Там тот же вроде как чип, и сдк явно внутри подойдет.
Тарболл представлял из себя матрешку. Изрядно задолбавшись распаковвывать архив внутри архива, я нашел там исходники ядра линуха, тулчейна и еще кучки бородатых сопутствующих пакетов на радость археологам.

Далее изучив сырца ядра, я пришел в некое недоумение. Предупреждение относительно качеста сырцов явно было к месту. Ради своей поделки там соорудили новую архитектуру rlx (копия arch/mips) куда добавили поддержку своего камня.

Ладно, их тулчейном, так их тулчейном. Поматюгавшись на их скрипт сборки, который предполагал наличие сырцов с /toolchain (Гадим в корень, ай-ай-ай). Ладно, не гордые, сделал там симлинк на внешний веник со всей этой кухней, начинаем собирать тулчейн. И вот тут меня ждали приключения на всю мою голову. Слабонервным лучше не читать дальше.

Первая бага, от которой сборка вывалилась с ошибкой связана была с uclibc решилась вот этим патчем:
http://linux.derkeiler.com/Mailing-Lists/Kernel/2009-03/msg04460.html
Вторая бага при сборке gcc (кстати, 3.4.6, вот некроманты, а?). Жаловалось на отсутствующий файл c-parse.c
При помощи гугла и медитации допер, что этот файлик генерируется bison’ом, а оный генерировал в той версии файлик правильно, так как в нем была ошибка, и чтобы более новый bison, стоящий у меня в системе этот файлик сгенерил, надо прокрутить странички на 3 наверх, найти его выхлоп (который почему-то в мейкфайле игнорируется и за ошибку не считается), и запомнить строчки, на которые он материться. Далее открыть этот c-parse.y и заменить $$ на $<ttype>$, и все пойдет дальше.

Но если мы обрадовались, что теперь все пройдет как по маслу и завершиться успешно, то нас ждет великий облом. Следующая бага описана и решается здесь:

http://wiki.ok-labs.com/forum#nabble-td3526733

Пожалуй, это была последняя по существу. Правда? Нет! Почти в самом конце, когда паковался libgcc.a я узрел
*** buffer overflow detected ***: mips-linux-ar terminated

По счастью, имея дело с софтом разной степени бородатости и уродства, наученный горьким опытом, я держу при себе сразу все версии gcc которые есть в репозиториях бубунты, да и еще парочку самособранных, со времен когда я LFS собирал. Сборка при помощи gcc 4.1 решила проблему и я получил рабочий тулчейн. Если код, собранный им еще и заработает на роутере… вообще хорошо будет.

Продолжение следует.

2 thoughts on “Роутер EDUP, RTL8196C и напильник: Эпизод первый, сборка тулчейна.”

  1. Hello dude, I trying to deal with this problem and for your post apparently you solve. Could you give a hand? I’m trying to compile the di524 source code and after corrections in the bugs(redir error , reinstall gcc-4.1). I get stuck in this part. I already install:
    apt-get install flex
    apt-get install genromfs
    apt-get install bison
    apt-get install libncurses5-dev
    apt-get install ncurses-base
    apt-get install gcc-4.1
    and update version files to compiler with gcc-4.1.0

    But I get this error:

    droot/build_mips/staging_dir/mips-linux-uclibc/bin/ -B/root/di524/buildroot/build_mips/staging_dir/mips-linux-uclibc/lib/ -isystem /root/di524/buildroot/build_mips/staging_dir/mips-linux-uclibc/include -O2 -DIN_GCC -DCROSS_COMPILE -DUSE_UCLIBC -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -isystem ./include -fPIC -g -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -I. -I. -I/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc -I/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc/. -I/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc/config -I/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc/../include -DFINE_GRAINED_LIBRARIES -DL_usi_to_df -c dp-bit.c -o libgcc/./_usi_to_df.o
    /root/di524/buildroot/toolchain_build_mips/gcc-3.3.5-initial/gcc/xgcc -B/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5-initial/gcc/ -B/root/di524/buildroot/build_mips/staging_dir/mips-linux-uclibc/bin/ -B/root/di524/buildroot/build_mips/staging_dir/mips-linux-uclibc/lib/ -isystem /root/di524/buildroot/build_mips/staging_dir/mips-linux-uclibc/include -O2 -DIN_GCC -DCROSS_COMPILE -DUSE_UCLIBC -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -isystem ./include -fPIC -g -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -I. -I. -I/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc -I/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc/. -I/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc/config -I/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc/../include -DL_eprintf -c /root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc/libgcc2.c -o libgcc/./_eprintf.o
    /root/di524/buildroot/toolchain_build_mips/gcc-3.3.5-initial/gcc/xgcc -B/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5-initial/gcc/ -B/root/di524/buildroot/build_mips/staging_dir/mips-linux-uclibc/bin/ -B/root/di524/buildroot/build_mips/staging_dir/mips-linux-uclibc/lib/ -isystem /root/di524/buildroot/build_mips/staging_dir/mips-linux-uclibc/include -O2 -DIN_GCC -DCROSS_COMPILE -DUSE_UCLIBC -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -isystem ./include -fPIC -g -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -I. -I. -I/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc -I/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc/. -I/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc/config -I/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc/../include -DL_bb -c /root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc/libgcc2.c -o libgcc/./_bb.o
    /root/di524/buildroot/toolchain_build_mips/gcc-3.3.5-initial/gcc/xgcc -B/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5-initial/gcc/ -B/root/di524/buildroot/build_mips/staging_dir/mips-linux-uclibc/bin/ -B/root/di524/buildroot/build_mips/staging_dir/mips-linux-uclibc/lib/ -isystem /root/di524/buildroot/build_mips/staging_dir/mips-linux-uclibc/include -O2 -DIN_GCC -DCROSS_COMPILE -DUSE_UCLIBC -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes -isystem ./include -fPIC -g -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -I. -I. -I/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc -I/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc/. -I/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc/config -I/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc/../include -DL__gcc_bcmp -c /root/di524/buildroot/toolchain_build_mips/gcc-3.3.5/gcc/libgcc2.c -o libgcc/./__gcc_bcmp.o
    rm -rf ./libgcc.a
    mips-linux-uclibc-ar rc ./libgcc.a libgcc/./_muldi3.o libgcc/./_negdi2.o libgcc/./_lshrdi3.o libgcc/./_ashldi3.o libgcc/./_ashrdi3.o libgcc/./_ffsdi2.o libgcc/./_clz.o libgcc/./_cmpdi2.o libgcc/./_ucmpdi2.o libgcc/./_floatdidf.o libgcc/./_floatdisf.o libgcc/./_fixunsdfsi.o libgcc/./_fixunssfsi.o libgcc/./_fixunsdfdi.o libgcc/./_fixdfdi.o libgcc/./_fixunssfdi.o libgcc/./_fixsfdi.o libgcc/./_fixxfdi.o libgcc/./_fixunsxfdi.o libgcc/./_floatdixf.o libgcc/./_fixunsxfsi.o libgcc/./_fixtfdi.o libgcc/./_fixunstfdi.o libgcc/./_floatditf.o libgcc/./_clear_cache.o libgcc/./_trampoline.o libgcc/./__main.o libgcc/./_exit.o libgcc/./_absvsi2.o libgcc/./_absvdi2.o libgcc/./_addvsi3.o libgcc/./_addvdi3.o libgcc/./_subvsi3.o libgcc/./_subvdi3.o libgcc/./_mulvsi3.o libgcc/./_mulvdi3.o libgcc/./_negvsi2.o libgcc/./_negvdi2.o libgcc/./_ctors.o libgcc/./_divdi3.o libgcc/./_moddi3.o libgcc/./_udivdi3.o libgcc/./_umoddi3.o libgcc/./_udiv_w_sdiv.o libgcc/./_udivmoddi4.o libgcc/./_pack_sf.o libgcc/./_unpack_sf.o libgcc/./_addsub_sf.o libgcc/./_mul_sf.o libgcc/./_div_sf.o libgcc/./_fpcmp_parts_sf.o libgcc/./_compare_sf.o libgcc/./_eq_sf.o libgcc/./_ne_sf.o libgcc/./_gt_sf.o libgcc/./_ge_sf.o libgcc/./_lt_sf.o libgcc/./_le_sf.o libgcc/./_unord_sf.o libgcc/./_si_to_sf.o libgcc/./_sf_to_si.o libgcc/./_negate_sf.o libgcc/./_make_sf.o libgcc/./_sf_to_df.o libgcc/./_sf_to_tf.o libgcc/./_thenan_sf.o libgcc/./_sf_to_usi.o libgcc/./_usi_to_sf.o libgcc/./_pack_df.o libgcc/./_unpack_df.o libgcc/./_addsub_df.o libgcc/./_mul_df.o libgcc/./_div_df.o libgcc/./_fpcmp_parts_df.o libgcc/./_compare_df.o libgcc/./_eq_df.o libgcc/./_ne_df.o libgcc/./_gt_df.o libgcc/./_ge_df.o libgcc/./_lt_df.o libgcc/./_le_df.o libgcc/./_unord_df.o libgcc/./_si_to_df.o libgcc/./_df_to_si.o libgcc/./_negate_df.o libgcc/./_make_df.o libgcc/./_df_to_sf.o libgcc/./_df_to_tf.o libgcc/./_thenan_df.o libgcc/./_df_to_usi.o libgcc/./_usi_to_df.o libgcc/./unwind-dw2.o libgcc/./unwind-dw2-fde.o libgcc/./unwind-sjlj.o libgcc/./unwind-c.o libgcc/./_eprintf.o libgcc/./_bb.o libgcc/./__gcc_bcmp.o
    *** buffer overflow detected ***: mips-linux-uclibc-ar terminated
    ======= Backtrace: =========
    /lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)[0x401326d8]
    /lib/tls/i686/cmov/libc.so.6[0x40130800]
    /lib/tls/i686/cmov/libc.so.6[0x4012fef8]
    /lib/tls/i686/cmov/libc.so.6(_IO_default_xsputn+0xc8)[0x400a5a78]
    /lib/tls/i686/cmov/libc.so.6(_IO_padn+0xed)[0x40098e6d]
    /lib/tls/i686/cmov/libc.so.6(_IO_vfprintf+0x27b7)[0x4007a177]
    /lib/tls/i686/cmov/libc.so.6(__vsprintf_chk+0xa4)[0x4012ffa4]
    /lib/tls/i686/cmov/libc.so.6(__sprintf_chk+0x2d)[0x4012feed]
    mips-linux-uclibc-ar[0x8050ec2]
    mips-linux-uclibc-ar[0x804eefb]
    mips-linux-uclibc-ar[0x8051d08]
    mips-linux-uclibc-ar[0x8055ae8]
    mips-linux-uclibc-ar[0x804bb25]
    mips-linux-uclibc-ar[0x804c6e8]
    /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe5)[0x4004e685]
    mips-linux-uclibc-ar[0x8049681]
    ======= Memory map: ========
    08048000-080da000 r-xp 00000000 08:01 275068 /root/di524/buildroot/build_mips/staging_dir/bin/mips-linux-uclibc-ar
    080da000-080db000 r–p 00091000 08:01 275068 /root/di524/buildroot/build_mips/staging_dir/bin/mips-linux-uclibc-ar
    080db000-080dc000 rw-p 00092000 08:01 275068 /root/di524/buildroot/build_mips/staging_dir/bin/mips-linux-uclibc-ar
    080dc000-080e0000 rw-p 00000000 00:00 0
    08a3b000-08d07000 rw-p 00000000 00:00 0 [heap]
    40000000-4001a000 r-xp 00000000 08:01 974869 /lib/ld-2.8.90.so
    4001a000-4001b000 rw-p 00000000 00:00 0
    4001b000-4001c000 r–p 0001a000 08:01 974869 /lib/ld-2.8.90.so
    4001c000-4001d000 rw-p 0001b000 08:01 974869 /lib/ld-2.8.90.so
    4001d000-40029000 rw-p 00000000 00:00 0
    40034000-40036000 r-xp 00000000 08:01 984356 /lib/tls/i686/cmov/libdl-2.8.90.so
    40036000-40037000 r–p 00001000 08:01 984356 /lib/tls/i686/cmov/libdl-2.8.90.so
    40037000-40038000 rw-p 00002000 08:01 984356 /lib/tls/i686/cmov/libdl-2.8.90.so
    40038000-40190000 r-xp 00000000 08:01 984350 /lib/tls/i686/cmov/libc-2.8.90.so
    40190000-40192000 r–p 00158000 08:01 984350 /lib/tls/i686/cmov/libc-2.8.90.so
    40192000-40193000 rw-p 0015a000 08:01 984350 /lib/tls/i686/cmov/libc-2.8.90.so
    40193000-40196000 rw-p 00000000 00:00 0
    401ab000-401b8000 r-xp 00000000 08:01 974911 /lib/libgcc_s.so.1
    401b8000-401b9000 r–p 0000c000 08:01 974911 /lib/libgcc_s.so.1
    401b9000-401ba000 rw-p 0000d000 08:01 974911 /lib/libgcc_s.so.1
    bf809000-bf82c000 rw-p 00000000 00:00 0 [stack]
    ffffe000-fffff000 r-xp 00000000 00:00 0 [vdso]
    make[3]: *** [libgcc.a] Aborted
    make[3]: *** Deleting file `libgcc.a’
    make[3]: Leaving directory `/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5-initial/gcc’
    make[2]: *** [libgcc.a] Error 2
    make[2]: Leaving directory `/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5-initial/gcc’
    make[1]: *** [all-gcc] Error 2
    make[1]: Leaving directory `/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5-initial’
    make: *** [/root/di524/buildroot/toolchain_build_mips/gcc-3.3.5-initial/.compiled] Error 2
    make: Leaving directory `/root/di524/buildroot’

    I really appreciate any help you could give me.
    Cheers,
    Tyller

  2. Try a different gcc version. And check if you ACTUALLY use gcc-4.1. either export CC=gcc-4.1 becfore make, ot the update-alternartives method. Don’t remember which one worked.

Добавить комментарий