安卓开机自定义.sh脚本仅insmod生效其余命令失效求助
分析与解决方案
嘿,我来帮你捋捋这个问题!从你描述的情况来看,insmod能正常工作但后续命令全部失效,大概率是文件写入权限或者执行环境限制导致的,咱们一步步排查:
1. 核心问题:/system 分区的只读挂载限制
安卓设备的 /system 分区默认是只读挂载的——哪怕你是以root身份运行,也没法直接往 /system/etc 目录里写入文件。这就是为什么 lsmod > /system/etc/curlsmod 这类输出文件没生成、iptables规则的结果也存不下来的根本原因。
解决方法很简单:在脚本开头先把 /system 重新挂载为可读写,执行完所有操作后再改回只读(保证系统稳定性):
#!/system/bin/sh # 先将/system挂载为可读写 mount -o remount,rw /system # 原有的命令逻辑 insmod /system/lib/modules/xt_HL.ko lsmod > /system/etc/curlsmod /system/bin/iptables -t mangle -L > /system/etc/preiptables /system/bin/iptables -t mangle -A POSTROUTING -o rmnet+ -j TTL --ttl-set 64 /system/bin/iptables -t mangle -L > /system/etc/postiptables # 恢复/system为只读(可选但推荐) mount -o remount,ro /system
2. 给命令加错误日志,精准定位问题
如果还是有问题,可以给每个命令加上错误输出重定向,这样能直接看到失败原因:
insmod /system/lib/modules/xt_HL.ko 2>/system/etc/insmod_err.log lsmod > /system/etc/curlsmod 2>/system/etc/lsmod_err.log /system/bin/iptables -t mangle -L > /system/etc/preiptables 2>/system/etc/preiptables_err.log /system/bin/iptables -t mangle -A POSTROUTING -o rmnet+ -j TTL --ttl-set 64 2>/system/etc/iptables_err.log /system/bin/iptables -t mangle -L > /system/etc/postiptables 2>/system/etc/postiptables_err.log
开机后查看这些_err.log文件,就能明确是权限问题、命令不存在还是接口名错误。
3. 其他可能的小问题
- 脚本权限规范:你当前设置的
644权限虽然能通过sh调用运行,但为了兼容性,建议改成755:chmod 755 /system/etc/init.fairnet.sh - iptables路径验证:有些定制ROM的
iptables可能不在/system/bin/下,手动执行which iptables确认路径后再修改脚本 - 网络接口名检查:
rmnet+不一定是你设备的移动数据接口,开机后执行ip link show查看实际接口名(比如rmnet0、rmnet_data0),替换掉脚本里的rmnet+
内容的提问来源于stack exchange,提问作者mustafadjan
相关产品推荐
相关产品推荐

