Просматривая мою файловую систему Android, я обнаружил, что у нее действительно есть /etc/init.d/
каталог. Посмотрев туда, я нашел /etc/init.d/20userinit
следующие строки:
if [ -e /data/local/userinit.sh ];
then
log -p -i -t userinit "Executing /data/local/userinit.sh";
busybux chmod +x /data/local/userinit.sh;
logwrapper /system/bin/sh /data/local/userinit.sh;
setprop cm.userinit.active 1;
fi;
Разумеется, это именно то , что мне было нужно, я написал на своем компьютере следующий скрипт, а затем перенес его на свое устройство:
#!/system/bin/sh
dropbear -s -g
(нажал на устройство через scp userinit.sh phone:/data/local/userinit.sh
, имейте в виду:])
Перезагрузил устройство, затем запустился ps | grep "[d]ropbear"
, и, конечно же, он работает. Прохлада!
/data/init.sh
запускается при загрузке, если у вас есть root, вы можете редактировать его как хотите. Быть осторожен ;)Редактировать: По-видимому, вам может понадобиться вставить отредактированный скрипт в образ загрузки. Информация о том, как это сделать, здесь: http://forum.xda-developers.com/showthread.php?t=443994
источник
find / -name "init.sh"
нибудь получится. Есть ли другие скрипты, которые запускаются при загрузке?/etc/init.rc
который запускает оболочку. Он должен вызывать init.sh, но если это не так, вы можете просто заставить его вызывать свой собственный скрипт./data
но нет/data/init/.sh
или/etc/init.rc
. Grep не находит интересного экземпляра строкиinit
в/etc
(даже рекурсивном).Смотри в
/etc/
каталог. Обычно он помещается в/system/
раздел, который вы можете смонтировать как RW:Некоторые вышеупомянутые шаги могут быть заменены на:
а позже перемонтируем RO:
Теперь ваша задача найти исполняемый
*rc
файл или файл, который вы изменяете для достижения своей цели:Google о каждом кандидате, чтобы узнать, как этот файл был использован.
Хорошим кандидатом для включения пользовательских скриптов являются строки из:
Поскольку каждое устройство уникально, вам, возможно, придется догадываться о критериях поиска ...
Например я обнаружил,
/etc/mkshrc
что используется оболочкой Korn. Я обновляю этот файл для расширенияPATH
env var, и теперь каждый раз, когда я делаю, уadb shell
меня есть символические ссылки Busybox в моем PATH!Смотрите также трудный путь (если вам не повезло с поиском волшебного файла): https://stackoverflow.com/questions/9768103/make-persistent-changes-to-init-rc
источник
/system
естьsystem.img
и/etc
является символической ссылкой на/system
.Я перепробовал все эти методы, и ни один из них не помог мне. Однако то, что сработало, было основано на ответе лорда-ральфа-адольфа здесь. Как запустить скрипт при загрузке в CM12.1?
в основном, найдите файл
/system/etc/install-recovery.sh
и добавьте следующую строку в начале/data/init.sh &
тогда
Готово! Теперь вы можете положить все, что вы хотите,
/data/init.sh
и он будет работать при запуске. Если файл/system/etc/install-recovery.sh
не находится в вашей системе, то этот ответ не будет работать для вас. Не беспокойтесь о создании этого.источник
/system/etc/install-recovery.sh
нет, но она все еще выполняется при загрузке, если она есть, поэтому стоит проверить.Вещи были просты до Android 5, когда SELinux не было
enforcing
. Вы можете поместить свой код в любой скрипт или заменить двоичный файл скриптом, который выполнялся с привилегиями root при загрузке. Другой метод заключался в том, чтобы определить пользовательскийinit
сервис специально для пакетного выполнения сценариев из некоторого каталога.На основе этих подходов пользовательских разработчиков ROM введены разные псевдо-
init.d
явление , как/etc/init.d/
,/etc/install-recovery.sh
,/etc/init.qcom.post_boot.sh
,/system/bin/debuggerd
,/data/init.sh
,/data/local/userinit.sh
, и/data/local/init.d/
т.д.Однако процесс, выполняемый с UID,
0
но в ограниченном контексте SELinux, совершенно беспомощен. Служба началась вinit.rc
файле сu:r:init:s0
контекстом не может даже выполнить скрипт из/system/bin/
, так потребности SELinux политики должны быть исправлена , чтобы ввести в неограниченном контекст , например Magisk определяетu:r:magisk:s0
. После этого можно запускать скрипт напрямую какinit
сервис или изinit.d
-подобного каталога.Подробнее см. Как запустить исполняемый файл при загрузке и сохранить его работоспособным?
источник
Простой способ (рабочий):
Подготовьте ваши команды после загрузки в скрипте, скажем / system / xbin / post-boot (установите exec perm)
Добавьте указанный выше путь к пользовательскому сценарию в конце /system/etc/init.qcom.post_boot.sh
Например:
echo / system / xbin / post-boot >> /system/etc/init.qcom.post_boot.sh
Готово!
(Если вы не можете найти qcom post_boot (устройства Qualcomm), поищите сценарии post_boot)
источник
Если у вас установлен magisk, вы можете поместить .sh в:
или
Не забудьте сделать его исполняемым:
chmod +x your-script.sh
.Дополнительная информация: https://github.com/topjohnwu/Magisk/blob/master/docs/guides.md#boot-scripts
источник