网站怎么对接微信支付宝番禺网站建设怎么样
2026/4/20 3:21:51 网站建设 项目流程
网站怎么对接微信支付宝,番禺网站建设怎么样,添加网站到百度,南平市建设局网站基于MTK平台的开机启动脚本配置全过程#xff08;含SELinux#xff09; 在Android系统开发中#xff0c;让自定义脚本在设备上电后自动运行#xff0c;是许多嵌入式场景的基础需求——比如初始化硬件传感器、预加载驱动模块、设置系统属性、启动后台守护进程等。但实际操作…基于MTK平台的开机启动脚本配置全过程含SELinux在Android系统开发中让自定义脚本在设备上电后自动运行是许多嵌入式场景的基础需求——比如初始化硬件传感器、预加载驱动模块、设置系统属性、启动后台守护进程等。但实际操作中很多开发者卡在“脚本写好了却没执行”“串口日志显示权限拒绝”“init.rc改了但服务不起来”这类问题上。尤其在MTK平台下由于其特有的sepolicy组织结构和init机制照搬通用Android教程往往行不通。本文以实测通过的完整流程为基础为你梳理一套在MTK平台Android 8.0上可靠部署开机启动shell脚本的标准化方法覆盖从脚本编写、SELinux策略配置、init服务注册到调试验证的全部关键环节。所有步骤均基于真实MTK芯片如MT6765/MT6739等验证不依赖ADB root或关闭SELinux完全符合Android安全启动规范。1. 明确目标与前置条件1.1 你要实现什么脚本在系统完成基本初始化后、zygote启动前自动执行脚本以root权限运行可读写系统属性、访问/dev节点、调用system/bin下的工具SELinux策略正确加载不触发avc denied日志服务可被init管理支持start/stop命令支持oneshot或restart模式方案适配MTK平台标准目录结构非AOSP原生路径1.2 必备开发环境MTK Android源码树已成功编译过bootimage和systemimage已知芯片平台名如mt6765用于定位sepolicy路径可连接串口强烈推荐或adb shell需userdebug版本熟悉adb shell getenforce、dmesg | grep avc、logcat -b events | grep init等基础调试命令注意本文不涉及修改kernel或recovery所有改动均在vendor/system层不影响OTA升级兼容性。2. 编写可执行的启动脚本2.1 脚本位置与命名规范MTK平台默认将客户脚本放在/system/bin/目录下部分新平台也支持/vendor/bin/。为保持一致性我们采用system/core/rootdir/init.test.sh✦ 为什么放这里因为system/core/rootdir/中的文件会在make otapackage时自动打包进system.img且路径在init.rc中引用最稳定避免使用/data/local/tmp/等临时路径重启即失效。2.2 脚本内容要点实测可用模板#!/system/bin/sh # --- 开机启动脚本init.test.sh --- # 功能设置测试属性 记录启动时间 验证执行权限 # 1. 设置一个系统属性用于快速验证是否执行 setprop vendor.test.booted 1 # 2. 记录当前时间戳写入临时文件便于后续检查 echo Boot time: $(date) /data/misc/test/boot.log # 3. 尝试读取一个受SELinux保护的节点验证权限是否就绪 if [ -f /dev/block/by-name/boot ]; then ls -l /dev/block/by-name/boot /data/misc/test/boot.log 21 fi # 4. 清理日志可选 log -p i -t TEST_INIT Script executed successfully2.3 关键注意事项解释器路径必须为/system/bin/shMTK平台默认不 symlink/bin/sh写成/bin/sh会报No such file or directory不要创建新文件或修改system分区/system在Android 8.0默认只读verity校验所有写操作请限定在/data、/dev、/proc等可写区域务必先手动测试编译烧录前用adb push上传并执行adb push init.test.sh /data/local/tmp/ adb shell chmod 755 /data/local/tmp/init.test.sh adb shell /data/local/tmp/init.test.sh adb shell getprop vendor.test.booted # 应输出13. 为脚本配置SELinux策略MTK专用路径3.1 策略文件存放位置MTK平台将客户sepolicy拆分为plat平台通用和non_plat厂商定制两部分。所有新增策略必须放在non_plat目录下否则会被平台策略覆盖device/mediatek/sepolicy/basic/non_plat/ ├── test_service.te ← 类型定义与域声明 └── file_contexts ← 文件路径与SELinux上下文绑定✦ 路径说明device/mediatek/sepolicy/basic/是MTK官方维护的sepolicy基线non_plat/是留给OEM/ODM添加私有策略的标准入口不会随平台升级被重置。3.2 定义服务类型与执行域test_service.te# test_service.te # 声明服务类型domain type test_service, domain; # 声明可执行文件类型file_type type test_service_exec, exec_type, vendor_file_type, file_type; # 允许该domain作为init服务运行 init_daemon_domain(test_service); # 允许test_service域执行test_service_exec类型的文件 allow test_service test_service_exec:file { read open getattr execute }; # 允许读写系统属性关键否则setprop失败 allow test_service system_file:file { read open getattr }; allow test_service system_prop:property_service { set }; # 允许访问/data分区写log用 allow test_service data_file:dir { search add_name remove_name }; allow test_service data_file:file { read write open getattr create unlink }; # 允许访问/dev节点如需要操作硬件 allow test_service dev_type:dir { search }; allow test_service dev_type:chr_file { read write open getattr };3.3 绑定文件路径与SELinux上下文file_contexts在device/mediatek/sepolicy/basic/non_plat/file_contexts末尾追加/system/bin/init\.test\.sh u:object_r:test_service_exec:s0✦ 注意正则转义符\.不可省略否则匹配失败s0是MLS级别MTK平台默认使用MLS0无需修改。3.4 验证策略是否生效编译后检查sepolicy是否包含新规则# 编译后生成的policy文件位于 out/target/product/project/root/sepolicy # 检查是否注入成功 grep -n test_service out/target/product/project/root/sepolicy # 应看到类似allow test_service test_service_exec:file { read open getattr execute };4. 在init中注册服务适配MTK init.rc结构4.1 不要直接修改init.rcMTK平台通常将客户init逻辑分离到独立rc文件中例如device/mediatek/common/init/init.mt6765.rc ← 推荐位置按芯片名区分 # 或 device/mediatek/common/init/init.custom.rc ← 通用客户入口✦ 查找方式grep -r import.*init.*rc device/mediatek/common/init/4.2 添加service声明init.mt6765.rc示例# init.mt6765.rc # ------------------------------- # Test startup script service # ------------------------------- service test_service /system/bin/init.test.sh class main user root group root oneshot seclabel u:object_r:test_service_exec:s0 disabled # 启动时机在zygote启动前、core服务之后 on property:sys.boot_completed0 start test_service4.3 关键参数说明参数说明为什么这样设class main归入main类确保在zygote之前启动避免依赖Java层服务oneshot执行完即退出不常驻启动脚本通常只需一次执行disabled默认禁用由trigger控制启动防止init重复启动导致冲突seclabel显式指定SELinux上下文必须与file_contexts中定义一致✦ 触发时机选择sys.boot_completed0而非early-init前者确保/system已挂载、/data已初始化后者可能因分区未就绪导致脚本失败。5. 编译、烧录与调试验证5.1 编译命令以MT6765为例# 清理旧策略缓存重要 rm -f out/target/product/mt6765/obj/ETC/sepolicy_intermediates/ # 仅编译sepolicy和init相关模块加速验证 m sepolicy android_system_core_init # 或全量编译推荐首次 m bootimage systemimage5.2 烧录与启动验证# 烧录三件套必烧 fastboot flash boot boot.img fastboot flash system system.img fastboot flash vendor vendor.img # 重启并观察串口日志最可靠 fastboot reboot # → 串口应看到[ 12.345678] init: starting service test_service... # → 并在/data/misc/test/boot.log中生成时间戳5.3 常见问题与排查清单现象可能原因快速验证命令解决方案脚本完全不执行service未start / trigger未触发adb shell getprop sys.boot_completed检查rc文件是否被importtrigger条件是否满足avc: denied { execute }file_contexts未生效或路径不匹配adb shell ls -Z /system/bin/init.test.sh确认输出为u:object_r:test_service_exec:s0setprop: permission denied缺少system_prop:property_service { set }权限adb shell dmesg | grep avc在.te中补全property_service规则/data/misc/test/目录不存在脚本执行时/data未挂载adb shell ls /data/misc/改用/data/local/tmp/或添加wait /data指令串口无任何test_service日志init未加载该rc文件adb shell cat /proc/1/cmdline检查init.mt6765.rc是否在import列表中✦ 进阶技巧在脚本开头加入log -p i -t TEST_INIT START结尾加log -p i -t TEST_INIT END通过logcat -b main -t TEST_INIT快速定位执行断点。6. 进阶建议与工程化实践6.1 多脚本统一管理方案若需部署多个启动脚本如init.hw.sh、init.net.sh建议共用同一domain在test_service.te中复用test_service域避免策略碎片化统一rc入口创建init.customer.rc集中import所有客户脚本rc文件版本控制在脚本中加入# VERSION: 1.2.0注释配合getprop ro.build.fingerprint做兼容性判断6.2 SELinux策略最小化原则禁止使用permissive test_service;仅调试阶段临时启用上线前必须删除按需授权用audit2allow -i dmesg.log生成最小权限规则而非盲目添加allow ... *:* { * };隔离敏感操作如需访问/dev/block/单独声明block_device_type不泛化为dev_type6.3 自动化验证脚本推荐集成CI#!/bin/bash # verify_boot_script.sh adb wait-for-device adb shell getprop vendor.test.booted | grep -q 1 echo Boot script executed || echo ❌ Failed adb shell ls -Z /system/bin/init.test.sh | grep -q test_service_exec echo SELinux context OK || echo ❌ SELinux context missing7. 总结本文完整还原了在MTK平台部署开机启动脚本的生产级实践路径从脚本编写时的路径与权限约束到SELinux策略在non_plat目录下的精准注入再到init.rc中符合MTK规范的服务注册方式每一步都直击开发者在真实项目中遇到的典型卡点。你已经掌握如何写出能在MTK平台上稳定执行的shell脚本如何在device/mediatek/sepolicy/basic/non_plat/中正确添加te规则与file_contexts如何通过init.chip.rc而非init.rc实现可维护的服务注册如何用串口日志avc日志logcat三重手段快速定位启动失败原因这套方法已在MT6739、MT6765、MT6785等多个MTK平台量产项目中验证既满足Android CTS对SELinux的强制要求又保持了极高的工程可移植性。下一步行动建议将本文流程固化为团队内部checklist把init.test.sh模板替换为你的业务逻辑如加载GPIO配置、启动modem守护进程在CI流水线中加入verify_boot_script.sh自动化验收--- **获取更多AI镜像** 想探索更多AI镜像和应用场景访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_sourcemirror_blog_end)提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

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

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

立即咨询