Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Статическая сборка mc под ARM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > GNU/OpenSource средства разработки
KostyantynT
Написал это скрипт (выкладываю как есть, времени оптимизировать не было), тк статическая сборка mc (чтобы не тянуть на платформу ничего лишнего и потом легко можно было удалить) не совсем тривиальная задача. Тестировал на Ubunte x86_64. Предварительно надо в каталоге /opt хост машины под рутом создать каталог mc и дать права на запись. В системе должен быть установлен компилятор для кросс компиляции под нужную платформу (в моем случае arm-none-linux-gnueabi)

#!/bin/sh
cd $HOME
mkdir $HOME/mccrosscompile
export DEST=$HOME/mccrosscompile
cd $DEST
mkdir $DEST/src
mkdir $DEST/lib
mkdir $DEST/include
cd $DEST/src

wget ftp://ftp.fu-berlin.de/pub/unix/misc/slan...ng-2.1.4.tar.gz
tar zxf slang-2.1.4.tar.gz
cd slang-2.1.4/
CFLAGS="$CFLAGS -O2 -mcpu=arm926ej-s" ./configure --host=arm-none-linux-gnueabi --build=x86_64 --prefix=$DEST --without-png --enable-static
make clean -j7 && make -j7 && make static -j7
cp -d $DEST/src/slang-2.1.4/src/objs/libslang.a $DEST/lib/
cp -d $DEST/src/slang-2.1.4/src/*.h $DEST/include/
cd ..


# wget http://zlib.net/zlib-1.2.5.tar.gz
tar zxf zlib-1.2.5.tar.gz
cd zlib-1.2.5
CFLAGS="$CFLAGS -O2 -mcpu=arm926ej-s" CC='arm-none-linux-gnueabi-gcc' ./configure --prefix=$DEST --static
make clean -j7 && make -j7 && make static -j7
cp -d $DEST/src/zlib-1.2.5/libz.a $DEST/lib/
cp -d $DEST/src/zlib-1.2.5/*.h $DEST/include/
cd ..

# wget http://ftp.gnome.org/pub/gnome/sources/gli...b-2.28.7.tar.gz
tar zxf glib-2.28.7.tar.gz
cd glib-2.28.7
CFLAGS="$CFLAGS -O2 -mcpu=arm926ej-s" ZLIB_CFLAGS="-I$DEST/include" ZLIB_LIBS="-L$DEST/lib -L$DEST/lib -lz" CFLAGS="$CFLAGS ${ZLIB_CFLAGS}" LDFLAGS="$LDFLAGS ${ZLIB_LIBS}" glib_cv_stack_grows=no glib_cv_uscore=no ac_cv_func_posix_getpwuid_r=yes ac_cv_func_posix_getgrgid_r=yes ./configure --host=arm-none-linux-gnueabi --prefix=$DEST --build=x86_64 --enable-static
make clean -j7 && make -j7 && make install -j7
cd ..

# wget http://www.midnight-commander.org/download...-4.7.5.2.tar.gz
tar zxf mc-4.7.5.2.tar.gz
cd mc-4.7.5.2/

ac_cv_search_has_colors="-lslang" PKG_CONFIG_PATH=$DEST/lib/pkgconfig CFLAGS="$CFLAGS -O2 -mcpu=arm926ej-s" ./configure --host=arm-none-linux-gnueabi --build=x86_64 --with-zlib-static --with-glib-static --with-screen=slang --with-slang-includes=$DEST/include --with-slang-libs=$DEST/lib --without-x --without-gpm-mouse --enable-static=yes --disable-shared --disable-vfs --disable-doxygen-html --disable-doxygen-doc --disable-doxygen-dot CC='arm-none-linux-gnueabi-gcc -static -static-libgcc -fno-exceptions' CXX='arm-none-linux-gnueabi-g++ -static -static-libgcc -fno-exceptions' LDFLAGS='-Wl,-static -static -lc -lrt' LIBS='-lc -lrt ' --prefix=/opt/mc GLIB_LIBS=$DEST/lib/libglib-2.0.a

make clean -j7 && make -j7 && make install -j7

После окончания сборки вся папка /opt/mc переносится на целевую машину и при необходимости удалятся. /opt/mc/bin нужно добавить в PATH.
Также в файл .bashrc (или .profile еслив системе busybox) необходимо добавить строчку
export TERM=xterm

После отладки софта mc удаляется легким движением рук :-)

Размер полученного бинарника 2,4Мб. Просьба протестировать под другие платформы (mipsel..)

zltigo
QUOTE (КонстантинТ @ Jun 27 2011, 13:31) *
Размер полученного бинарника 2,4Мб.

Да, размером очень удивили. Я думал, что он только снаружи убоговат, так он еще и внутри страшен sad.gif
Petka
Цитата(zltigo @ Jun 27 2011, 19:37) *
Да, размером очень удивили. Я думал, что он только снаружи убоговат, так он еще и внутри страшен sad.gif

Может он просто не strip-нут?
xemul
Цитата(Petka @ Jun 27 2011, 20:13) *
Может он просто не strip-нут?

mc с v4.7 (?) тянет за собой glib (TC собирал mc с zlib и slang, но можно и без них).
На безгуёвых машинах мне mc-light симпатичнее.
KostyantynT
Цитата(Petka @ Jun 27 2011, 19:13) *
Может он просто не strip-нут?

strip не делал, вы правы.
Petka
Цитата(КонстантинТ @ Jun 28 2011, 13:00) *
strip не делал, вы правы.

а сколько получается после strip ?
KostyantynT
Цитата(Petka @ Jun 28 2011, 12:18) *
а сколько получается после strip ?

1,86 с выключенной поддержкой VFS
klen
Цитата(КонстантинТ @ Jun 28 2011, 14:03) *
1,86 с выключенной поддержкой VFS

секционироване кода и данных указывали компиллеру и линкеру, кто его этот mc знает - мож там много "мертвых тканей" ?
Ixt
Цитата(xemul @ Jun 27 2011, 19:48) *
(TC собирал mc с zlib и slang, но можно и без них).

Без slang - значит с ncurses. Хрен редьки не слаще.

Цитата
На безгуёвых машинах мне mc-light симпатичнее.


mc вышел из состояния стагнации, в нём постоянно правят баги(а их хватает) и добавляют фичи.
mc-light - это что-то заброшенное из 2004-го года? На любителя.

Размер mc можно ещё слегка уменьшить, если отключить заведомо ненужное на embedded:
если конфигурировать glib, например с опциями
Цитата
--disable-selinux --disable-fam --disable-largefile


Ну и mc c
Цитата
--without-x --disable-largefile --disable-nls



А вообще не вижу смысла всё собирать статически. Могут понадобиться ещё программы кроме mc. Для того же gdb нужен ncurses, он может быть общим с mc и т.д.

Цитата
После отладки софта mc удаляется легким движением рук :-)

Зачем удалять? Нужно просто прошить прошивку в которой нет ничего не нужного. Так повторяемость и воспроизводимость получим.
und68
У меня с налету ничего не вышло.В линюксе новичок. Версия
Linux debian 2.6.26-1-686 #1 SMP Sat Jan 10 18:29:31 UTC 2009 i686 GNU/Linux
это что была с платой SK-AT91SAM9XE512-S3E
Библиотке простроиласть сраху только одна libz.a
При построение остальныx ошибки, конец выполнения файла для построения библтотек с ошибками в
подклеенных файлах.

В принципе мне нужен только MC, может кто выложит готовый
alx2
Цитата(und68 @ Apr 9 2012, 23:41) *
При построение остальныx ошибки, конец выполнения файла для построения библтотек с ошибками в
подклеенных файлах.

По glib: Опция -Bsymbolic-functions у линкера появилась начиная с версии 2.18. У Вас, видимо, binutils более старой версии. Вам следует либо использовать более свежий binutils (текущая версия 2.22), либо найти в исходниках glib эту опцию и убрать.

По slang: не найден файл pcre.h. Во-первых, убедитесь, что он у Вас вообще есть (то есть должен быть собран и установлен pcre). Во-вторых, попробуйте при конфигурации указать slang'у, где лежит pcre, добавив в команду конфигурации --with-pcre=DIR

И еще я бы посоветовал воспользоваться каким-нибудь готовым фреймворком для сборки системы и всех приложений, типа openwrt или openembedded, вместо того чтобы все собирать вручную. Тем более если Вы - новичок...
und68
Цитата
По glib: Опция -Bsymbolic-functions у линкера появилась начиная с версии 2.18. У Вас, видимо, binutils более старой версии. Вам следует либо использовать более свежий binutils (текущая версия 2.22), либо найти в исходниках glib эту опцию и убрать.

По slang: не найден файл pcre.h. Во-первых, убедитесь, что он у Вас вообще есть (то есть должен быть собран и установлен pcre). Во-вторых, попробуйте при конфигурации указать slang'у, где лежит pcre, добавив в команду конфигурации --with-pcre=DIR
И еще я бы посоветовал воспользоваться каким-нибудь готовым фреймворком для сборки системы и всех приложений, типа openwrt или openembedded, вместо того чтобы все собирать вручную. Тем более если Вы - новичок...

Спасибо за ответ. Полез разбиратся и читать про PCRE ,opewwrt и прочие вещи.
У меня к Вам большая просьба - Вы может для меня собрать MC под ARM9, а то время поджимает. На этой плате разработано устройство и для его отладки мне переодически надо править файлы на SD(MMC), котоая вставлена в эту плату.
Сейчас все происхордит очень долго - по tftp я гоню этот файл на линукс PC, там его правлю и снова по ftp на arm. Но это долго - поэтому и прошу Вас собрать его и выложить для меня. А чуть позже когда появится время и до MC доберусь, а дальше переход на новое ядро линукса на ARM и новый BuildRoot, так как надо помять состав встроенных утилит
Сейчас получилось запустить только связку eclipse + gdbdebug, но и то она немного кривовато работает, выполняемый модуль приходится пока самому на ARM закачивать
faa
Цитата(und68 @ Apr 10 2012, 22:01) *
Сейчас все происхордит очень долго - по tftp я гоню этот файл на линукс PC, там его правлю и снова по ftp на arm.

А пристегнуть файловую систему с махарайки к хосту по NFS что мешает?
Или наоборот - для отладки примонтируйте к изделию по NFS же хостовую и правьте.
После окончания правок и отладок сверните все в образ и залейте на SD/MMC.
alx2
Цитата(und68 @ Apr 10 2012, 23:01) *
У меня к Вам большая просьба - Вы может для меня собрать MC под ARM9, а то время поджимает. На этой плате разработано устройство и для его отладки мне переодически надо править файлы на SD(MMC), котоая вставлена в эту плату.

Если надо только править фйлы, зачем Вам такой монстр как mc? Не лучше ли взять, например, nano? Вот, собрал, попробуйте: http://www.intellectronika.ru/utils/nano.tgz

mc сходу не собрался, а разбираться почему времени и желания у меня нет. Так что извините, с mc не помогу.
und68
Цитата(faa @ Apr 11 2012, 06:39) *
А пристегнуть файловую систему с махарайки к хосту по NFS что мешает?
Или наоборот - для отладки примонтируйте к изделию по NFS же хостовую и правьте.
После окончания правок и отладок сверните все в образ и залейте на SD/MMC.

Образ был сделан до меня и NFS там нет
Сходу его включить не получилось
SFx
Пару лет назад собирал mc под i.mx27. Вообще никаких проблем, в окружение сборщика прописал архив с исходниками, параметры там какие то прописал в файлике по образцу, и все сразу собралось. и с NFS даже работало.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.