Перейти к содержанию
    

Статическая сборка mc под ARM

Написал это скрипт (выкладываю как есть, времени оптимизировать не было), тк статическая сборка 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..)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Размер полученного бинарника 2,4Мб.

Да, размером очень удивили. Я думал, что он только снаружи убоговат, так он еще и внутри страшен :(

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, размером очень удивили. Я думал, что он только снаружи убоговат, так он еще и внутри страшен :(

Может он просто не strip-нут?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может он просто не strip-нут?

mc с v4.7 (?) тянет за собой glib (TC собирал mc с zlib и slang, но можно и без них).

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а сколько получается после strip ?

1,86 с выключенной поддержкой VFS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1,86 с выключенной поддержкой VFS

секционироване кода и данных указывали компиллеру и линкеру, кто его этот mc знает - мож там много "мертвых тканей" ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

(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 удаляется легким движением рук :-)

Зачем удалять? Нужно просто прошить прошивку в которой нет ничего не нужного. Так повторяемость и воспроизводимость получим.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня с налету ничего не вышло.В линюксе новичок. Версия

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, может кто выложит готовый

glib.txt

slang.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При построение остальныx ошибки, конец выполнения файла для построения библтотек с ошибками в

подклеенных файлах.

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

 

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

 

И еще я бы посоветовал воспользоваться каким-нибудь готовым фреймворком для сборки системы и всех приложений, типа openwrt или openembedded, вместо того чтобы все собирать вручную. Тем более если Вы - новичок...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По 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 закачивать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сейчас все происхордит очень долго - по tftp я гоню этот файл на линукс PC, там его правлю и снова по ftp на arm.

А пристегнуть файловую систему с махарайки к хосту по NFS что мешает?

Или наоборот - для отладки примонтируйте к изделию по NFS же хостовую и правьте.

После окончания правок и отладок сверните все в образ и залейте на SD/MMC.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня к Вам большая просьба - Вы может для меня собрать MC под ARM9, а то время поджимает. На этой плате разработано устройство и для его отладки мне переодически надо править файлы на SD(MMC), котоая вставлена в эту плату.

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

 

mc сходу не собрался, а разбираться почему времени и желания у меня нет. Так что извините, с mc не помогу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А пристегнуть файловую систему с махарайки к хосту по NFS что мешает?

Или наоборот - для отладки примонтируйте к изделию по NFS же хостовую и правьте.

После окончания правок и отладок сверните все в образ и залейте на SD/MMC.

Образ был сделан до меня и NFS там нет

Сходу его включить не получилось

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...