Вот такой AQemu... на малине

Тема в разделе "Raspberry Pi", создана пользователем Igor68, 7 мар 2017.

  1. Igor68

    Igor68 Гуру

    Доброго времени суток!
    Было такое... вчера... Стоял Raspbian на Raspberry Pi 3... но вот захотел виртуальную машинку заиметь на ней только с целью иметь кросс-компилятор, который запускается только на x86 машине под линуксом. Тупо только GCC и ничего более... для MOXA IA240LX/UC-7112Lx-plus. В принципе поставил тупо Qemu и AQemu... в консоли SSH. После просто вышел, при этом с правами ROOT командой halt как всегда. Думал на работе настрою... всё-таки инструмент с помощью которого много делал. А нет! Загрузка просто сдохла... домой явился сразу к телеку с малиной... цветной экран... как без загрузочного образа. Сразу скажу - нет SWAP и всего, что пишет на карту постоянно. Может имеется у кого опыт с запуском приложений (без конфузов - DOSBOX не в счёт). Следует отметить, что подобным действием не первый раз в таком конфузе... раза четыре делал такие попытки и всё время клялся не ставить подобный софт. Ну надо мне GCC - кросс-компилятор, который запускается только на x86 платформе. Не всегда удобно с ноутбуком... а тут подключил малину по ETHERNET к контроллеру и с помощью мобильника и блютуз клавы по SSH правишь недоделанный собственный софт... в том мете где и подступа нет.
    Спасибо!
     
  2. Igor68

    Igor68 Гуру

    Сразу прошу прощения за возможные повторения ... но:
    https://100.org.ua/raspberry-pi-optimisation-of-usb-storage/
    это пригодилось после восстановления системы... точнее sd карты на Raspberry Pi 3. Скачал посвежее (jessie)... ранее был (weezy). и выключить swap по старинке в /etc/rc.local не получилось при старте (перезапуске). После этого нормально всё. Установил всё на "старую" (прежнюю microSD)... всё обвалилось после AQemu - хотел запустить эмуляцию x86 машины... печально как видите!
     
  3. rkit

    rkit Гуру

    Купите микрокомпьютер на x86. Эмулятор на малине всё равно будет невообразимо медленным.
     
  4. Igor68

    Igor68 Гуру

    Мне надо эмулировать только Linux машину, в которой только кросс-компилятор для MOXA IF240(241)LX/UC7112Lx-plus. Потому как нет другого компилятора. Хотя если x86 2005 года может запускать несколько виртуальных машин... сомневаюсь что Cortex(ARM) который и так на порядок выше чем x86 не может! Да ещё и 64 а не 32 бита, как все остальные ARMы
     
  5. rkit

    rkit Гуру

    Вы сильно заблуждаетесь, думая что arm производительнее x86.
    И в x86 давно есть инструкции для эмуляции x86-машин, поэтому там это происходит с практически нулевыми потерями. А хостить x86 на arm это ужасная затея.
     
  6. Igor68

    Igor68 Гуру

    Спорить не буду... скажу одно... Эмуляция на очень стареньком COMPAQ iPAQ 3800 который построен даже не на PXA(XSCALE) а ещё на STRONGARM SA1110 вполне прилично эмулирует x86. DOSBOX с запуском Volkov Commander и приложений некоторых. Следует учесть, что в него не встроен сопроцессор с плавающей запятой не говоря о другом. И действительно в таких местах тормоза. А на Motoming A1200 у которого PXA270 но очеь мало ОЗУ windows 3.0 да тот самый под DOS и ещё всё это в DOSBOX конечно работал хреново... на уровне "попробовать". Только не надо сравнивать команды целочисленные, типа регистр-регистр. ARM на порядок выше и времени на выполнение их требуется меньше. Да и x86 не стоит на месте я понимаю и идеология ARM вполне могла быть на них реализована... было бы глупо и наивно считать если это не так. Понимаю, что в x86 добавили набор низкоуровневых команд наподобие:
    ADD R1,R2,R3 (сложение двух источников в один приёмник) - не используется аккумулятор (по аналогии с x86 регистр AX(AH;AL))вообще. В KEIL после компиляции при просмотре листинга результата этой командой заменяется явное перемещение из регистра в регистр. А поле условий в каждой команде!!! А выполнение целочисленное умножения за один-два периода тактового генератора... А то, что размер команды фиксированной длины - ну как у всех RISC машин в отличии от CISC... думаю они тоже не стоят на месте. По крайней мере остову для сигнальных процессоров берут не у x86 а у ARM... посмотрите в сторону OMAP от Texas Instruments. В любом случае старичок iPAQ 3800 при своих 100 c чем то мегагерц в своё время имел как щенка тогда еще крутого 486 только родившихся пеньтиумов. А эмуляция я уже сказал зачем мне нужна... и этот "свисток" с UBUNTU на основе x86 по ходу с Али добирается не с помощью транспортных средств, а своим ходом.
     
  7. AlexU

    AlexU Гуру

    А если собрать нужный GCC под ARM? Или есть какие-то ограничения, что не позволят собрать такой кросс-компилятор под ARM?
    Малина и так не ахти как "бегает". А, если запускать на ней эмулятор, а в эмуляторе компилятор, то это может сильно затормозить и так не быструю Малину.
     
    Igor68 нравится это.
  8. rkit

    rkit Гуру

    Стандартная практика среди производителей железа - дать тулчейн только в виде бинарников, да еще под NDA каким-нибудь.
     
    Igor68 нравится это.
  9. Igor68

    Igor68 Гуру

    Ограничения конечно есть... они во мне. Точнее в моём неумении делать это. А подскажите в каком месте малина не ахти как "бегает"?
     
    Последнее редактирование: 20 мар 2017
  10. AlexU

    AlexU Гуру

    Это скорее сугубо субъективное ощущение. Для кого-то Малинка может показаться довольно шустрой.
    Это может оказаться гораздо проще, чем думаете. Есть такая штука как http://crosstool-ng.org/, которая позволяет создавать кросс-тулчейны под разные платформы.
    Так же бегло ознакомился с MOXA IA240LX -- эта штука вроде как на ARM9 да ещё и под управлением ОС Linux. Если всё правильно понял, то скорее всего ни какого эмулятора не понадобится для того, чтобы компилировать код на Малине, а может даже и ни какого кросс-компилятора не понадобится. Хотя всякое может случиться... Мои догадки могут оказаться ложными.
     
    Igor68 нравится это.
  11. Igor68

    Igor68 Гуру

    По опыту... на x86... debian(32бита) всё работает и код компилируется нормально, а на debian(64бита) косяк. Пришлось доставлять некоторые комполненты. Сам компилятор идёт как есть с библиотеками... и распаковывается автоматом из bash скрипта при его запуске. Тоесть в скрипте и средства "установки"(копирования в /usr/local...) и содержимое архива в нём же - интересное решение.
     
  12. Igor68

    Igor68 Гуру

    Смотрится начало скрипта так (простите, что не вставил тег кода - вставляется болле 1200 лет!!!). Сам скрипт (внутри него архив весит 147,4 МБ):
    Код (Bash):

    #!/bin/sh

    SCRIPT="$0"
    case "${SCRIPT}" in
    /*)
       ;;
    *)
       if [ -f "${SCRIPT}" ]
       then
         SCRIPT="`pwd`/${SCRIPT}"
       else
         SCRIPT="`which ${SCRIPT}`"
       fi
       ;;
    esac

    cd /

    if [ ! -f "${SCRIPT}" ]
    then
       echo "Cannot find the location of the install script ($SCRIPT) ?"
       exit 1
    fi

    SKIP=`awk '/^__ARCHIVE_FOLLOWS__/ { print NR + 1; exit 0; }' ${SCRIPT}`

    if id | grep root > /dev/null
    then
       :
    else
       echo "You must be root to install these tools."
       exit 1
    fi

    clear
    echo ##################################################################
    echo Welcome to MOXA ARM Linux platform toolchain installer.
    echo This toolchain fix from original arm-linux compiler v4.2.1.
    echo Any problem please contact support@moxa.com.tw
    echo ##################################################################

    echo Press the number:
    echo 1.Install Linux cross compiler tool.
    echo 2.Uninstall Linux cross compiler tool.
    echo 3.Exit or CTRL+C

    read A

    if [ "$A" = "1" ] ; then
       rm -rf /usr/local/mxscaleb/bin/xscale-linux-*
       tail -n +${SKIP} ${SCRIPT} | gunzip | tar xvf -
       exit 0
    fi

    if [ "$A" = "2" ] ; then
    {
       clear
       echo "WARNING!!!!!"
       echo "Uninstall Tool-chain will remove file:"
       echo "/usr/local/arm-linux"
       echo "press any key to continue or Ctrl+C to exit"
       read B
       rm -rf /usr/local/arm-linux /usr/local/lib/gcc/arm-linux/4.2.1 /usr/local/libexec/gcc/arm-linux/4.2.1
       rm -f /usr/local/bin/arm-linux-*
       echo "Uninstall complete!"
       exit 0
    }
    fi
    if [ "$A" = "3" ] ; then
       exit 0
    fi

    exit 0
    __ARCHIVE_FOLLOWS__
    .......M...Y   xTU..F..AD..}.....=,..B...2Y.A.x.z.*..^..TV ....$.%.. .GH.. .b;.i+...3j..-:..7.y......t..7..>...{.=....s..+CS.{......9.<....n....z.##.H.....hhXDHXDtxD.%$4<<:."D.....14]T...*..Sr.k...c..._:.....?..hTdxxTtD.....v.....4..ST..8.~N.S.DD......?*",......9.....4....#C......r....\...`.....:.$8*"..............p...O.......AB..VA.s$...`.uQ..5)8p...x.U....Cb.
    .#GF...h.......0....*.S%IHU.u...0N1dR.R. !^..2R..ti.WU...#....-.o.-.+.`.eA...MW]Y..   .].e.pE.r..+;....).TAwJ...9..d........,..GH6.<.....I.F........B........-H.ZW.\I.h,..   d..Q7.T..kJ %-../xD....]=..]p.......w.Jr...x.,I04).......2..&LJO.b.2..........$.;.Z.r%hr.x=.RLN....S8H..q)..hG......L..q.iIq....I)B..........."$..$OJ....T.4J..?..l?..1.......3.?.,.....+..6..Kv.....o.d.......${6...W. +z..S].....>.}n..   .#.4..#   ...&   ..T.T....$.Q4..}0F.   .K...... !=5&8......b.o.....Dh....F......U.4.".].._....6Y.p.v.'..k..Cn8]6'yD.=.|..g.............+k.....5aR.#ht..C..<^&.d...............".4#K.].aFH..=...c(.$..S"9".F.OF.%.D.d...$E.F!....l.....C.....3..DI.../f...8....A..d2.X@.LQ....r....2..V1...R. ......)bf.......k........t....e8...Muyu.......C6...A.e)n"" @V.I...S' .1"r..P....[.Q...r@.M...vYQ.JAZr..   )gW..m...I;4k....vQ..$...E....*I@s..t...]3U.%....+.n...kRb.y...
    ..tk\.y.....n+....u........s>.]Z@.j...uE.M+.-8(..J@..sN.h.e3...B}..w7O....gc'H...N.E.:.,U...pJ..N1...TsE]s....4d...=..jX'.w...EI`.....Y.........<..[..:.....,iR...:19X2l....4..,....O..3........N.O tS.6..V.   ).pB
     
    ....Убился всавлять тег
     
  13. AlexU

    AlexU Гуру

    Если так уж нужно запустить кросс-компиляцию на Малине, то я бы попробовал поставить crosstool-ng. И, если всё пройдёт гладко, то с его помощью установил бы тулчейн 'arm-unknown-linux-uclibcgnueabi' (для процессора ARM9 - ядро ARMv5). И попробовал бы собрать что-нибудь для MOXA IA240LX с целью проверки работоспособности тулчейна. Если всё срастётся, то не надо будет заморачиваться с эмулятором.
    Правда уже проглядываются потенциальные проблемы -- согласно инфе на сайте crosstool-ng тулчейн идёт с заголовочными файлами для ядра linux 4.3, а в описании устройства говорится, что используется ядро linux 2.6.9. Но теоретически библиотеки и заголовочные файлы можно подменить -- взять из официального тулчейна.
     
  14. Igor68

    Igor68 Гуру

    Всял первый по списку в :
    crosstool-ng-0.0.1.tar.bz2
    И после распаковки... далее запустил (прочитав сам Makefile в корне):
    Код (Bash):

    emo-5@emo-5:~/temp/crosstool-ng-0.0.1$ make help
    Available make targets (*: default target):

    General purpose configuration targets:
      config  - Update current config using a line-oriented program
      menuconfig  - Update current config using a menu based program
      oldconfig  - Update current config using a provided .config as base

    Preconfigured configuration targets:
      armeb-unknown-linux-gnu_config
      armeb-unknown-linux-uclibc_config
      arm-qemu-linux-uclibc_config
      i586-geode-linux-uclibc_config
      i686-unknown-linux-uclibc_config

    Build targets:
    * build  - Build the toolchain
      clean  - Remove generated files
      distclean  - Remove generated files, configuration and build directories
      updatetools  - Update the config tools
    emo-5@emo-5:~/temp/crosstool-ng-0.0.1
     
    Это получил... и возникли опасения (в выленном):
    armeb-unknown-linux-uclibc_config
    arm-qemu-linux-uclibc_config
    i586-geode-linux-uclibc_config
    i686-unknown-linux-uclibc_config
    Тоесть это для ucLinux - не Linux (хотя такая машинка тоже в наличии: MOXA UC7101, но на неё планов нет в плане дальнейшего продвижения).
    вот то что установлено для ucLinux (после соответствующего скрипта установки для UC7101)
    Код (Bash):

    emo-5@emo-5:~/temp/crosstool-ng$ arm
    arm2hpdl  arm-elf-as  arm-elf-elf2flt  arm-elf-gcc  arm-elf-nm  arm-elf-protoize  arm-elf-size  arm-elf-unprotoize
    arm-elf-addr2line  arm-elf-c++  arm-elf-flthdr  arm-elf-ld  arm-elf-objcopy  arm-elf-ranlib  arm-elf-strings
    arm-elf-ar  arm-elf-c++filt  arm-elf-g++  arm-elf-ld.real  arm-elf-objdump  arm-elf-readelf  arm-elf-strip
     
    Это для arm-elf-....
    Для arm-linux-....(gcc) ничего не ставилось и в Makefile путь до компилятора указывается конкретно:
    Код (Bash):

    PREFIXPATH=/usr/local/arm-linux/bin
    CC=$(PREFIXPATH)/arm-linux-gcc
     
    Потому и пришла в голову глупость:
    Каким-то образом откомпилировать bin-утилиты... как исполняемые файлы и "скормить" им копии библиотек ну как Вы и сказали.

    Но пока ничего не скачивал.
    Помучаюсь... Попробую... А Вдруг?! Правда в идеале на самом бы IA240LX запустить компиляцию. Но это смешно конечно!
    Спасибо! Попробую... скачать по wget и т.д. Но это уже дома.
     
    Последнее редактирование: 21 мар 2017
  15. AlexU

    AlexU Гуру

    Этим (компиляцией бинарников -- binutils, gcc и т.п.) как раз и занимается crosstool-ng. Он скачивает исходники и собирает их. Иными словами это автоматизация процесса сборки нужного тулчейна.
    К слову, с его помощью можно собрать более "свежий" тулчейн для AVR (avr-gcc будет версии 6.3, а не 4.9 как в комплекте Arduino IDE, и вроде как avr-libc должна быть версии 2.0, а не 1.8).
    Что касается uclibc, то я мог ошибиться предложив этот вариант тулчейна. Вам должно быть виднее, что за "железяка" и какой тулчейн нужен для неё. Crosstool-ng предлагает разные варианты для разных версий ARM.
    Только лучше попробовать сначала самую свежую версию -- 1.22.0.
     
    Igor68 нравится это.
  16. AlexU

    AlexU Гуру

    Да, забыл. Перед использованием crosstool-ng его самого нужно сначала собрать (стандартная последовательность команд):
    Код (Bash):
    ./bootstrap
    ./configure
    make
    make install
    Потом можно посмотреть список тулчейнов, которые он сможет собрать:
    Код (Bash):
    ct-ng list-samples
    и затем собрать нужный -- вроде как:
    Код (C++):
    mkdir <имя_тулчейна>
    cd <имя_тулчейна>
    ct-ng <имя_тулчейна>
    т.е. создаём директорию для тулчейна, а потом в ней производим сборку тулчейна.
    Но точно не помню (более полгода прошло с последнего запуска -- собирал для PowerPC), поэтому лучше посмотрите документацию.
     
    Igor68 нравится это.