LINUX.ORG.RU

Параметры соместимости arm


0

1

Начну издалека. Приобрел я андрофон заморский mts916, в девичестве zte racer x850. Долго ли коротко ли решил поставить на него генту в чрут. Даже нашел подходящий stage3 под armv6j собранный. Закинул в тушку, чрутнулся и сказал это есть хорошо. Стал софт собирать да обживаться. Вот только пямяти там с гулькин нос, процессор еле тянет, а уж про скорость SD только матом. Закручинился. Прознал что есть в портежах далеких чудо-утилита crossdev. Раздобыл, да никак не мог glibc собрать. То ядро ему не то, то TLS подавай. На счастье нашелся у меня древний чрут, с софтом выдержанным, там и удалось кросстулчайн собрать. Заживем думаю. Но только я cross-emerge system запустил, так на разбойника perl и нарвался. Он в секции configure что негодник удумал: соберет бинарь да и пытается его выполнить. Не понимает что собрал то не под ту архитектуру. Питон тоже не собирается, да еще по мелочи.

Тогда решил, подниму в qemu хост виртуальный, да и пусть компилит хоть до посинения. Открыл спецификацию на телефон, читаю: процессор qualcomm msm7227 на ядре ARM1136EJ-S с поддержкой инструкций ARMv6. Спросил у qemu список процов поддерживаемых, а она мне и отвечает человеческим голосом:

arm926 arm946 arm1026 arm1136 arm1136-r2...

Хорошо думаю, почти что надо. Посмотрел еще qemu -M ? и стал разные платформы пробовать. Скомпилю ядро соответствующее, да и пытаюсь загрузить. И как-то всё больше черный экран мне qemu показывала (хоть на последовательном порту и писала что грузит ядро) пока не выбрал versatilepb ARM Versatile/PB (ARM926EJ-S). Ядро значит так собрал:

make ARCH=arm CROSS_COMPILE=armv6j-unknown-linux-gnueabi- versatile_defconfig

make ARCH=arm CROSS_COMPILE=armv6j-unknown-linux-gnueabi- all

Виртуалку так пускаю:

qemu-system-arm -M versatilepb -m 128M -kernel tmp/zImage-versatilepb_defconf -append 'root=/dev/nfs rw nfsroot=10.0.2.2:/mnt/cdrom ip=10.0.2.15:10.0.2.2:10.0.2.2:255.255.255.0:arm:eth0:off nfsdebug init=/hello'

(по нфсу корень отдаю чтоб не париться). А /hello тот компилирую совсем запросто: armv5-none-linux-gnueabi-gcc -mcpu=arm926ej-s --static hello.c -o hello. Я уж тут и тулчейны всякие перепробовал, и -mcpu по всякому изгалял — нет, не работает. При том что на самом телефоне прекрасно запускается. Вот что пишет под qemu негодник:

http://img825.imageshack.us/i/63548070.png/

Не лучшие результаты если подсунуть гентушный stage3-armv6j или armv5te

Ну а теперь как водится вопрос к залу: почему ядро собралось и нормально взлетело под 926 процессором, а бинарники никак не хотят? При том что будучи собранными под 926 они на тушке (1136) прекрасно взлетают? И есть ли другие способы решить проблему кросс-компиляции ?

PS: обращение по nfs точно идет, inotify свидетель.



Последнее исправление: LowLevel (всего исправлений: 1)

У тебя энвайрмент кривой. Хотя там с перлом все равно говно. Правда в другом )

vasily_pupkin ★★★★★
()

> Ну а теперь как водится вопрос к залу: почему ядро собралось и нормально взлетело под 926 процессором, а бинарники никак не хотят?

Может быть бинарники собраны под EABI, а CONFIG_AEABI в ядре не включен? Или наоборот - бинарники под старое ABI, а ядро EABI без включенной совместимости (CONFIG_OABI_COMPAT).

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

Блин! Точно! Я и забыл что ядро тоже требует EABI. Всё работает. Живем. Всем спасибо =)

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