Доброго времени суток! Было такое... вчера... Стоял Raspbian на Raspberry Pi 3... но вот захотел виртуальную машинку заиметь на ней только с целью иметь кросс-компилятор, который запускается только на x86 машине под линуксом. Тупо только GCC и ничего более... для MOXA IA240LX/UC-7112Lx-plus. В принципе поставил тупо Qemu и AQemu... в консоли SSH. После просто вышел, при этом с правами ROOT командой halt как всегда. Думал на работе настрою... всё-таки инструмент с помощью которого много делал. А нет! Загрузка просто сдохла... домой явился сразу к телеку с малиной... цветной экран... как без загрузочного образа. Сразу скажу - нет SWAP и всего, что пишет на карту постоянно. Может имеется у кого опыт с запуском приложений (без конфузов - DOSBOX не в счёт). Следует отметить, что подобным действием не первый раз в таком конфузе... раза четыре делал такие попытки и всё время клялся не ставить подобный софт. Ну надо мне GCC - кросс-компилятор, который запускается только на x86 платформе. Не всегда удобно с ноутбуком... а тут подключил малину по ETHERNET к контроллеру и с помощью мобильника и блютуз клавы по SSH правишь недоделанный собственный софт... в том мете где и подступа нет. Спасибо!
Сразу прошу прощения за возможные повторения ... но: https://100.org.ua/raspberry-pi-optimisation-of-usb-storage/ это пригодилось после восстановления системы... точнее sd карты на Raspberry Pi 3. Скачал посвежее (jessie)... ранее был (weezy). и выключить swap по старинке в /etc/rc.local не получилось при старте (перезапуске). После этого нормально всё. Установил всё на "старую" (прежнюю microSD)... всё обвалилось после AQemu - хотел запустить эмуляцию x86 машины... печально как видите!
Мне надо эмулировать только Linux машину, в которой только кросс-компилятор для MOXA IF240(241)LX/UC7112Lx-plus. Потому как нет другого компилятора. Хотя если x86 2005 года может запускать несколько виртуальных машин... сомневаюсь что Cortex(ARM) который и так на порядок выше чем x86 не может! Да ещё и 64 а не 32 бита, как все остальные ARMы
Вы сильно заблуждаетесь, думая что arm производительнее x86. И в x86 давно есть инструкции для эмуляции x86-машин, поэтому там это происходит с практически нулевыми потерями. А хостить x86 на arm это ужасная затея.
Спорить не буду... скажу одно... Эмуляция на очень стареньком 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 по ходу с Али добирается не с помощью транспортных средств, а своим ходом.
А если собрать нужный GCC под ARM? Или есть какие-то ограничения, что не позволят собрать такой кросс-компилятор под ARM? Малина и так не ахти как "бегает". А, если запускать на ней эмулятор, а в эмуляторе компилятор, то это может сильно затормозить и так не быструю Малину.
Стандартная практика среди производителей железа - дать тулчейн только в виде бинарников, да еще под NDA каким-нибудь.
Ограничения конечно есть... они во мне. Точнее в моём неумении делать это. А подскажите в каком месте малина не ахти как "бегает"?
Это скорее сугубо субъективное ощущение. Для кого-то Малинка может показаться довольно шустрой. Это может оказаться гораздо проще, чем думаете. Есть такая штука как http://crosstool-ng.org/, которая позволяет создавать кросс-тулчейны под разные платформы. Так же бегло ознакомился с MOXA IA240LX -- эта штука вроде как на ARM9 да ещё и под управлением ОС Linux. Если всё правильно понял, то скорее всего ни какого эмулятора не понадобится для того, чтобы компилировать код на Малине, а может даже и ни какого кросс-компилятора не понадобится. Хотя всякое может случиться... Мои догадки могут оказаться ложными.
По опыту... на x86... debian(32бита) всё работает и код компилируется нормально, а на debian(64бита) косяк. Пришлось доставлять некоторые комполненты. Сам компилятор идёт как есть с библиотеками... и распаковывается автоматом из bash скрипта при его запуске. Тоесть в скрипте и средства "установки"(копирования в /usr/local...) и содержимое архива в нём же - интересное решение.
Смотрится начало скрипта так (простите, что не вставил тег кода - вставляется болле 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 ....Убился всавлять тег
Если так уж нужно запустить кросс-компиляцию на Малине, то я бы попробовал поставить crosstool-ng. И, если всё пройдёт гладко, то с его помощью установил бы тулчейн 'arm-unknown-linux-uclibcgnueabi' (для процессора ARM9 - ядро ARMv5). И попробовал бы собрать что-нибудь для MOXA IA240LX с целью проверки работоспособности тулчейна. Если всё срастётся, то не надо будет заморачиваться с эмулятором. Правда уже проглядываются потенциальные проблемы -- согласно инфе на сайте crosstool-ng тулчейн идёт с заголовочными файлами для ядра linux 4.3, а в описании устройства говорится, что используется ядро linux 2.6.9. Но теоретически библиотеки и заголовочные файлы можно подменить -- взять из официального тулчейна.
Всял первый по списку в : 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 и т.д. Но это уже дома.
Этим (компиляцией бинарников -- 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.
Да, забыл. Перед использованием crosstool-ng его самого нужно сначала собрать (стандартная последовательность команд): Код (Bash): ./bootstrap ./configure make make install Потом можно посмотреть список тулчейнов, которые он сможет собрать: Код (Bash): ct-ng list-samples и затем собрать нужный -- вроде как: Код (C++): mkdir <имя_тулчейна> cd <имя_тулчейна> ct-ng <имя_тулчейна> т.е. создаём директорию для тулчейна, а потом в ней производим сборку тулчейна. Но точно не помню (более полгода прошло с последнего запуска -- собирал для PowerPC), поэтому лучше посмотрите документацию.