Собрал Cyanogenmod 7.2 с целью выпилить init, чтобы запускать его в chroot (хочу сделать портативную сборку android для запуска в chroot).
Выяснилось, что даже busybox в chroot не запускается, вылетает с ошибкой сегментирования.
Статические бинарники при запуске из корня работают, но при запуске из chroot ошибка сегментирования их настигает довольно быстро: путём добавления отладочно-трассировачных строк
printf("<function name>");
Динамически слинкованные вылетают сразу при загрузке libc (виноват linker)
Так, как linker собран статически, попробывал запустить его из корня:
xecve("/android-chroot/root/system/bin/linker", ["/android-chroot/root/system/bin/"...], [/* 40 vars */]) = 0
set_tls(0xb0013d48, 0x1, 0xb0014870, 0, 0xb0012f7c) = 0
getpid() = 1744
sigaction(SIGILL, {0xb0005bfd, [], SA_RESTART}, {SIG_DFL, [], 0}, 0) = 0
....... остальные sigaction
sigaction(SIGPIPE, {0xb0005bfd, [], SA_RESTART}, {SIG_DFL, [], 0}, 0) = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0xffffff60} ---
Далее идёт обработчик для sigsegv, который снова рушится уже без обработки.
P.S Код функции main линкера:
int main(int argc, char **argv)
{
return 0;
}
P.P.S в коде linker есть ассемблерный файл, вызывающий _linker_init. При попытке дописать туда printf ругается:
ERROR: malloc called from the dynamic linker!
По крайней мере это означает, что хоть что-то работает.
Ещё могу добавить, что не вылетает adb, хотя работоспособность проверить тоже не могу т.к отстутствует модуль g_android.