Jump to content

PoltoS

Forum Members
  • Posts

    14
  • Joined

  • Last visited

Posts posted by PoltoS

  1. Как-то не вышло... эта и многие похожие ф-ции очень платформо зависимы и написаны на асме для соответствующей платформы. Выдирать без глубокого анализа не выйдет (для mips там даже нет ясного кода - похоже какой-то generic код идёт, для тех платформ, где нет специфичной asm реализации)...

    Также удивило, что nearbyint есть, а nearbyintf нет - они, вроде, вместе должны были быть. Или я ошибаюсь? Может их явно вырезали зачем-то?

    @McMCC а когда планируется ? Или можем в uclibc как-то это явно добавить?

    Вообще, странно, __USE_ISOC99 должен и в uClibc это добавлять....

    В итоге решил проблему путём добавления вот такого хака (без асма) в проект

    (выдержка из сурсов самой uClibc)

    #define WRAPPER1(func) \

    float func##f (float x) \

    { \

    return (float) func((double)x); \

    }

    WRAPPER1(nearbyint)

    Теперь проверим как это всё живёт на практике.

  2. Очевидная мысль отредактировать c++config.h и пересобрать toolchain не помогла....

    ./build_dir/toolchain-mipsel-linux-uclibc/tools-mipsel-linux-mips32r2/mipsisa32r2el-unknown-linux-uclibc/include/c++/4.9.3/mipsisa32r2el-unknown-linux-uclibc/bits/c++config.h:

    #undef _GLIBCXX_USE_C99_MATH_TR1

    заменил на

    #define _GLIBCXX_USE_C99_MATH_TR1 1

    После чего make toolchain/clean и make

    Может кто знает, как полностью пересобрать libm с этими расширениями?

  3. Приветствую!

    При сборке большого проекта под Keenetik обнаружилось остутствие функций типа nearbyintf в libm.so. Наверняка эти ф-ции как-то можно включить при сборке toolchain. Увы, используемая софтина слепо полагается на C99 и C++11, а условие присутствия этих функций в man определены так:

    nearbyint(), nearbyintf(), nearbyintl():

    _XOPEN_SOURCE >= 600 || _POSIX_C_SOURCE >= 200112L ||

    _ISOC99_SOURCE;

    or cc -std=c99

    Что посоветуете?

  4. ... внутри есть параметр CONFIG_KEMBTK_UCLIBC_PTHREADS_DEBUG_SUPPORT, укажите ему "y". Собранную либу можно положить ко всем остальным, либо указать в gdb отдельно - set libthread-db-search-path [path]...

    Спасибо, не догадался собрать тулчейн, да и конфиг на знал, где брать. Собрал, положил в /opt/lib, также явно пробовал указать путь через libthread-db-search-path, но при старте потоков gdb всё так же ругается. Может нужно явно gdb пересобрать с этой либой?

    Кстати, при старте дебажной версии v8 (именно она подвисает, ради неё вся работа), gdb странно ругается

    (gdb) r
    Starting program: /opt/usr/bin/d8 
    warning: GDB can't find the start of the function at 0x2aaa8f60.
    
       GDB is unable to find the start of the function at 0x2aaa8f60
    and thus can't determine the size of that function's stack frame.
    This means that GDB may be unable to access that stack frame, or
    the frames below it.
       This problem is most likely caused by an invalid program counter or
    stack pointer.
       However, if you think GDB should simply search farther back
    from 0x2aaa8f60 for code which looks like the beginning of a
    function, you can increase the range of the search using the `set
    heuristic-fence-post' command.
    warning: Unable to find dynamic linker breakpoint function.
    GDB will be unable to debug shared library initializers
    and track explicitly loaded dynamic code.
    warning: GDB can't find the start of the function at 0x2aaa8f60.
    

    Что бы это могло значить? Обычно это означает битый стек, кажется.

    Ещё мне пришлось копировать бинарники из build_dir/target-ku_rd-mipsel-linux-uclibc/libv8/... т.к. те, что в пакете стрипнуты основательно и никакой debug информации уже не несут. Это как-то отключается через .config?

    Самопальные пакеты можно попробовать запустить в chroot-среде. Есть аплет chroot для busybox, есть отдельно в виде пакета coreutils-chroot.

    Александр, а gdb из Entware имеет поддержку потоков? или тоже нет?

  5. А могли бы ещё помочь допилить эти патчи для сборки с libthread_db. В toolchain эта либа не собирается, а привычной для OpenWRT галочки "Threads Debugging" (PTHREADS_DEBUG_SUPPORT) не найдено, да и упоминания этой константы тоже нет.

    А то вот такое вылезает: warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available.

  6. Этот Entware не совместим с собранными мной пакетами - ругается на них. Самопальные пакеты, собранные родной SDK нельзя одновременно с Enware использовать?

    Вообще, этак Entware просто кладезь полезных прог. Было бы здорово понять, как их одновременно запускать.

  7. Никто не собирал gdb пакет? Не хочется изобретать велосипед.

    Или пойти и изобрести? У нас софтина одна явно требует чего-то особенного на кинетике и работать не хочет (виснет с 100% загрузкой одного ядра). Без gdb не разобраться, что тут не так.

  8. А этот нодовский пакет тоже не работает, вроде.

    node также зависает при старте. Причём и node и d8 оба при запуске с --help выдают справку, т.е. скомпилированы корректно и запускаются. А вот при запуске v8 подвисают.

  9. Ну, я точно знаю, что стоит, т.к. на похожем железе пробовал уже.

    С ссылкой проблема в том, что мне нужно именно отдельно libv8, да и ещё конкретный коммит (команда V8 утомила раз в полгода менять C++ API, и мы зафиксировали для себя версию почти двухлетней давности. Тем более ECMA6 нам не надо). А с какими они параметрами собираются в Entware?

    В README нашёл:

    I cross-compiled node using the entware toolchain using the following commands.
    
    export CFLAGS='-mips32r2 -mtune=mips32r2'
    export CXXFLAGS='-mips32r2 -mtune=mips32r2'
    export LDFLAGS='-Wl,--dynamic-linker=/opt/lib/ld-uClibc.so.0 -Wl,-rpath,/opt/lib'
    export AR=mipsel-linux-ar
    export CC=mipsel-linux-gcc
    export CXX=mipsel-linux-g++
    export LINK=mipsel-linux-g++
    
    ./configure \
    --prefix=/opt  \
    --dest-os=linux \
    --dest-cpu=mipsel \
    --with-mips-float-abi=soft  \
    --without-snapshot
    
    make

  10. Идёт попытка собрать Google V8 под NDMS. Собираться-то собирается, но при запуске виснет. Есть мнение, что неверные параметры при компиляции, связанные с floating point. V8 к этому очень чувствителен.

    Итак, что имеем:

    Keenetic Ultra II

    SDK: ndwrt_gpl_2.06.A.6.0-12_011215

    собранный V8 (коммит 3606220e348799e7b5332d191a456bfd4ab67df1) со следующими параметрами (из Makefile):

    export GYPFLAGS=-Dv8_use_mips_abi_hardfloat=false -Dv8_can_use_fpu_instructions=false
    export V8_ARGS=library=shared i18nsupport=off $(ARCH).release
    export CFLAGS=-msoft-float
    export CXXFLAGS=-msoft-float
     

    При запуске d8 он зависает, а в логе имеем:

    kernel: FPU emulator disabled, make sure your toolchainwas compiled with software floating point support (soft-float)
     

    В процессе сборки параметры были такие:

    mipsisa32r2el-unknown-linux-uclibc-g++ '-DV8_TARGET_ARCH_MIPS' '-D__mips_soft_float=1' '-D_MIPS_ARCH_MIPS32R2' '-DENABLE_DEBUGGER_SUPPORT' '-DV8_DEPRECATION_WARNINGS' '-DV8_USE_DEFAULT_PLATFORM' '-DBUILDING_V8_SHARED' '-DV8_SHARED' '-DENABLE_HANDLE_ZAPPING'
     -I../src  -Wall -Werror -W -Wno-unused-parameter -pthread -fno-exceptions -pedantic -ansi -fPIC -EL -msoft-float -mips32r2 -Wa,-mips32r2 -EL -msoft-float -mips32r2 -Wa,-mips32r2 -fdata-sections -ffunction-sections -O3 -fdata-sections -ffunction-sections -O3 -Wnon-virtual-dtor -fno-rtti
     -MMD -MF /home/xxx/ndwrt_gpl_2.06.A.6.0-12_011215/build_dir/target-ku_rd-mipsel-linux-uclibc/libv8-3606220e348799e7b5332d191a456bfd4ab67df1/out/mipsel.release/.deps//home/xxx/ndwrt_gpl_2.06.A.6.0-12_011215/build_dir/target-ku_rd-mipsel-linux-uclibc/libv8-3606220e348799e7b5332d191a456bfd4ab67df1/out/mipsel.release/obj.target/v8_base.mipsel/src/mips/disasm-mips.o.d.raw
     -msoft-float -c -o /home/xxx/ndwrt_gpl_2.06.A.6.0-12_011215/build_dir/target-ku_rd-mipsel-linux-uclibc/libv8-3606220e348799e7b5332d191a456bfd4ab67df1/out/mipsel.release/obj.target/v8_base.mipsel/src/mips/disasm-mips.o
      ../src/mips/disasm-mips.cc
     

    Есть идеи, куда копать?

  11. 1. Речь об этом архиве? http://files.keenopt.ru/preinstall/Keenetic_Ultra_II/

    Т.е. просто те же пакеты из своего билда могу включить в минимальный комплект?

    2. Про SDK спасибо, не догадывался, что есть новый. А где взять? Это? http://files.keenopt.ru/gpl_release/2015-11-01/

    Может есть смысл SDK тоже в гите подавать?

    А то у меня только с feeds гит есть.

    UPD: собрал новую SDK. Включил opkg и opkg-install. Процесс прервался на этапе

    /home/xxx/ndwrt_gpl_2.06.A.6.0-12_011215/build_dir/target-ku_rd-mipsel-linux-uclibc/root-mt7621//usr/lib/opkg/info/busybox.postinst: not found
    * satisfy_dependencies_for: Cannot satisfy the following dependencies for busybox:
    * pkg_run_script: package "busybox" postinst script returned status 127.
    *** [/home/xxx/ndwrt_gpl_2.06.A.6.0-12_011215/build_dir/target-ku_rd-mipsel-linux-uclibc/root-mt7621/usr/lib/opkg/info/busybox.list] Error 255
    make[3]: Leaving directory `/home/xxx/ndwrt_gpl_2.06.A.6.0-12_011215/feeds/ndmfeed/busybox'
    *** [package/feeds/ndmfeed/busybox/install] Error 2
    make[2]: Leaving directory `/home/xxx/ndwrt_gpl_2.06.A.6.0-12_011215'
    *** [/home/xxx/ndwrt_gpl_2.06.A.6.0-12_011215/staging_dir/target-mipsel-linux-uclibc/stamp/.package_install] Error 2
    make[1]: Leaving directory `/home/xxx/ndwrt_gpl_2.06.A.6.0-12_011215'

    Судя по strace проблема в том, что зачем-то запускается скрипт postinstall на системе, где идёт сборка. Очевидно, /opt у меня нет.

    [pid 24311] execve("/home/xxx/ndwrt_gpl_2.06.A.6.0-12_011215/build_dir/target-ku_rd-mipsel-linux-uclibc/root-mt7621//usr/lib/opkg/info/busybox.postinst", ["/home/xxx/"..., "configure"], [/* 112 vars */]) = -1 ENOENT (No such file or directory)

    Файл /home/xxx/ndwrt_gpl_2.06.A.6.0-12_011215/build_dir/target-ku_rd-mipsel-linux-uclibc/root-mt7621//usr/lib/opkg/info/busybox.postinst содержит

    #!/opt/bin/ash
    if [ -f /opt/etc/shells.busybox ]; then
           ln -sfn bash /opt/bin/sh
    fi

    Я, конечно, временно решил проблему, но это нужно исправить

    sudo ln -s /bin/true /opt/bin/ash

  12. Решил совершить ещё одну попытку собрать свой пакет под NDMS. Но столкнулся со странной проблемой:

    поставил v2.06(AAUX.5)A7 и теперь по telnet зайти могу, а по ssh - нет. Я что-то забыл? Как его включить? или через opt поставить dropbear?

    Dec 29 18:49:50npkginflating "dropbear_2015.68-1_mt7621.ipk".

    Dec 29 21:49:53ndmOpkg::Manager: /tmp/mnt/IMAGES initialized.

    Dec 29 21:49:53ndmOpkg::Manager: invalid initrc "/opt/etc/initrc": no such file or directory, trying /opt/etc/init.d/.

    Dec 29 21:49:53ndmProcess: system failed [0xcffd093f], "/opt/bin/sh" executable not found.

    Dec 29 21:49:53ndmProcess: unable to create and initialize "Opkg shell" process.

    Dec 29 21:49:53ndmIo::Process: "Opkg shell" is broken.

    Dec 29 21:49:53ndmOpkg::Manager: process /opt/etc/init.d/S01dropbear: failed to start.

×
×
  • Create New...