init: cannot setexeccon(‘u:r:logd:s0‘): Invalid argument

本文探讨了在Android8.0中遇到的服务无法启动的问题,详细分析了两种常见原因:seclabel标记的文件缺失及sepolicy权限配置不当,并提供了相应的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android 8.0添加新的sepolicy权限后,烧boot.img,system.img到手机里面,发现服务无法起来:
init: cannot setexeccon('u:r:logd:s0'): Invalid argument
service logcatserive /system/bin/logcat -v threadtime  -b radio -r 1024 - -n 10 -f /data/logcat-radio-log
    class late_start
    user root
    group system
    disabled
    seclabel u:r:logcat:s0
一般这样的报错有两种原因:
1、要seclable的文件不存在,例如上面的service,/system/bin/logcat不存在,就要查看手机里面改文件是否存在,对应的权限是否正确;
2、Android 8.0上面,Sepolicy权限发生了变化, device/XXX/YYY/sepolicy 存储在vendor.img中,假设修改的权限再该目录中,就要同时刷入vendor.img到手机中,
否则会报该错误,cannot setexeccon;
Android 8.0权限相关资料:
Policy placement
In Android 7.0, partners could add policy to BOARD_SEPOLICY_DIRS, including policy meant
to augment AOSP policy across different device types. In Android 8.0, adding a policy to
BOARD_SEPOLICY_DIRS places the policy only in the vendor image.
In Android 8.0 AOSP, policy exists in the following locations:
● system/sepolicy/public. Includes policy exported for use in vendor-specific policy.
Everything goes into the Android 8.0 compatibility infrastructure, and vendors include
it as part of their policy so it can be relied upon (leading to restrictions on the type of
policy that can be placed here). Consider this the platform’s exported policy API:
Anything that deals with the interface between /system and /vendor should be here.
● system/sepolicy/private. Includes policy necessary for the functioning of the system
image, but of which vendor image policy should have no knowledge.
● system/sepolicy/vendor. Includes policy for components that go in /vendor but exist
in the core platform tree (not device-specific directories). This is an artifact of build
system’s distinction between devices and global components; conceptually this is a
part of the device-specific policy described below.
● device/XXX/YYY/sepolicy. Includes device-specific policy. Also includes device
customizations to policy, which in Android 8.0 now corresponds to policy for
components on the vendor image
 
<think>好的,我现在需要帮助用户查找关于MTK平台从post-fs到late-fs初始化阶段的相关信息。首先,我需要回忆一下Android系统的初始化流程。Android的初始化过程主要分为几个阶段,比如早期初始化、内核启动后的init进程阶段,而init进程又分为不同的执行阶段,如early-initinit、post-fs、post-fs-data、early-boot和boot等。 根据用户提到的post-fs到late-fs,可能是指post-fs和late-fs这两个阶段。不过,标准的Android init阶段中并没有late-fs这个阶段,可能用户是指post-fs-data或者其他阶段?或者可能是MTK平台特有的阶段命名?需要确认一下MTK是否有自定义的阶段名称。 接下来,我需要参考用户提供的引用内容,看看是否有相关的线索。引用[1]提到了machine_desc结构体和启动参数的设置,这可能与硬件初始化相关,但不确定是否直接关联到post-fs阶段。引用[3]提到了board_init_f函数和SPL的堆栈配置,这可能属于U-Boot阶段的初始化,可能与Androidinit阶段不同。引用[4]是关于蓝牙状态机的处理,可能和用户的问题无关。所以可能需要主要依靠Android初始化流程的知识。 在标准的Android初始化中,post-fs阶段是在挂载文件系统之后执行的,负责处理需要访问文件系统的早期任务,比如加载内核模块或设置关键目录的权限。而post-fs-data阶段则是在数据分区挂载后执行,通常用于数据加密或解密等操作。late-init阶段是在基本服务启动后执行的,可能用户说的late-fs是指这个阶段? 另外,MTK平台可能对Androidinit流程进行了定制,添加了特定的阶段或修改了某些服务的启动顺序。例如,MTK可能有自己的启动脚本或init.rc文件中的自定义阶段,或者使用了特定的守护进程来处理硬件相关的初始化任务。 需要进一步考虑MTK平台在post-fs阶段可能执行的操作,比如加载与调制解调器相关的模块,设置特定的硬件参数,或者初始化多媒体组件。例如,引用[2]中提到的dma buffer分配可能在初始化音频子系统时发生,这可能属于post-fs阶段之后的服务启动阶段。 此外,MTK平台可能会有自己的服务定义在init.rc文件中,比如启动与基带通信相关的服务,或者传感器管理服务。这些服务可能在post-fs阶段之后启动,属于late-init的一部分。 可能用户遇到的问题是关于MTK平台在这两个阶段之间的初始化过程,比如某个服务未能正确启动,或者文件系统挂载的问题。需要结合MTK的文档或源码来分析具体的流程,比如查看init.rc中的阶段定义,或者MTK提供的开发文档中关于启动流程的部分。 总结来说,回答需要涵盖Android标准初始化流程中的post-fs和可能的late-init阶段,然后结合MTK平台的定制部分,说明可能涉及的步骤和组件,如文件系统挂载、硬件初始化、服务启动等,并建议用户查阅MTK的文档或相关源码进行深入分析。</think>在MTK平台中,`post-fs`到`late-fs`的初始化流程属于Android系统启动阶段的关键环节,涉及文件系统挂载和硬件初始化。以下为详细分析: --- ### **MTK初始化流程:post-fs到late-fs** 1. **post-fs阶段** - **触发时机**:在文件系统(`/system`分区)挂载完成后执行。 - **核心操作**: - 设置关键目录权限(如`/system/bin`、`/system/lib`)[^3] - 加载内核模块(如MTK专用驱动:`mtk_disp.ko`或`mtk-ufsd.ko`) - 初始化日志系统(如`logd`服务) - 启动`vold`守护进程管理存储设备 2. **post-fs-data阶段** - **触发时机**:`/data`分区挂载后执行,通常与加密/解密相关。 - **MTK定制操作**: - 初始化NVRAM(非易失性存储)用于保存基带校准数据 - 挂载`/vendor`分区(包含MTK硬件抽象层HAL库) - 启动`mtk_agpsd`(辅助GPS服务) 3. **late-fs阶段** - **MTK实现**:此阶段可能对应`late-init`或自定义阶段,主要完成: - 启动`Zygote`进程(Java虚拟机环境) - 初始化传感器服务(如MTK SensorHub的`ssc_daemon`) - 加载多媒体框架(如MTK Camera HAL的`libcamalgo.so`) - 触发`boot_complete`事件,进入用户界面初始化 --- ### **关键代码与配置** - **init.rc文件**:MTK会在`/vendor/etc/init/hw/`下定义阶段动作,例如: ```bash on post-fs # 设置MTK调试接口权限 chmod 0660 /sys/devices/platform/mtk_dbg/dbglvl start mtklogd on late-fs # 启动MTK硬件服务 start vendor.mtk_hal_service ``` - **硬件相关**:通过`machine_desc`结构体匹配设备树(DTS),初始化平台特有硬件[^1]。 --- ### **典型问题与调试方法** 1. **文件系统挂载失败** - 检查`fstab.mtXXXX`文件中的分区标签和挂载选项 - 使用`dmesg | grep "mmcblk"`查看存储设备初始化日志 2. **服务启动超时** - 在`init.rc`中添加`setprop debug.mtk.init 1`启用详细日志 - 检查`/sys/fs/pstore/console-ramoops`获取内核崩溃信息 3. **NVRAM初始化异常** - 使用`nvram_daemon`的调试模式:`nvram_daemon -d` - 验证`/data/nvram`目录权限是否为`system:system` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值