Shell совершенно не работает, набор инструментов утверждает, что «такой инструмент отсутствует»

HTC Magic, рутированный с помощью CyanogenMod 5. Пытался установить busybox с помощью "Busybox Installer" из Маркета, в итоге система странно борется. Андроид не загружается, зависает на заставке. Оболочка ADB, однако, работает. С другой стороны, почти ни одна из команд не работает.

Похоже, файл busybox находится в /system/xbin. Однако всякий раз, когда я его вызываю, я получаю «Отказано в доступе». Даже после судо.

Выполнение общих команд, таких как ls, cp, ln, дает то же сообщение об ошибке: «Отказано в доступе». Похоже, это симлинки на busybox, который забит, см. выше.

/system/bin/toolbox есть, но он отказывается выполнять большинство полезных команд с единообразным сообщением «Нет такого инструмента». Ls, cp, mount, chmod, chown - "Нет такого инструмента". Опытным путем обнаружил, что set, ps, kill, reboot работают. Есть ли список команд панели инструментов?

Единственное релевантное сообщение в logcat: «02-02 01:36:38.280: E/logwrapper (61): выполнение /system/xbin/busybox не удалось: разрешение отклонено». Я вроде знал это.

Я могу писать на SD-карту. Есть ли способ перепрошить busybox, сделав его исполняемым?

Есть ли исполняемый файл где-нибудь в /data, чтобы я мог отправить туда копию busybox?

Я могу перезагрузиться в режиме восстановления, который является собственным режимом восстановления Android.

Есть идеи, как вернуть систему в рабочее состояние? Телефон с нуля, так что потеря данных не проблема - там нет хороших данных.

Кажется, что создание исполняемого файла busybox каким-то образом вернет все обратно. Я совершенно потерян, однако, как это сделать. И я довольно удивлен, что набор инструментов не поддерживает chmod.

РЕДАКТИРОВАТЬ: забавная точка данных. Когда я загружаюсь в рекавери, я все еще могу сделать оболочку ADB. И я получаю совсем другое окружение — там командная строка с ls, busybox (!) и прочее. /система почти пуста. Можно ли из этой среды как-то вернуться в обычную /system? Доступна команда mount.

Если вы можете прошить кастомное рекавери, у него может быть опция «исправить разрешения». CWM делает.
На мой взгляд, вы можете попробовать отправить двоичный файл busybox /data/local, а затем использовать его для chmodтого, который находится в /system/xbin.
@eldarerathis: когда я помещаю busybox в /data/local, он не становится исполняемым. И у меня нет chmod в моем распоряжении.
Ах да, у него не будет прав на исполняемый файл после нажатия. Пользовательское восстановление может быть хорошей ставкой, как упоминал @MatthewRead.
@eldarerathis Да, но для RM требуется загруженное устройство;). Сева, а можно suпока в рекавери прилаживать? Это может сделать все видимым. На моем Vibrant «окружающая среда» точно такая же, как и в обычном режиме восстановления, поэтому я надеюсь, что и для вас она не отличается.
Согласно вашему последнему редактированию: вы сможете смонтировать /systemраздел устройства из восстановления. mount /systemсам по себе работает для меня, но я не знаю, зависит ли это от устройства/восстановления/и т. д. Это на HTC EVO.
@eldarerathis: понял это. Забавно, похоже, рекавери — это запасной экземпляр Linux.

Ответы (1)

Ура, телефон снова загружается.

Вот волшебный рецепт.

Boot into recovery.
adb shell
mkdir /data/s
mount -o rw -t yaffs2 /dev/block/mtdblock3 /data/s
chmod 755 /data/s/xbin/busybox
Reboot the phone.

Моя оболочка вернулась. Теперь есть странная причуда - ls (предполагается, что из busybox) думает, что ADB является терминалом ANSI, и пытается выдать escape-последовательности ANSI. Тем не менее, ура.

Это было мое предположение - что разрешения не были установлены, чтобы разрешить выполнение busybox обычным пользователем.