记录开机过程出现用户空间crash导致panic重启,表现为开机时间长的问题
5.0.3 Release分支系统开机过程日志出现用户空间触发的panic reboot事件
[pid=1][Init][WARNING][init_signal_handler.c:43]Child process foundation(pid 1940) exit with signal : 11
[pid=1][Init][WARNING][init_signal_handler.c:54]Service warning foundation, SIGCHLD received, pid:1940 uid:5523 status:11.
[pid=1][Init][INFO][init_common_service.c:803]ServiceReap info foundation pid 1940.
[pid=1][Init][ERROR][init_common_service.c:851]ServiceReap error critical service crashed foundation 4
[pid=1][Init][INFO][init_reboot.c:24]ExecReboot panic
日志对应的源码位置
base/startup/init/services/init/init_common_service.c
if (service->attribute & SERVICE_ATTR_CRITICAL) { // critical
if (!CalculateCrashTime(service, service->crashTime, service->crashCount)) {
INIT_LOGE("ServiceReap error critical service crashed %s %d", service->name, service->crashCount);
service->pid = tmp;
ServiceReapHookExecute(service);
service->pid = -1;
ExecReboot("panic");
}
}
foundation进程因为短时间内多次crash,系统自己执行了reboot动作,相当于一次开机得重启多次。
在faultlog中又有如下的cppcrash栈信息,可见分布式数据服务udmf在初始化的时候崩了,崩溃原因是stack-buffer-overflow,线程栈溢出导致sa服务初始化crash
Pid:1259
Uid:5523
Process name:foundation
Process life time:6s
Reason:Signal:SIGSEGV(SEGV_ACCERR)@0x0000007f2888eff0 current thread stack low address = 0x0000007f2888f000, probably caused by stack-buffer-overflow
LastFatalMessage:ohos.aafwk.AbilityManager
Fault thread info:
Tid:1348, Name:OS_IPC_2_1348
#00 pc 0000000000064e80 /system/lib64/platformsdk/libutd_client.z.so(OHOS::UDMF::PresetTypeDescriptors::InitDescriptors()+97220)(c555ec13e579f68cd22209a2dce4f09c)
#01 pc 000000000004d294 /system/lib64/platformsdk/libutd_client.z.so(OHOS::UDMF::PresetTypeDescriptors::PresetTypeDescriptors()+28)(c555ec13e579f68cd22209a2dce4f09c)
#02 pc 00000000000c1964 /system/lib64/platformsdk/libutd_client.z.so(OHOS::UDMF::PresetTypeDescriptors::GetInstance() (.cfi)+84)(c555ec13e579f68cd22209a2dce4f09c)
#03 pc 00000000000483b0 /system/lib64/platformsdk/libutd_client.z.so(OHOS::UDMF::UtdClient::Init()+72)(c555ec13e579f68cd22209a2dce4f09c)
#04 pc 00000000000481c8 /system/lib64/platformsdk/libutd_client.z.so(OHOS::UDMF::UtdClient::UtdClient()+68)(c555ec13e579f68cd22209a2dce4f09c)
#05 pc 0000000000048c18 /system/lib64/platformsdk/libutd_client.z.so(OHOS::UDMF::UtdClient::GetInstance() (.cfi)+84)(c555ec13e579f68cd22209a2dce4f09c)
去看看InitDescriptors函数,确实有一个需要分配巨大栈内存的变量。
foundation/distributeddatamgr/udmf/framework/innerkitsimpl/data/preset_type_descriptors.cpp
void PresetTypeDescriptors::InitDescriptors()
{
typeDescriptors_ = {
{"general.entity",
{},
{},
{},
"Base type for physical hierarchy.",
REFERENCE_URL,
""},
{"general.object",
{},
{},
{"*/*"},
"Base type for logical hierarchy.",
......
那么问题就是显而易见的了,在vendor仓去修改栈大小的编译配置,这个问题就是因为栈大小的配置缺失,导致启动过程中SA服务出现高频crash,让系统重启了
vendor/openvalley/rk3568/config.json配置文件中添加"device_stack_size": 8388608,字段
"type": "standard",
"version": "3.0",
"board": "rk3568",
"api_version": 8,
"enable_ramdisk": true,
"enable_absystem": false,
"build_selinux": false,
"build_seccomp": false,
"device_stack_size": 8388608,
"inherit": [ "productdefine/common/inherit/rich.json", "productdefine/common/inherit/chipset_common.json" ],
更多推荐

所有评论(0)