#1 楼
环顾我的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"
,当然,它正在运行。凉爽!#2 楼
/data/init.sh
在引导时运行,如果您具有root用户,则可以根据需要对其进行编辑。请小心;)编辑:显然,您可能也需要将编辑后的脚本拖入启动映像中。有关如何执行此操作的信息,请参见:http://forum.xda-developers.com/showthread.php?t=443994
评论
是的,我似乎无法在运行CM7-RC1的Nexus One上找到此文件。我将查看find / -name“ init.sh”是否打开了任何东西。在启动时还有其他脚本运行吗?
– Naftuli Kay
2011年3月2日21:32
您应该有一个/etc/init.rc来启动外壳程序。它应该调用init.sh,但如果不这样做,则可以使其调用自己的脚本。
–马修·雷德(Matthew Read)
2011年3月2日21:40
不幸的是,我也没有那个脚本,但是我确实找到了解决方案。
– Naftuli Kay
2011年3月2日在21:49
它是什么版本的Android? 4.3确实有/ data但没有/data/init/.sh或/etc/init.rc。 Grep在/ etc中找不到任何有趣的字符串init实例(甚至是递归的)。
–StéphaneGourichon
2013年12月7日18:32
您有什么想法在构建AOSP时如何添加启动脚本?
–萨利赫
18/09/22在15:40
#3 楼
查找到/etc/
目录。通常将其放在/system/
分区中,您可以将其安装为RW: /> ,然后重新安装RO:
$ ls -l /etc
lrwxrwxrwx 1 root root 11 Jan 1 2009 /etc -> /system/etc
$ su
$ mount -o remount,rw /system
$ chmod o+w /system/etc # for "adb push"
现在您的任务是查找可执行文件或
*rc
文件,您对其进行了修改以实现目标:$ adb root
$ adb remount
有关每个候选者的Google信息,以了解如何使用此文件。
包含自定义脚本的很好的候选者是:
$ chmod o-w /system/etc
$ mount -o remount,ro /system
由于每个设备的唯一性,您可能需要自己对搜索条件进行猜测...
例如,我找到了Korn shell使用的
/etc/mkshrc
。我更新了此文件以扩展PATH
env var,现在每次执行adb shell
时,我的PATH中都有Busybox符号链接!另请参阅困难的方式(如果您没有找到魔术文件的运气):https: //stackoverflow.com/questions/9768103/make-persistent-changes-to-init-rc
评论
但是,不是每次启动都覆盖它吗?我认为/ etc文件夹是属于ramdisk的cpio的一部分。
–疯狂
16 Dec 18'在17:09
@ransh至少在以下情况中不是这种情况:8.1.0_r60其中/ system是system.img,而/ etc是到/ system的符号链接。
– Ciro Santilli郝海东冠状病六四事件法轮功
19年1月31日在10:48
#4 楼
我尝试了所有这些方法,但对我来说都不起作用。基本上,找到文件
/system/etc/install-recovery.sh
并在开头添加以下行/data/init.sh &
然后
touch /data/init.sh
chmod 755 /data/init.sh
完成!
您现在可以在
/data/init.sh
中放入所需的任何内容,它将在启动时运行。不要为创建它而烦恼。评论
实际上,我有一个不存在/system/etc/install-recovery.sh的系统,但是如果存在,它仍会在引导时执行,因此值得检查。
– jcaron
18年8月8日在22:25
这是唯一适用于Android 9的功能。
–埃里克·塞巴斯塔(Eric Sebasta)
8月23日5:00
#5 楼
如果安装了magisk,则可以将.sh放置到:/sbin/.magisk/img/.core/service.d/
或
/sbin/.magisk/img/.core/post-fs-data.d/
不要忘记使其可执行:
chmod +x your-script.sh
。更多信息:https://github.com/topjohnwu/Magisk/blob/master/docs/guides.md#boot-scripts
#6 楼
在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/
的Shell脚本,因此需要修补SELinux策略以注入不受限制的上下文,例如。 Magisk定义了u:r:magisk:s0
。之后,可以直接作为init
服务或从类似init.d
的目录运行脚本。有关详细信息,请参见如何在启动时运行可执行文件并保持其运行?
#7 楼
简单的方法(工作):在脚本中准备启动后的命令,例如/ 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(高通设备),请查找任何post_boot脚本)
评论
评论不作进一步讨论;此对话已移至聊天。
–Firelord♦
19-10-22在8:22