LINUX.ORG.RU

Разработка под ARM и soft float point


0

0

Хочется попробовать собрать какой-нибудь софт для linux-кпк с процессором xscale, нашел кучу доков, манов и описаний, но не могу понять, как устроена поддержка плавающей точки. Как следует из даташитов на процессор, у xscale нет сопроцессора для аппаратной ее поддержки, следовательно, нужно собирать компилятор и софт с soft-float. Собрал из сорцов кросс-gcc (arm-linux-gcc 4.2.2), как и должно, с включенной soft-float по-дефолту. Потом взял готовый дистр familiar, вытащил из него все либы, сделал доступными для кросс-компилера и пытался чего-нибудь собрать. Получил ряд ошибок линкера на все либы типа "libc.so.6 uses hardware FP, whereas hello.o uses software FP". Т.е. либы из дистра каким-то образом собраны для hardware FP. Начал копать - сделал arm-linux-objdump -d libc.so.6 и получил дизассемблерный код. В нем, как ни странно, действительно нашлись команды типа "ldfs, flts" и т.д. (команды для работы с hardware FP). Как такое может быть - решительно не понимаю, хотя дистр этот на реальной машинке работает (грузит opie). Пробовал сделать самодельную glibc (2.3.5 собралась, 2.7 совсем не захотела, сказала, для arm не предназначена). После сборки вылезло нечто под 9 метров ростом и работать отказалось (по невыясненым пока причинам), хотя софт собирался и линковался с этой самодельной glibc ней на ура. Для справки - glibc из familiar весит порядка 1Мб. Как я понял по ассемблерному листингу, soft-float компилер заменяет все аппаратные ассемблерные команды типа fmls на вызовы аналогичных по действию функций, например __mulsf3. Остается еще вопрос, где должна быть расположена реализация самих этих функций. Вроде бы можно запихать как в glibc (не от этого ли она так распухла?), а можно в отдельную libfloat. Итак... хотелось бы услышать какой-нибудь ликбез по поводу устройства плавающей точки, а то я уже совсем запутался и ничего не понимаю. Только не нужно предлагать взять кросстул или готовые компилеры. Так не интересно.

anonymous

>Для справки - glibc из familiar весит порядка 1Мб.

а там точно glibc, а не uclibc? ибо glibc на моем x86 весит 1,5 Мб.

и, кстати, попробуй uclibc собрать

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

Да, спасибо. Теперь, зная о чем гуглить, нашел толковое объяснение механизма этой эмуляции (http://www.handhelds.org/pipermail/intimate/8/0810.html). Проблемно получается. Весь familiar в угоду совместимости со старыми либами и софтом работает на hard-float, которого в xscale нет. И выходит эта эмуляция гораздо медленнее, чем могла бы быть через soft-float.

Насчет glibc. У меня несколько готовых либ - одна метр, другая чуть больше - около 1,3М. Думаю, это не uclibc. Как я понял, uc* - это без поддержки MMU(менеджер памяти), а MMU в ARM xscale как раз имеется, поэтому можно собирать полноценные версии.

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

> Как я понял, uc* - это без поддержки MMU(менеджер памяти)

не так, это с возможностью работы без MMU.

а еще можно посмотреть исходники familiar, скрипты компиляции и т.д.

generatorglukoff ★★
()

openembedded.org

angstrom-distribution.org

Нормальные дистры под КПК собирают с softfloat.

Еще почитай про ARM EABI.

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

Да, еще погугли по debian EABI. Там на wiki много всего интересного написано.

anonymous
()

...я сам многие скрипты и системы сборки пропустил через свой пищеварительный тракт:)) и пришёл к выводу, что лучше всего crossdev в gentoo. Имхо, наиболее быстрореагирующая на изменения система сборки. Да и всё уже подготовлено, главное - с выбором target не ошибитьсяи потерпеть пока тулчейн сэмержится. Там и glibc и uclibc и что хочешь.

PS Хотя менять дистр/заводить песочницу, возможно, покажется чрезмерными трудо(трафо?)затратами.

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

..familiar не юзал ниразу...но осуждаю!:).. xscale с хард-флоат?...хм... а точно дистриб для __этого__ процессора? Могёт не та ссылка была кликнута?

PS Читать про EABI и всякие thumb, с моей сугубо субъективной точки зрения, - лишнее забивание головы. При кошерном тулчейне о таким низкоуровненых вещах даже не подозреваешь: конфигуре да маке.

Успехов!

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

Наоборот, очень даже нужно читать. Иначе невозможно подойти к выбору дистрибутива осознанно. На xscale даже стандартный Debian пойдет, но это не значит, что стоит его использовать. В данном случае нужно искать дистрибутив скомпилированный именно с EABI, иначе тормоза будут жуткие.

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

>Наоборот, очень даже нужно читать. Иначе невозможно подойти к выбору дистрибутива осознанно. На xscale даже стандартный Debian пойдет, но это не значит, что стоит его использовать. В данном случае нужно искать дистрибутив скомпилированный именно с EABI, иначе тормоза будут жуткие.

Тут совершенно согласен, НО!

>Хочется попробовать собрать какой-нибудь софт

Я ориентировался на оригинал темы. Если человек хочет __собрать__, то пусть собирает. А тут (особливо по части кроссов) с гентушниками тягаться трудно. Вообще, собирать - гораздо более правильный подход(хотя бы с точки зрения оптимизации и заточки). Недавно снёс из архивов старые сборки..прямо ностальгия пробрала:)))

Для автоматической сборки(галок в меню наставил и собираешь) мне больше всего нравились buildroot и snapgear. Для саморучной(геморно, но уверенней - сам всё делаешь) - crossdev гентушный рулит.

А ставить прекомпилированные дистрибы на embedded...хммм... ну не нравится мне эта идея!:))))))

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

>мне больше всего нравились buildroot и snapgear

Это в хронологическом порядке:). snapgear больше порадовал, хотя я давно не слежу за этими тулзами....может и умерли ужо..

farisey
()

Посмотри на http://pda.gentoo.ru/ . Там используется ARM EABI, glibc 2.7, gcc 4.2.2 и работает softfloat.

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