LINUX.ORG.RU
ФорумMobile

Linux toolchain/busybox и многое другое на Android...


0

0

Добрый день! Здесь кто-нибудь занимался уже сборкой uClibs, busybox и прочим для Android-а? Именно не портированием debian на свой телефон, а в готовую систему? Просто и текущий функционал терять не хочется, а расширить его необходимо...

★★★★★

Ответ на: комментарий от thevery

Не забанили! Все только выкладывают бинарники скомпиленные статически, и без рассказа что и как. Только вот лучше будет на uClibs собрать и не в статике, а с динамической библиотекой. Да и от самого busybox-а мало толку. Нужно uClibs и компилятор собрать. Я думаю tiny C compiler в самый раз будет, тем более им собираются и busybox, и uClibs. Просто все собирают по-своему каждый, а я хочу всю инфу собрать в виде HOWTO для всех.

Со встроенными системами до этого просто никогда не работал. Потому и задаю глупые вопросы.

Чтобы не делать огромный пост - я тут уже отписывал свои мысли и найденные актуальные ссылки по этому поводу (http://forum.androidfan.ru/index.php?showtopic=1307).

XVilka ★★★★★
() автор топика

Бери любой кросс-тулчейн для ARM'а с gcc+uCLibc. В сети таких over 9000.
Будет тулчейн, busybox соберёшь легко.
Ещё лучше если найдёшь тулчейн который сможет генеририровать код со всеми инструкциями которые поддерживает твой проц - выйграешь мифические 10%.

gogi
()
Ответ на: комментарий от gogi

Я так понял вот этот нормальный crosstool-ng (http://ymorin.is-a-geek.org/dokuwiki/projects/crosstool). Просто я не совсем могу понять, как действовать когда сборку делаешь под уже готовую систему с установленным ядром. Потому что во всех мануалах описана ситуация когда систему с нуля собирают, я и сам лфс собирал. Потому то в общем и вопрос возник.

XVilka ★★★★★
() автор топика
Ответ на: комментарий от XVilka

>Я так понял вот этот нормальный crosstool-ng (http://ymorin.is-a-geek.org/dokuwiki/projects/crosstool).

Не знаю, возможно и хороший. Но там тебе предлагают собрать свой тулчейн самостоятельно. А тут такая особенность, что может и не собраться ;) Я одно время собирал просто из исходников, в составе buildroot'a и ещё как-то - натрахался порядочно. И судя по гуглю не я один. Для x86 собрать свой тулчейн сложно, а для ARM'а, имхо, на порядок сложнее. Сейчас себе собираю ориентируясь на codesourcery.com и oselas.com.

Можешь посмотреть ещё в сторону уже собранных готовых тулчейнов.

Просто я не совсем могу понять, как действовать когда сборку делаешь под уже готовую систему с установленным ядром


Когда тулчейн установишь, у тебя компилятор будет иметь имя типа 'arm-linux-gcc'. Он работает на твоём хосте. Им и компилируй: arm-linux-gcc -static main.c -o main. Получишь бинарник, его и копируй на андроид. Программы посложнее неллоу-ворда можно компильнуть указанием переменной CC или в системе сборки (configure, make menuconfig(у busybox'а так), etc), тут уж надо смотреть.

Кстати, необязательно брать тулчейн с uCLibc, можно и с полноценной glibc. На практике с uCLibc и прочими маленькими либами не всё компилируется/работает нормально.

gogi
()
Ответ на: комментарий от gogi

Спасибо за подробный ответ. Полезные ресурсы. Жалко только на oselas рассылка на немецком... А тулчейну надо заголовки ядра целевой системы?

XVilka ★★★★★
() автор топика
Ответ на: комментарий от XVilka

>А тулчейну надо заголовки ядра целевой системы?
В готовом тулчейне исходники ядра уже есть. Если сам будешь собирать - попросит сорцы какой-либо версии. Тут важно чтобы на андроиде ядро оказалось не старее того что в тулчейне используется.

gogi
()
Ответ на: комментарий от gogi

Спасибо! Скорее всего буду сам собирать. Попробую под разные версии андроидов и с разными libc. Gnu-шная великовата просто. И так bionic будет в памяти висеть стандартная, так еще и libc не один метр сьест. Еще такой вопрос. В интернетах нашел что tiny c compiler дает небольшой прирост в производительности по сравнению с гсс. Был ли опыт использования? P.S. Ну и совсем безумие - tcc хочу на андроид поставить. По пути на работу компилировать ядро ))))))))))))) Для маленьких программ я думаю полезно может быть. А вот сетевые утилиты на телефоне по типу того же aircrack и nmap - это уникальная вещь, надо будет попробовать...

XVilka ★★★★★
() автор топика
Ответ на: комментарий от XVilka

>tiny c compiler
С этим не сталкивался, по этой же причине наверное будут проблемы с большей частью софта. Заведёшь - хорошо. Отпишись потом если будут успехи.

По пути на работу компилировать ядро )))))))))))))

ARM'ы по сравнению с x86 слабоваты. Долго ждать придётся и боюсь как бы батарейку сожрёт очень быстро. Поэтому и придумали кросскомпиляцию.

Gnu-шная великовата просто. И так bionic будет в памяти висеть стандартная, так еще и libc не один метр сьест.


Ради кучи софта можно и пойти на перерасход памяти. Вот ещё на уровне идеи(написал на другом форуме, тебе тоже наверное интересно будет):

«Можно все программы собирать статически, но будем иметь многократный ненужный перерасход памяти (каждая простенькая программа по мегабайту-два). Ещё можно попробовать собирать программы динамически и кинуть их на андроиде в один каталог вместе с библиотеками из тулчейна. А чтобы потом эти программы могли найти тулчейновские библиотеки а не андроидные, запускать эти программы не самостоятельно а из скрипта в котором будет запускаться шелл (неявно), устанавливаться LD_LIBRARY_PATH а потом сама программа.»

gogi
()
Ответ на: комментарий от gogi

Не надо меня пинать, если где-то протупил, прошу ткнуть носом (кросс-сборкой занимаюсь в первый раз, хоть и программирую чуть-чуть). Решил написать небольшое руководство для владельцев трубок и прочих устройств c android по компиляции некоторых полезных утилит из мира open-source :-) (Хоть все и кричат, что андроид это линукс, и он открыт, но по-моему это огрызок, и без шаманизма не обойтись) Если есть замечания, пишите сюда. (или исправления) Пока это черновик. Работаю над динамической линковкой и поддержкой других компиляторов (aвтор crosstool-ng написал что у него был опыт работы с tcc, и он более-менее нормально работает только с x86 и arm. Потому и не хочет включать в код. Говорит есть надежда на llvm, но тот еще сыроват для применения повседневно. Поэтому все программы рекомендую собирать gcc, tcc собрался под arm, но вылетает через раз, думаю что с ним делать). Возник такой вопрос, авторы mc сказали что без glib забудьте о mc и больше сюда не приходите с такими заявлениями. Етественно, это не порадовало. Поиск дал результаты в виде vfu и vifm. Есть ли еще альтернативы, не 100-летней давности, которые можно собрать на андроиде без переноса всего гнома вместе с моно? :-D

XVilka ★★★★★
() автор топика
Ответ на: комментарий от XVilka

Блин, само руководство как обычно забыл написать в прошлом сообщении. Вот оно:

Пусть все мы делаем в домашней директории (/home/xvilka) создадим там каталог build

mkdir build

1. Скачиваем ядро, которое установлено в вашем устройстве, распаковываем, собираем заголовки

make headers_install ARCH=arm INSTALL_HDR_PATH=~/build/kern_h/

2. Скачиваем crosstool-ng (http://ymorin.is-a-geek.org/dokuwiki/projects/crosstool), распаковываем, собираем (нужны установленные make,install,bash,cut,sed,grep,gcc,awk,bison,flex,automake,libtool,stat, wget,cvs,patch,tar,gzip,bzip2,lzma,readlink,ncurses)

.configure make make install

3. создаем каталог toolchain-android, переходим в него и копируем файл XVilka-crosstool.config в .config XVilka-uClibc.config в uClibc-0.9.30.2.config (потом можно поставить ту версию, которую собираетесь компилировать) потом запускаем

ct-ng menuconfig

изменяем, если необходимо сохраняем в .config запускаем

ct-ng build

4. Итак все собралось. Теперь имеем каталог в своей директории build/x-tools. В нем появились компиляторы для сборки вида arm-android-linux-uclibsgnueabi-* для того чтобы было проще запускать их добавим этот каталог в PATH

PATH=~/build/x-tools/arm-android-linux-uclibcgnueabi/bin:$PATH

теперь мы имеем возможность запускать компилятор командой arm-android-linux-uclibcgnueabi-gcc Корневая директория целевой системы находится по адресу ~/build/x-tools/arm-android-linux-uclibcgnueabi/arm-android-linux-uclibcgnueabi/sys-root Туда мы не будем все устанавливать. Скопируем его в папку ~/build/cross/sys-root chmod +w sys-root chmod +w sys-root/usr

5. Сборка busybox (пока только статика) копируем файл XVilka-busybox.config в .config

make menuconfig make ARCH=arm CC=«arm-android-linux-uclibcgnueabi-gcc -static» CROSS_COMPILE=«arm-android-linux-uclibcgnueabi-» make ARCH=arm CC=«arm-android-linux-uclibcgnueabi-gcc -static» CROSS_COMPILE=«arm-android-linux-uclibcgnueabi-» \ CONFIG_PREFIX=~/build/cross/sys-root install

------------------------------!!! Это часть весьма сомнительна и требует тщательной доработки. Мы работаем над этим. Скоро будет и без костылей!!!--------------------

6. tcc

./configure --prefix=~/build/cross/sys-root --enable-cross --cross-prefix=arm-android-linux-uclibcgnueabi- --sysroot=~/build/cross/sys-root make ARCH=arm CC=«arm-android-linux-uclibcgnueabi-gcc -static» CROSS_COMPILE=«arm-android-linux-uclibcgnueabi-» make install не работает ни в каком виде. Копируем файлы вручную...

XVilka ★★★★★
() автор топика
Ответ на: комментарий от XVilka

>Возник такой вопрос, авторы mc сказали что без glib забудьте о mc и больше сюда не приходите с такими заявлениями. Етественно, это не порадовало. Поиск дал результаты в виде vfu и vifm. Есть ли еще альтернативы, не 100-летней давности, которые можно собрать на андроиде без переноса всего гнома вместе с моно? :-D

Я прошёл по твоей ссылке и вобщем запустил оттуда mc. Работает, но выглядит кривовато и версия старая. Вобщем решил себе тоже собрать. Собрал как ни странно, но не заработало, ну тут несколько причин.

В процессе пришлось собрать zlib, libpng, pcre, slang ну и конечно же glib ;). Кстати, не тянет она никакого гнома и уж тем более моно. И размер у неё порядка 2 Мб.

А mc не заработал потому что не удалось его:
1) собрать статически(все либы собрал, а его уж никак). Особенно не хотело линковаться с glib-static. А раз нет статики, нужно иметь полный список зависимостей, тут уж надо экспериментировать и objdump не помогает. И ещё не факт что идея по динамической линковке сработает.
2) Вспомнил что у меня тулчейн с поддержкой EABI. А эта хрень требует поддержки в ядре в виде включённой опции. Скорее всего у меня она отключена и конфига посмотреть нету. Вобщем буду собирать тулчейн без поддержки оного. Хотя EABI может и дать некоторый профит, но с ним на первых порах тяжелее.

Кстати,какой у тебя дроид? У меня Samsung Spica.

gogi
()
Ответ на: комментарий от XVilka

>arm-android-linux-uclibsgnueabi-

Я вижу у тебя тоже gnueabi. Есть идея использовать несколько тулчейнов: легковесных и не очень. Если собиратается uclibc-gcc - хорошо. Нет, надо брать тяжёлую артилерию в виде gnu-gcc. Так что и собрать придётся 2(а может и 3 с учётом tcc).

. Сборка busybox (пока только статика) копируем файл XVilka-busybox.config в .config

make menuconfig make ARCH=arm CC=«arm-android-linux-uclibcgnueabi-gcc -static» CROSS_COMPILE=«arm-android-linux-uclibcgnueabi-» make ARCH=arm CC=«arm-android-linux-uclibcgnueabi-gcc -static» CROSS_COMPILE=«arm-android-linux-uclibcgnueabi-» \ CONFIG_PREFIX=~/build/cross/sys-root install

Это у тебя длинновато получилось. Компилятор и его флаги можно в конфиге указать. А конфиг ты и так предоставляешь, так что строку компиляции можно упростить.


gogi
()
Ответ на: комментарий от gogi

У меня Motorola Milestone. Да я вообще перестраховщик. Какая разница сколько копировать символов? Но лишнее потом уберу. Сейчас главное заставить работать. Блин, вот я лох, то что eabi отключен в моем ядре я и не заметил... ncurses никак не получается почему-то собрать и busybox ping и traceroute не работает. Пока бьюсь безрезультатно.

Еще ковыряю параллельно bionic, и думаю надо перенести на нее некоторые утилиты.

Жалко перепрошиться нельзя, я б себе андроид бы собрал гибридный с дебианом напополам... Есть в принципе уже идеи как это сделать...

XVilka ★★★★★
() автор топика
Ответ на: комментарий от XVilka

>Блин, вот я лох, то что eabi отключен в моем ядре я и не заметил...
Кстати, кажется eabi для android'a - это стандарт. Т.е. oabi вообще не применяется. А я тревогу поднял... Ты по конфигу смотрел? Должно быть включено.

ncurses никак не получается почему-то собрать

И не недо. Ему на замену slang идёт.

и busybox ping и traceroute не работает. Пока бьюсь безрезультатно.

У меня работают.

Еще ковыряю параллельно bionic, и думаю надо перенести на нее некоторые утилиты.


Это уже к их авторам - пусть делают условную компиляцию. Но думаю гугль неспроста сделал bionic нестандартной, чтоб программы от линукса в андроид не тянули.

Жалко перепрошиться нельзя, я б себе андроид бы собрал гибридный с дебианом напополам... Есть в принципе уже идеи как это сделать...


У меня можно. Народ начал уже делать кастомные ядра.

gogi
()
Ответ на: комментарий от XVilka

>Жалко перепрошиться нельзя, я б себе андроид бы собрал гибридный с дебианом напополам... Есть в принципе уже идеи как это сделать...

почему нельзя? рут и прочее уже есть ведь...

thevery ★★★★
()
Ответ на: комментарий от thevery

Образ ядра лежит отдельно от основной системы, на защищенном разделе, который проверяется постоянно бутлоадером, который тоже защищен подписью. Он же (бутлоадер) постоянно смотрит и частоту процессора. Поскольку в принципе через модуль ядра ее можно поднять, но периодически происходит сброс на стандартную величину. Механизм защиты реализован зашитым в железо вроде RSA ключом на основе secure flash технологии M-shield чипа OMAP3430. Вроде так написано в документации на аппарат и на чип.

Потому то взлом и особо осложнен...

XVilka ★★★★★
() автор топика
Ответ на: комментарий от gogi

Вот немного обновил руководство. Желательно проверить хотя бы busybox + uclibc + libFLAC Нужные файлы можно скачать тут

http://forum.androidfan.ru/index.php?showtopic=1307

Руководство сюда не влезло, придется идти по ссылке

XVilka ★★★★★
() автор топика
Ответ на: комментарий от XVilka


#!/bin/sh export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH exec /usr/bin/local/some_program $*

А у тебя реально это заработало? У меня при запуске файла пишет «not found». Пробовал запускать просто из консоли, без скипта. Я так подумал, что когда меняем LD_LIBRARY_PATH нужно ещё и ldconfig выполнить. А его у меня на голом андроиде нету. Скомпилировать? Можно попытаться, но вспоминаем что делает ldconfig - пишет кеш в /etc. /etc - по-умолчанию readonly, и это правильно. Кроме этого, этот ldconfig для андроидных либ не требуется, но как-то же работает?

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

sergey@aohost:~/code/test_c$ ls

helloandroid main.c

sergey@aohost:~/code/test_c$ cat main.c

#include <stdio.h>

int main(int argc, char **argv)
{
    printf("hello android!\n");
    return 0;
}

На андроиде:

# pwd
/system
# mylib/ld-linux.so.3 --library-path /system/mylib xbin/helloandroid
hello android!
# mylib/ld-linux.so.3 --list xbin/helloandroid                      
	libc.so.6 => /system/mylib/libc.so.6 (0x40001000)
	/lib/ld-linux.so.3 => mylib/ld-linux.so.3 (0x2a000000)

/system/mylib - я сюда все либы из тулчейна скинул. Половину из них можно скорее всего и прибить, но это потом. Программы у меня в /system/xbin.

# ls -l /system/mylib
lrwxrwxrwx root     root              2010-02-07 01:49 libgcc_s.so -> libgcc_s.so.1
-rw-r--r-- system   system      44016 2010-02-07 01:48 libgcc_s.so.1
lrwxrwxrwx root     root              2010-02-07 01:49 libstdc++.so -> libstdc++.so.6.0.9
lrwxrwxrwx root     root              2010-02-07 01:49 libstdc++.so.6 -> libstdc++.so.6.0.9
-rwxr-xr-x system   system     830412 2010-02-07 01:48 libstdc++.so.6.0.9
-rwxr-xr-x system   system     118488 2010-02-07 01:48 ld-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 ld-linux.so.3 -> ld-2.8.so
-rwxr-xr-x system   system       5624 2010-02-07 01:48 libBrokenLocale-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 libBrokenLocale.so.1 -> libBrokenLocale-2.8.so
-rwxr-xr-x system   system       9748 2010-02-07 01:48 libSegFault.so
-rwxr-xr-x system   system      10048 2010-02-07 01:48 libanl-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 libanl.so.1 -> libanl-2.8.so
-rwxr-xr-x system   system    1158916 2010-02-07 01:48 libc-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 libc.so.6 -> libc-2.8.so
-rwxr-xr-x system   system      34504 2010-02-07 01:48 libcrypt-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 libcrypt.so.1 -> libcrypt-2.8.so
-rwxr-xr-x system   system       9976 2010-02-07 01:48 libdl-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 libdl.so.2 -> libdl-2.8.so
-rwxr-xr-x system   system     654196 2010-02-07 01:48 libm-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 libm.so.6 -> libm-2.8.so
-rwxr-xr-x system   system      18004 2010-02-07 01:48 libmemusage.so
-rwxr-xr-x system   system      72304 2010-02-07 01:48 libnsl-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 libnsl.so.1 -> libnsl-2.8.so
-rwxr-xr-x system   system      26520 2010-02-07 01:48 libnss_compat-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 libnss_compat.so.2 -> libnss_compat-2.8.so
-rwxr-xr-x system   system      18072 2010-02-07 01:48 libnss_dns-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 libnss_dns.so.2 -> libnss_dns-2.8.so
-rwxr-xr-x system   system      38780 2010-02-07 01:48 libnss_files-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 libnss_files.so.2 -> libnss_files-2.8.so
-rwxr-xr-x system   system      14036 2010-02-07 01:48 libnss_hesiod-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 libnss_hesiod.so.2 -> libnss_hesiod-2.8.so
-rwxr-xr-x system   system      38836 2010-02-07 01:48 libnss_nis-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 libnss_nis.so.2 -> libnss_nis-2.8.so
-rwxr-xr-x system   system      47020 2010-02-07 01:48 libnss_nisplus-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 libnss_nisplus.so.2 -> libnss_nisplus-2.8.so
-rwxr-xr-x system   system       5584 2010-02-07 01:48 libpcprofile.so
-rwxr-xr-x system   system      83352 2010-02-07 01:48 libpthread-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 libpthread.so.0 -> libpthread-2.8.so
-rwxr-xr-x system   system      59644 2010-02-07 01:48 libresolv-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 libresolv.so.2 -> libresolv-2.8.so
-rwxr-xr-x system   system      27312 2010-02-07 01:48 librt-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 librt.so.1 -> librt-2.8.so
-rwxr-xr-x system   system      27116 2010-02-07 01:48 libthread_db-1.0.so
lrwxrwxrwx root     root              2010-02-07 01:49 libthread_db.so.1 -> libthread_db-1.0.so
-rwxr-xr-x system   system       9936 2010-02-07 01:48 libutil-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 libutil.so.1 -> libutil-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:49 libgomp.so -> libgomp.so.1.0.0
lrwxrwxrwx root     root              2010-02-07 01:49 libgomp.so.1 -> libgomp.so.1.0.0
-rwxr-xr-x system   system      25652 2010-02-07 01:48 libgomp.so.1.0.0
lrwxrwxrwx root     root              2010-02-07 01:49 libmudflap.so -> libmudflap.so.0.0.0
lrwxrwxrwx root     root              2010-02-07 01:49 libmudflap.so.0 -> libmudflap.so.0.0.0
-rwxr-xr-x system   system     106044 2010-02-07 01:48 libmudflap.so.0.0.0
lrwxrwxrwx root     root              2010-02-07 01:49 libmudflapth.so -> libmudflapth.so.0.0.0
lrwxrwxrwx root     root              2010-02-07 01:49 libmudflapth.so.0 -> libmudflapth.so.0.0.0
-rwxr-xr-x system   system     110292 2010-02-07 01:48 libmudflapth.so.0.0.0
lrwxrwxrwx root     root              2010-02-07 01:49 libc.so -> libc.so.6
lrwxrwxrwx root     root              2010-02-07 01:49 libm.so -> libm.so.6
lrwxrwxrwx root     root              2010-02-07 01:50 libdl.so -> libdl-2.8.so
lrwxrwxrwx root     root              2010-02-07 01:51 librt.so -> librt.so.1
lrwxrwxrwx root     root              2010-02-07 01:52 libutils.so -> libutil.so.1
lrwxrwxrwx root     root              2010-02-07 01:52 libresolv.so -> libresolv.so.2
lrwxrwxrwx root     root              2010-02-07 01:52 libpthread.so -> libpthread.so.0
lrwxrwxrwx root     root              2010-02-07 01:53 libcrypt.so -> libcrypt.so.1

А вот что при запуске shared-busybox'а:

# mylib/ld-linux.so.3 --library-path /system/mylib xbin/bb_my  
bb_my: applet not found
# xbin/bb_my
xbin/bb_my: not found
# mylib/ld-linux.so.3 --list xbin/bb_my
	libm.so.6 => /system/mylib/libm.so.6 (0x40001000)
	libc.so.6 => /system/mylib/libc.so.6 (0x400a8000)
	/lib/ld-linux.so.3 => mylib/ld-linux.so.3 (0x2a000000)
Вобщем, busybox что-то пишет про апплет. Вроде и стартует. Хз вобщем.

busybox

У меня примерно так же только компилирую «make -jx», все параметры в конфиге.

uclibc

У меня свой тулчейн, уже проверенный. А вообще - это не проблема, теже codesourcery дают уже бинарный кросстулчейн.

libFLAC.so

Без юзерспейса это пока безполезно и никак не проверить? и

для включения в свои программы при использовании libFLAC.so

это видимо только для android>=2.0 (где ndk доступно), так что пока не очень актуально.

gogi
()
Ответ на: комментарий от gogi

7. Сборка текстового редактора jupp (http://www.mirbsd.org/jupp.htm)

Это что-то узкоспецифичное. Есть vi из busybox, mcedit из mc(будет?).

11. Cборка dropbear

./configure --host=arm-android-linux-uclibcgnueabi CC="arm-android-linux-uclibcgnueabi-gcc -static" \
CROSS_COMPILE="arm-android-linux-uclibcgnueabi-" \
CFLAGS=" -mcpu=cortex-a8 -march=armv7-a -mtune=cortex-a8 -mfpu=vfpv3 -O3 -Os" \
--prefix="$HOME/build/cross/sys-root/system/usr/local" --disable-zlib

CROSS_COMPILE - это только для кросскомпиляции ядра, для большинства программ не нужно. А вообще после сборки полезно ещё не забыть сделать strip(у меня arm-xscale-linux-gnueabi-strip). А вообще собралось и даже работает.

Думаю смысла много собирать вручную каждую программу не много, так самые важные и первой необходимости. А вообще пора бы завести какие-нибудь репозитории с ipkg и/или debian в chroot'e.

gogi
()
Ответ на: комментарий от gogi

>>для включения в свои программы при использовании libFLAC.so это видимо только для android>=2.0 (где ndk доступно), так что пока не очень актуально.

ну в кастомных прошивках чуть ли не в 1.5 уже флак был

thevery ★★★★
()
Ответ на: комментарий от gogi

Кстати, про dropbear, что-то я не просекаю как при отсутствии пользователей на андроиде залогиниться с большого брата на него?

gogi
()
Ответ на: комментарий от gogi

Busybox можно и оставить статическим.

По поводу тулчейна - предпочитаю сам собирать.

Вот по поводу динамической линковки - либо использовать прелинк, ldconfig скомпилить и из bionic не проблема. Либо если будет libFLAC работать у всех - то путь найден. Просто статически влинковываем uClibc в библиотеку и превращаем ее в разделяемую - она получается как тот же ld.so - зависит только от ядра. - размер при этом увеличивается максимум на 100 кб.

у меня libFLAC работает - просто функцию вызвал оттуда через dlopen(). Простоейшая программа.

Так что попробуй собрать у себя по рецепту и своим тулчейном.

Сейчас пробую так же сделать ncurses.

FFmpeg в отношении переносимости оказался просто ужасен. Есть на примете что-то полегче для видео?

XVilka ★★★★★
() автор топика
Ответ на: комментарий от XVilka

>Я лучше openssh соберу

Всё равно требует пользователя при логине. А пользователей нету (у меня нету или может у тебя есть?).

gogi
()
Ответ на: комментарий от XVilka

>Busybox можно и оставить статическим.
Ну это я в порядке повышения сложности проверял.

По поводу тулчейна - предпочитаю сам собирать.

Ну ты пишешь руководство, не все захотят/смогут собрать тулчейн.

либо использовать прелинк,

wtf?

ldconfig скомпилить и из bionic не проблема.

Проверял? Видел такой живой? С биоником вязаться даже не хочу, боюсь наломали там дров...

Сейчас пробую так же сделать ncurses.

Брось бяку. Она кажется не переносима. У mc в configure есть выбор slang/ncurces.

adduser


Боюсь идеологию системы нарушу. У меня ж файлов /etc/passwd,shadow,group нету. Ну да, попробовать конечно можно.

gogi
()
Ответ на: комментарий от gogi

да я вот заметил что ncurses тоже написана очень криво... Просто я так думаю, если руководство пишу, потом думаю по-типу билдрута сделать вещь или интегрировать с ним... то патчи накладывать не хочу. Если есть возможность стандартными средствами сделать - надо искать.

LD_PRELINK - очень занимательная штука. Мне кажется это гугл идеологию системы нарушил ))))) Хм. Я вот подписан на ndk-developers - вторая версия уже есть альфа - тестируют.

Мне вот интересно, как обвязку dalvik-овскую для so сделать...

XVilka ★★★★★
() автор топика
Ответ на: комментарий от gogi

Да, почему ncurses. Куча программ ждут в очереди именно ее. emacs ))) aircrack htop и прочие...

XVilka ★★★★★
() автор топика
Ответ на: комментарий от XVilka

Попытки создать юзера увенчались fаil'ом. :(

# [6211] Feb 08 21:47:26 user 'user' has invalid shell, rejected


shell точно правильный прописан.

Нашёл ещё руководство http://www.droidforums.net/forum/droid-hacks/9038-ssh-daemon-dropbear-android...

dropbear -A -N root -U 0 -G 0 -C <password> -p WLANIP:22


так у моего dropbear таких ключей вообще нету. Хотя версия самая последняя, может из-за zlib выключенного?

emacs


Это всё баловство :)

gogi
()
Ответ на: комментарий от gogi

у меня тоже совсем другие ключи... Почему непонятно...

Думаю может к концу месяца если что-то осилю собрать/разобраться можно будет в виде apk файлов делать библиотеки и утилиты. Правда мой слабый комп все компилить не потянет...

XVilka ★★★★★
() автор топика
Ответ на: комментарий от XVilka

Кстати, по поводу mc. Конфигурю с параметрами:

./configure --prefix=/home/sergey/tmp/build/mc/out/mc-static --host=arm-xscale-linux-gnueabi CC=«arm-xscale-linux-gnueabi-gcc -static» CFLAGS=-I/home/sergey/tmp/build/mc/out/all/include/ LDFLAGS=-L/home/sergey/tmp/build/mc/out/all/lib/ --with-pcre=/home/sergey/tmp/build/mc/out/all --with-png=/home/sergey/tmp/build/mc/out/all --with-zlib=/home/sergey/tmp/build/mc/out/all --with-screen=slang --with-slang-includes=/home/sergey/tmp/build/mc/out/all/include/ --with-slang-libs=/home/sergey/tmp/build/mc/out/all/lib --without-x --with-glib-static

(в /home/sergey/tmp/build/mc/out/all/ набросал для верности все либы/инклуды ранее собранные).
Всё равно пытается линковаться с хостовой libglib. Если убрать "--with-glib-static" mc собирается но остаётся зависеть от нескольких либ(может их glib за собой тянет, но objdump такие кросс-зависимости не показывает).

Ещё помучаюсь,а потом наверное попробую ветку без glib(есть такая на оффсайте mc, из гита брать надо).

будет в виде apk файлов делать библиотеки и утилиты.

А это идея...


gogi
()
Ответ на: комментарий от gogi

кстати, почему именно mc? Уж больно он монструозен для embedded. Посмотри в сторону vifm. Правда, к сожалению тоже на ncurces... jupp - это пропатченный joe - умеет в нескольких режимах работать, в том числе и в режиме vi. Кстати - работает отлично!

Да, вот еще вопрос. Каким терминалом на Android пользуешься? А то по-моему они все мега-ущербные, особенно после urxvt... Да еще и деньги просят... Я понимаю если бы они умели оечнь многое - тогда может и купил бы, но они от бесплатных недалеко ушли...

XVilka ★★★★★
() автор топика
Ответ на: комментарий от XVilka

Времени не хватает всё поделать/проверить, поэтому редко отвечаю...

кстати, почему именно mc?

Ну привыкли к нему все, и я в том числе.

Уж больно он монструозен для embedded.

Не такой уж и монструозный. Размер ~ 1mb, тормозов нет. Тот mc из modaco работает у меня на спике вполне сносно, правда с глюками и иногда вылетает. На роутере (mips, втрое слабее по частоте) mc из репозитория так вообще прекрасно работает.

Посмотри в сторону vifm.

Судя по скриншотам что-то унылое. Там хоть смотрелка файлов встроена? И опять же ncurces. Кстати, его люди под embedded-mips собирают.

Да, вот еще вопрос. Каким терминалом на Android пользуешься?


Я как-то больше в консоли adb сижу(у меня ж нету хардварной клавиатуры). А так Better Terminal Emulator, больше не пробовал.

добавь в CFLAGS и CXXFLAGS -nodefaultlibc -nostdlibc


Не помогло (кстати, nodefaultlibc -nostdlib). Проблему со сборкой решил правкой Makefile'а после configure. Хоть и костыльно, но собрал.
В результате
[code=bash]
sergey@ixthost:~/tmp/build/mc/out/mc-static/bin$ arm-xscale-linux-gnueabi-objdump -x mc
Dynamic Section:
NEEDED libslang.so.2
NEEDED libglib-2.0.so.0
NEEDED libc.so.6
[/code]

статиками обложился со всех концов
[code]
./configure --prefix=/home/sergey/tmp/build/mc/out/mc-static --host=arm-xscale-linux-gnueabi CC=«arm-xscale-linux-gnueabi-gcc -static -static-libgcc» CFLAGS="-I/home/sergey/tmp/build/mc/out/all/include/ -static" LDFLAGS="-L/home/sergey/tmp/build/mc/out/all/lib/ -static" --with-pcre=/home/sergey/tmp/build/mc/out/all --with-png=/home/sergey/tmp/build/mc/out/all --with-zlib=/home/sergey/tmp/build/mc/out/all --with-screen=slang --with-slang-includes=/home/sergey/tmp/build/mc/out/all/include/ --with-slang-libs=/home/sergey/tmp/build/mc/out/all/lib --without-x --with-glib-static
[/code]

Нашел очень красивое решение для динамической линковки: http://jiggawatt.org/badc0de/android/index.html


Тоже для всех случаев не пойдёт. Это рецепт как свою прогу собрать, но не чужую.

gogi
()
Ответ на: комментарий от gogi

Есть такое дело - удалять не охота - а редактировать нельзя. Я вот мучаюсь со сборкой c++ приложений... uClibc++ немного кривовата. Ее бы в тулчейн встроить, а не получается пока. Еще идея - как вариант использовать в дальнейшем для создания и управления пакетами все тот же ipkg/opkg На xda-developers его уже активно осваивают. Но сборка это уже не то. Моя задача - интегрировать это дело. Надо всестороннее howto сначала написать. А потом пусть в buildroot, crossdev-ng интегрируют...

XVilka ★★★★★
() автор топика
Ответ на: комментарий от gogi

Попробуй еще флаги указать для ld " -s -lc -lglib -lslang" Да, и для конфигуре тоже укажи все префиксы явно попробуй. В том числе и инклюд.

XVilka ★★★★★
() автор топика
Ответ на: комментарий от XVilka

>Ее бы в тулчейн встроить, а не получается пока.

Так как у тебя тулчейн работает? Она же должна быть его частью!

все тот же ipkg/opkg На xda-developers его уже активно осваивают.


И на modaco.com тоже

Моя задача - интегрировать это дело.


Получиться как с buildroot. Вроде задумка хорошая, а как захочешь что-нибудь собрать, так не собирается - иди и лезь ручками дособирай.

gogi
()
Ответ на: комментарий от gogi

Иду на рекорд!

sergey@ixthost:~/tmp/build/mc/out/mc-static/bin$ ls -l
wxr-xr-x 1 sergey sergey 1580935 Фев 11 01:33 mc

sergey@ixthost:~/tmp/build/mc/out/mc-static/bin$ arm-xscale-linux-gnueabi-objdump -x mc

Dynamic Section:
  NEEDED      libc.so.6
  NEEDED      ld-linux.so.3

И вот вымученный конфиг. Главное: glib - не надо кидать в общий каталог как у меня всё построено было.

./configure --prefix=/home/sergey/tmp/build/mc/out/mc-static --host=arm-xscale-linux-gnueabi CC="arm-xscale-linux-gnueabi-gcc -static -static-libgcc -s -I/home/sergey/tmp/build/mc/out/all/include -L/home/sergey/tmp/build/mc/out/all/lib -L/home/sergey/tmp/build/mc/out/glib/lib" CFLAGS="-static" GLIB_CFLAGS="-I/home/sergey/tmp/build/mc/out/glib/include" GLIB_LIBS="/home/sergey/tmp/build/mc/out/glib/lib/libglib-2.0.a" --with-pcre=/home/sergey/tmp/build/mc/out/all --with-png=/home/sergey/tmp/build/mc/out/all --with-zlib=/home/sergey/tmp/build/mc/out/all --with-screen=slang --with-slang-includes=/home/sergey/tmp/build/mc/out/all/include --with-slang-libs=/home/sergey/tmp/build/mc/out/all/lib --without-x --with-glib-static 
gogi
()
Ответ на: комментарий от gogi

Тулчейн мой собирается без libstdc++ статической. В принципе есть возможность дикого хака по ее компиляции вне тулчейна, но не хочу - хочу прозрачности в руководстве. Списался с Яном Мюреем (вроде), автором crosstool-ng, будем работать над интеграцией uClibc++ в crosstool-ng.

Идея вот какая - ее вроде поддержали. Собирать тулчейн пусть кто чем - лишь бы были c, c++ компилеры + утилиты и libc и libstdc++(но думаю только те которые на GCC) Я ярый приверженец crosstool-ng. Потом сильно видоизмененный buildroot, точнее его форк, ориентированный на android. (Сотрудничество с модако и остальными) И потом сборка полученного мусора в пакеты ))))))) То есть в opkg.

Мне так думается в течение нескольких месяцев можно довести до вменяемого состояния.

Я тут еще в руководстве постепенно избавляюсь от непереносимости - ориентируюсь не только на Moto Mile/Droid. Ffmpeg мне за два дня вынес весь мозг, но зато собрался легко очень xvid!

Все изменения и файлы доступны там же на андроидфане.

Кстати советую отделить из переменной CC все флаги и перенести их в CFLAGS. Избавляйся от зависимости теперь от libc и ld-linux ). и Молодца!

Busybox кстати пока требуется патчить чтобы поддерживал системные сигналы и трансляцию сетевых имен... Надо будет в главную ветку потом патчи послать.

XVilka ★★★★★
() автор топика
Ответ на: комментарий от XVilka

>Все изменения и файлы доступны там же на андроидфане.

Посмотрел в той теме и твои последние сообщения на том форуме, вроде нету.

А с тулчейном у меня кажется тоже проблемы. libc.a есть, но она в моём тулчейне вот так хитро выглядит
[code]
/* GNU ld script
Use the static library, but some functions are in other strange
libraries :-( So try them secondarily. */
GROUP ( /usr/lib/libc_ns.a /usr/lib/libnss_files.a /usr/lib/libnss_dns.a /usr/lib/libresolv.a )
[/code]

Из-за обилия библиотек при линковке толи не находиться какая, толи берёт из системы вместо от корня sysroot. Пробовал вручную линковать, но всё равно какие-то ошибки лезут...

Вобщем попробую поставить ещё codesourcery на поглядеть ну и тулчейн от ndk android собрать, они там пишут у них какой-то особенный eabi

gogi
()
Ответ на: комментарий от gogi

Codesourcery - хороший тулчейн. Даже очень

Вот тогда здесь - http://forum.motofan.ru/index.php?showtopic=171467 Прямо первый пост. Вообще надо на сайт перенести на свой, да руки не дойдут никак...

А каким пользуешься сейчас тулчейном? Скоро кстати все наработки появятся на гитхабе в отдельном проекте и есть несколько разработчиков.

XVilka ★★★★★
() автор топика
Ответ на: комментарий от XVilka

Сейчас у меня самосборный тулчейн от oselas:
arm-xscale-linux-gnueabi, gcc-4.2.3-glibc-2.8-binutils-2.18-kernel-2.6.22.19-sanitized
Делал для PXA270, ну и везде его таскаю теперь :) Под armv5te собирает на ура.

У Codesourcery хоть и новые версии компилятора, либ, но он сливает по производительности генерируемого кода. Я набрасывал специально числобробилку и потестил. Ну эта версия фришная, ожидаемо. Может быть из-за того, что там glibc поддерживает только инструкции от armv4t? Ну и плюс свои патчи не накладывают.

Кстати, у crosstol-ng слишком новые «Kernel headers version», а у андроидов сейчас в массе 2.6.27/2.6.29. Эта версия потом будет видна в выхлопе команды file натравленной на собранные этим тулчейном бинарники.
Так что если будешь использовать crosstool-ng нужно header'ы даунгрейдить, я так в своём oselas'е делал.
У меня на спике armv6l. На всех андроидфонах сейчас ставят современные армы, так что если говорить об универсальности/портабельности, то нужно под эту march(armv6 ?) собирать видимо.

Все либы для mc пересобрал codesourcery, но теперь на configure mc затык. Вобщем то лапы ломит, то хвост отваливается.

gogi
()
Ответ на: комментарий от gogi

Я вообще использовал заголовки только адроидовского ядра - use custom headers опция в crosstool-ng... Понятно... mc и у меня и у того кто собирал - работает только в adb на девайсе глючит страшно - есть предположение что это из-за убогости терминалов андроида.

XVilka ★★★★★
() автор топика
Ответ на: комментарий от XVilka

Вот наверное самый актуальный топик будет и буду обновлять в первую очередь его:
http://forum.androidfan.ru/index.php?showtopic=1987

А вот еще и наш проект на гитхабе - buildroot-android

http://github.com/freeasabeer/buildroot-android
http://wiki.github.com/freeasabeer/buildroot-android/

Вот здесь - обсуждение работы libFLAC http://alldroid.org/viewtopic.php?f=259&t=2326&p=29927
Вот здесь - перенесенный mplayer http://mplayer4iphone.blogspot.com/2009/01/running-mplayer-on-android-emulato...

А вот здесь - по поводу проекта морды к yacas http://forum.androidfan.ru/index.php?showtopic=1986

XVilka ★★★★★
() автор топика
Ответ на: комментарий от XVilka

Извини что долго не отвечал, и без андроида куча дел...

Вобщем что у меня. Тулчейном от codesourcery довёл mc до стадии компилируемости, но остались те же самые зависимости от lib.so и ld-linux.so. Попытался линковать вручную - получил интересую ошибку, которая как бы намекала что я-то слинкую статически но всё равно потребуется динамическая либа. Погуглил, понял что проблема серьёзная и на неё натыкаются многие. Понял что с glibc я кашу не сварю(может быть с uclibc?) и решил всё таки добить запуск динамически-слинкованных программ.

Вобщем запустил я 4.7.0.2, скриншот прилагаю. Руководство по сборке mc (если надо - тоже)

http://forum.samdroid.net/attachment.php?attachmentid=226&d=1266179708

gogi
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.