Начну издалека. Приобрел я андрофон заморский 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 свидетель.