建站网站和维护需要会什么安徽招标网官网
2026/5/20 17:07:50 网站建设 项目流程
建站网站和维护需要会什么,安徽招标网官网,绵阳建设局官方网站,if设计大赛官网MTK平台开机脚本配置技巧#xff0c;亲测有效不踩坑 在MTK平台开发中#xff0c;配置开机自启动脚本看似简单#xff0c;实则暗藏多个关键细节。很多开发者在调试过程中反复遇到“脚本没执行”“权限被拒绝”“SELinux报错”“属性未生效”等问题#xff0c;往往耗费数小时…MTK平台开机脚本配置技巧亲测有效不踩坑在MTK平台开发中配置开机自启动脚本看似简单实则暗藏多个关键细节。很多开发者在调试过程中反复遇到“脚本没执行”“权限被拒绝”“SELinux报错”“属性未生效”等问题往往耗费数小时甚至一两天才定位到真正原因。本文基于真实项目经验梳理出一套经过多款MTK芯片MT6765、MT6785、MT8788验证的稳定配置流程不讲理论套话只说实操要点、避坑提示和可直接复用的代码片段。1. 核心原则先验证再集成分步闭环验证很多问题源于“一步到位”的错误思路——把脚本、te策略、init.rc修改一次性提交编译结果开机失败却无法快速定位是哪一环出了问题。正确做法是分四步闭环验证每步都确保有明确可观测的结果脚本能否手动执行成功adb shell下运行脚本能否通过init服务方式执行不依赖SELinux策略时临时关闭验证SELinux策略是否加载且生效dmesg | grep avc无拒绝日志开机后关键效果是否达成如属性设置、文件生成、进程存在每一步都必须有可验证输出例如设置一个test.boot.ok1属性或向/data/misc/test/boot.log写入时间戳。没有输出即等于没执行这是排查的第一铁律。2. 脚本编写路径、权限与执行环境三重校验2.1 脚本存放位置与路径声明MTK平台推荐将开机脚本统一放在/system/bin/目录下非/system/xbin/或/vendor/bin/原因如下/system/bin/在init.rc中默认具有root:shell权限无需额外修改file_contextsinit进程默认以root身份执行该路径下的二进制和脚本兼容性最好避免因/vendor/bin/挂载时机晚于init.rc解析导致脚本找不到脚本示例/system/bin/init.mtk.boot.sh#!/system/bin/sh # 注意必须使用 /system/bin/sh不可写成 /bin/sh 或 /system/xbin/sh # MTK平台的sh解释器路径固定写错将静默失败 # 第一步立即设置一个可检测的属性最可靠的执行证据 setprop sys.mtk.boot.script 1 # 第二步记录执行时间用于确认是否真正在开机阶段运行 echo [BOOT] $(date) - init.mtk.boot.sh executed /data/misc/test/boot.log # 第三步执行业务逻辑示例创建标志文件 touch /data/misc/test/boot_done.flag chmod 644 /data/misc/test/boot_done.flag # 第四步可选——启动一个后台守护进程需注意进程生命周期 # nohup /system/bin/my_daemon /dev/null 21 2.2 关键避坑点Shebang行必须顶格且路径绝对准确#!/system/bin/sh不能有多余空格不能写成#!/system/bin/sh末尾空格脚本必须可执行chmod 755 /system/bin/init.mtk.boot.sh否则init会跳过执行避免使用/data以外的临时路径/tmp、/dev等在早期init阶段可能未挂载或不可写禁止在脚本中调用reboot、poweroff等危险命令可能导致系统无法正常启动3. SELinux策略配置te文件与file_contexts精准匹配MTK平台SELinux策略分散在device/mediatek/sepolicy/下切勿修改platform目录所有定制策略应放入basic/non_plat/子目录。3.1 te策略文件device/mediatek/sepolicy/basic/non_plat/test_boot.te# 定义服务域类型 type test_boot_service, domain; type test_boot_service_exec, exec_type, vendor_file_type, file_type; # 允许init以该域启动服务 init_daemon_domain(test_boot_service); # 允许该服务读取/执行自身文件 allow test_boot_service test_boot_service_exec:file { read open getattr execute }; # 允许该服务设置系统属性关键否则setprop失败 allow test_boot_service system_prop:property_service set; # 允许该服务写入/data/misc/目录如需记录日志 allow test_boot_service data_file:dir { add_name remove_name }; allow test_boot_service data_file:file { create write getattr }; # 可选如需访问网络或设备节点按需添加 # allow test_boot_service net_admin:capability net_admin; # allow test_boot_service devpts:chr_file { read write };注意init_daemon_domain()已隐含domain_auto_trans()能力无需额外声明auto_trans规则。3.2 file_contexts映射device/mediatek/sepolicy/basic/non_plat/file_contexts在该文件末尾添加一行必须单独一行前后无空格/system/bin/init\.mtk\.boot\.sh u:object_r:test_boot_service_exec:s0正则转义必须完整.需写为\.否则匹配失败路径必须与实际安装路径完全一致若脚本放在/vendor/bin/此处必须改为/vendor/bin/init\.mtk\.boot\.sh标签名必须与te文件中定义的test_boot_service_exec严格一致4. init.rc服务定义独立rc文件 显式seclabelMTK平台强烈建议不修改system/core/rootdir/init.rc主文件而是在device/mediatek/common/init/下新建专属rc文件如init.mtk.boot.rc并确保其被init自动加载。4.1 创建device/mediatek/common/init/init.mtk.boot.rc# MTK平台开机自启动服务 service mtk_boot_script /system/bin/init.mtk.boot.sh class main user root group root oneshot seclabel u:object_r:test_boot_service_exec:s0 # 可选添加触发条件确保在关键服务之后启动 on property:sys.boot_completed1 start mtk_boot_script4.2 确保rc文件被加载检查device/mediatek/common/init/init.common.rc中是否包含import /init.mtk.boot.rc若无则添加。import语句必须位于on early-init或on init块之外且在import /init.usb.rc等标准rc之后。验证方法编译后解包ramdisk.img确认init.mtk.boot.rc存在于根目录且init.rc中存在对应import行。5. 编译与验证全流程从push到量产的五步法5.1 快速验证无需整包编译adb root adb remountadb push init.mtk.boot.sh /system/bin/adb shell chmod 755 /system/bin/init.mtk.boot.shadb shell /system/bin/init.mtk.boot.sh→ 检查getprop sys.mtk.boot.script是否为1adb shell cat /data/misc/test/boot.log→ 确认时间戳存在通过则脚本本身无问题。5.2 SELinux临时关闭验证定位策略问题adb shell setenforce 0 adb reboot # 开机后检查属性和日志 adb shell getprop sys.mtk.boot.script # 应为1 adb shell cat /data/misc/test/boot.log # 应有新时间戳若此时成功说明问题100%在SELinux策略 失败则回到脚本或rc配置检查。5.3 SELinux策略调试关键日志抓取adb shell dmesg | grep avc | tail -20 # 常见错误示例 # avc: denied { set } for propertysys.mtk.boot.script scontextu:r:test_boot_service:s0 tcontextu:object_r:system_prop:s0 tclassproperty_service # 对应需添加allow test_boot_service system_prop:property_service set;5.4 整包编译与烧录修改Android.mk或Android.bp确保init.mtk.boot.rc被复制到ramdisk在BoardConfig.mk中确认BOARD_SEPOLICY_DIRS device/mediatek/sepolicy/basic/non_plat编译make snod生成新system.img和ramdisk.img烧录后执行adb shell getenforce确认为Enforcing5.5 量产前必做检查清单检查项命令/方法期望结果脚本是否存在且可执行adb shell ls -l /system/bin/init.mtk.boot.sh-rwxr-xr-xrc文件是否加载adb shell cat /proc/1/cmdline包含init.mtk.boot.rcSELinux策略是否加载adb shell sesearch -A | grep test_boot_service有输出规则属性是否设置成功adb shell getprop sys.mtk.boot.script1日志是否写入adb shell tail -5 /data/misc/test/boot.log有最新时间戳6. 常见问题与根因分析附解决方案6.1 “脚本完全没执行”getprop始终为空根因1init.rc中seclabel标签名与file_contexts不一致解决sesearch -A \| grep test_boot_service_exec确认标签加载成功根因2init.mtk.boot.rc未被import或import语句位置错误解决解包ramdisk.img检查init.rc内容及init.mtk.boot.rc是否存在根因3脚本shebang路径错误如写成/bin/sh解决adb shell file /system/bin/init.mtk.boot.sh确认解释器路径6.2 “脚本执行了但setprop失败”根因SELinux缺少property_service set权限解决在test_boot.te中添加allow test_boot_service system_prop:property_service set;6.3 “日志写入失败提示Permission denied”根因/data/misc/test/目录不存在或权限不足解决在脚本开头添加mkdir -p /data/misc/test chmod 755 /data/misc/test6.4 “开机后进程存在但属性被清空”根因init在on property:sys.boot_completed1后重置了部分属性解决改用persist.前缀属性如setprop persist.sys.mtk.boot 1该属性重启不丢失7. 进阶技巧让开机脚本更健壮、更可控7.1 添加执行状态反馈机制在脚本末尾加入# 记录执行状态码0成功非0失败 echo $? /data/misc/test/boot_exit_code # 同时写入属性便于上层APP读取 setprop sys.mtk.boot.exit_code $?上层应用可通过SystemProperties.get(sys.mtk.boot.exit_code)实时获取结果。7.2 支持动态开关适配测试/量产模式在/data/misc/test/boot_config中预置配置# 内容示例 ENABLEDtrue LOG_LEVELDEBUG脚本中读取if [ $(cat /data/misc/test/boot_config 2/dev/null | grep ENABLEDtrue) ]; then echo [INFO] Boot script enabled # 执行主逻辑 else echo [INFO] Boot script disabled by config exit 0 fi7.3 错误自动上报仅限工程机if [ $? -ne 0 ]; then echo [ERROR] Script failed at line $LINENO /data/misc/test/boot_error.log # 触发上报服务需预置 am startservice -n com.mtk.debug/.BootErrorService fi获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询