关于rk3399烧录定制化3.1.2release无法启动Launcher分析报告
1 关键字 Launcher; 无法启动; rk3399; 3.1.2release; 2 问题描述 环境: 设备型号:扬帆rk3399 系统版本:3.1.2release 问题现象: 将定制过后的3.1.2release烧录到扬帆rk3399上,开机动画过后Launcher无法启动。 测试步骤: 1.将定制过后的3.1.2release烧录到扬帆rk3399上,等开机动画过后,一直停在开机动画
1 关键字
Launcher; 无法启动; rk3399; 3.1.2release;
2 问题描述
环境: 设备型号:扬帆rk3399 系统版本:3.1.2release
问题现象: 将定制过后的3.1.2release烧录到扬帆rk3399上,开机动画过后Launcher无法启动。
测试步骤: 1.将定制过后的3.1.2release烧录到扬帆rk3399上,等开机动画过后,一直停在开机动画最后一帧,没有加载Launcher。
3 问题原因
3.1 正常机制
1.系统启动,BMS会安装Launcher,开机动画过后AMS会启动Launcher。
3.2 异常机制
1.系统启动,BMS没有安装Launcher。 2.Launcher安装后,AMS没有启动Launcher。
4 解决方案
1.修改accountMgr的权限为root权限。 2.将/system/lib64/
下的libservice_extension_module.z.so移植到/system/lib/
下。
5 定位过程
1.将定制过后的3.1.2release烧录到扬帆rk3399上,启动后画面停留在开机动画最后一帧,通过aa start指令启动Launcher,报错ability not fount
,说明Launcher未被正常安装。
2.检查/data/app/el1/bundle/public/
目录,发现0号用户安装的应用都被正常安装,但是100号用户安装的应用都没有被正常安装,说明BMS功能正常,初步判断问题在于AccountMgr。
3.分析AccountMgr初始化代码
bool AccountMgrService::Init()
{
·
·
·
ret = ohosAccountMgr_->OnInitialize();
if (!ret) {
ACCOUNT_LOGE("Ohos account manager initialize failed");
HiviewDFX::HiSysEvent::Write("OS_ACCOUNT",
"SERVICE_START_FAILED",
HiviewDFX::HiSysEvent::EventType::FAULT,
"ERROR_TYPE",
ret);
return ret;
}
·
·
·
}
并结合日志
01-18 08:50:21.283 648 1049 E 01b00/AccountMgrService: [ohos_account_data_deal.cpp(SaveAccountInfo:146)] Failed to open file /data/system/users/0/account.json
01-18 08:50:21.286 648 1049 E 01b00/AccountMgrService: [account_mgr_service.cpp(Init:157)] Ohos account manager initialize failed
可知,AccountMgr未初始化成功,/data/system/users/0/account.json
文件未被创建。
4.查看设备/data/system/users/
目录,发现其下未被创建任何用户目录,分析相关代码未发现可能存在的问题,根据经验判断用户目录的创建与否可能与AccountMgr的系统权限有关。
5.将AccountMgr提升为root权限并重启,用户目录正常创建,并且100号用户成功安装Launcher。
6.设备启动后,虽然Launcher被成功安装,但是依然没有被启动,aa start指令也无法成功启动。通过分析AMS相关日志
01-18 08:51:22.132 1952 1952 E 02200/Ability: [extension_module_loader.cpp(GetExtensionModuleLoader:50)]Failed to open extension library system/lib/libservice_extension_module.z.so, reason: Error loading shared library system/lib/libservice_extension_module.z.so: No such file or directoryn
可知,system/lib/libservice_extension_module.z.so
文件无法加载。
7.查看设备system/
路径,发现其下相较于纯净3.1.2release系统,多出了一个system/lib64
目录,查看目录,发现包含libservice_extension_module.z.so
库文件,判断由于定制化的3.1.2release系统引入了一些需要在arm64下编译的库,所以修改了相关的编译参数,将原本需要放到system/lib
下的 libservice_extension_module.z.so
放到了system/lib64
下,导致AMS无法读取。
8.将libservice_extension_module.z.so
拷贝到system/lib
下,重启设备,Launcher被正常启动。
6 知识分享
1.Launcher的启动跟AccountMgr、BMS、AMS都有关系,AccountMgr负责创建用户目录,BMS负责安装,AMS负责启动,涉及到相关问题都可以从这3个方面作为切入点。
2.即使通过arm64编译3.1.2release,system
下也不会创建system/lib64
目录,这点需要与3.2系统区分。
更多推荐
所有评论(0)