做金融网站违法吗,天眼企业查询系统官网,代做设计的网站,网络营销案例分享1、关键字
Launcher 无法启动#xff1b;原厂内核#xff1b;Access Token ID#xff1b;
2、问题描述
芯片#xff1a;rk3566#xff1b;rk3399
内核版本#xff1a;Linux 4.19#xff0c;是 RK 芯片原厂发布的 rk356x 4.19 稳定版内核
OH 版本#xff1a;OpenHa…1、关键字
Launcher 无法启动原厂内核Access Token ID
2、问题描述
芯片rk3566rk3399
内核版本Linux 4.19是 RK 芯片原厂发布的 rk356x 4.19 稳定版内核
OH 版本OpenHarmony 3.1 Release
问题现象将 OpenHarmony kernel 修改移植到 rk3566 上对接 OpenHarmony 3.1 Release 版本Launcher 起不来移植停留在开机动画界面。
移植步骤
1)、导入 rk356x 芯片厂家内核到构建系统中。 2)、收到合入 hdf patch 3)、移植 accesstoken id 驱动 4)、dts 文件适配开发板 5)、defconfig 使用的是 Linux 5.10 rk3568 的 config 文件
3、问题原因
3.1 正常机制
应用能够正常安装
3.1.1 应用安装相关过程
应用安装时会使用分布式数据库 KvStore 更新 metaDataKvStore 会调用阮总先接口获取 LocalDeviceId。 对应代码调用关系
KvStoreDataService::UpdateMetaData()
–kv_storeDeviceKvStoreImpl::GetLocalDeviceId()
– kv_storeKvStoreUtils::GetProviderInstance().GetLocalDevice()
–SoftBus IPC 接口SoftBusAdapter::GetLocalDevice()
–SoftBus IPC 接口GetLocalNodeDeviceInfo()
–SoftBus ServerGetLocalNodeDeviceInfo()
3.1.2 软总线 SA 初始化相关过程
SoftBusServer::OnStart() // 软总线 SA 启动函数
foundation\communication\dsoftbus\core\frame\standard\init\src\softbus_server.cpp softbus_server.cpp
---- InitSoftBusServer() // 调用软总线初始化
foundation\communication\dsoftbus\core\frame\common\src\softbus_server_frame.c
---- AuthInit() // 调用认证管理模块初始化
foundation\communication\dsoftbus\core\authentication\src\auth_manager.c auth_manager.c
---- HichainServiceInit() // 调用 Hichain 初始化
foundation\communication\dsoftbus\core\authentication\src\auth_manager.c auth_manager.c
----GetGmInstance()-regDataChangeListener
// 调用安全子系统设备互信认证部件的接口获取设备群组管理实例然后注册数据变化 Listener
foundation\communication\dsoftbus\core\authentication\src\auth_manager.c auth_manager.c
----IpcGmRegDataChangeListener() //即调用中的 IpcGmRegDataChangeListener 函数
base\security\deviceauth\frameworks\src\ipc_sdk.c
----DoBinderCall()
base\security\deviceauth\frameworks\src\standard\ipc_adapt.cpp
---- ProxyDevAuthData::ActCall
base\security\deviceauth\frameworks\src\standard\ipc_dev_auth_proxy.cpp
---- ProxyDevAuth::DoCallRequest()
base\security\deviceauth\frameworks\src\standard\ipc_dev_auth_proxy.cpp
---- ServiceDevAuth::OnRemoteRequest //IPC 调用到服务端
base\security\deviceauth\frameworks\src\standard\ipc_dev_auth_stub.cpp
---- Security::AccessToken::CheckPermission() //调用 AccessTokenKit 检验调用者权限
base\security\deviceauth\services\frameworks\src\permission_adapter\permission_adapter.cpp
3.2 异常机制
Access Token 补丁没有合入全面导致软总线 SA 初始化失败导致服务异常、分布式数据库 GetLocalDevice 失败进一步导致应用安装失败
4 解决方案
补齐 kernel/fork.c 中关于 Access Token 的修改补齐后验证应用可以正常起来。
5 定位过程
5.1 应用安装失败的原因 软总线 SA 初始化失败导致服务异常或者 Crash导致分布式数据库 GetLocalDevice 失败进一步导致应用安装失败。
关键异常打印如下
dsoftbus_standard: [LNN]init softbus failed
SoftBusAdapter::GetLocalDevice: GetLocalNodeDeviceInfo error
KvStoreDataService::UpdateMetaData: failed to get local device id KvStoreDataService::GetSingleKvStore: failed to write meta
BundleMgrService: [distributed_data_storage.cpp(GetKvStore):237] return error
5.2 软总线 SA 初始化失败的原因
因为软总线 SA 的 AccessToken tokenID 不合法在 Hichain 初始化时 ProxyDevAuth::DoCallRequest 被设备认证服务端校验权限不通过打印 tokenID is invalid导致 hichain init failed进一步导致 softbus framework init failed。
关键异常打印如下
08-04 09:00:28.085 291 1127 I 00000/[DEVAUTH]: DoCallRequest: ProxyDevAuth, SendRequest…
08-04 09:00:28.085 263 536 I 02f01/AccessTokenKit: [GetTokenType]:GetTokenType called
08-04 09:00:28.085 263 536 E 02f01/AccessTokenKit: [GetTokenType]:tokenID is invalid
08-04 09:00:28.085 263 536 E 00000/[DEVAUTH]: CheckPermission: Invalid token type: -1
08-04 09:00:28.085 291 1127 I 00000/[DEVAUTH]: DoCallRequest: SendRequest done, ret -1
08-04 09:00:28.085 291 1127 I 00000/[DEVAUTH]: IpcGmRegDataChangeListener: process done, ret 12289
08-04 09:00:28.085 291 1127 E 015c0/dsoftbus_standard: [AUTH]auth RegDataChangeListener failed
08-04 09:00:28.085 291 1127 E 015c0/dsoftbus_standard: [AUTH]auth hichain init failed
08-04 09:00:28.085 291 1127 E 015c0/dsoftbus_standard: [COMM]softbus auth init failed.
08-04 09:00:28.085 291 1127 I 015c0/dsoftbus_standard: [AUTH]unregister auth trans callback, module 1.
08-04 09:00:28.085 291 1127 I 015c0/dsoftbus_standard: [TRAN]PendigPackManagerDeinit init ok
08-04 09:00:28.085 291 1127 I 015c0/dsoftbus_standard: [AUTH]unregister auth trans callback, module 0.
08-04 09:00:28.085 291 1127 I 015c0/dsoftbus_standard: [TRAN]server trans udp channel deinit success.
08-04 09:00:28.086 291 1127 E 015c0/dsoftbus_standard: [COMM]softbus framework init failed.
5.3 AccessToken TokenID 不合法的原因
跑 access_token_id 的 XTS 用例发现如下用例不过子线程的 access token id 信息不对ftoken 跟父线程一致实际应该为 0。 推断创建线程时给 token id 初始化的值不对可能是 kernel/fork.c 中 kernel/fork.c 的 patch 没打上。 让伙伴检查这段代码确定是上述 kernel/fork.c 中的代码漏合导致。
6 知识分享
6.1 Access Token 介绍
Access Token 是 3.1 release 安全子系统新增的应用权限访问控制功能和权限增强特性支持应用程序或者其他 SA 查询和校验应用权限、APL(Ability Privilege Level )等信息。
在 OpenHarmony 服务化的应用程序框架中一切程序都是服务元能力。任何元能力间的访问都需要进行访问权限控制。访问控制的机制通过采用 AT 访问令牌传递和令牌访问控制的策略来实现。
一个 AT 访问令牌由
设备标识 DevID应用身份标识 APP ID子用户 ID应用分身索引信息SA 服务 ID( SA 服务名字)TokenID 表示权限令牌 ID 跨设备全局唯一。64bit。由以上字段结合场景进行组合生成以 lib 形式提供生成 TokenID.
Android 的应用访问权限管控手段是面向实现的设计比较混乱包括 Platform 签名、Privilege 特权应用、UID1000 特权、MDM 权限证书等等且不能应用于分布式场景。OpenHarmony 的 Access Token 机制有总体的设计能够分布式传输。
OpenHarmony 应用程序框架提供的 API分成 Signature、Privilege 和 Normal 三级。
API 等级/APL 等级APL 3APL 2APL 1API Level SignatureYNNAPI Level PrivilegeYYNAPI Level NormalYYY
凡是不能访问的 API必须通过 AACLAPI ACL机制来实现策略的关联。
6.2 Access Token 内核补丁
在使用三方内核适配 OpenHarmony 系统时需要打上 Access Token 内核补丁补丁链接如下。
https://gitee.com/openharmony/kernel_linux_4.19/pulls/4
https://gitee.com/openharmony/kernel_linux_4.19/pulls/5
6.3 Access Token 调测知识
补丁打成功后会有相应的的字符设备/dev/access_token 用于和用户态交互。 并且在每个进程或线程的 pcb 信息中会有 tokenid 信息包括自身 tokenid 和首调者 tokenid。 码牛课堂也为了积极培养鸿蒙生态人才让大家都能学习到鸿蒙开发最新的技术针对一些在职人员、0基础小白、应届生/计算机专业、鸿蒙爱好者等人群整理了一套纯血版鸿蒙HarmonyOS Next全栈开发技术的学习路线。大家可以进行参考学习https://qr21.cn/FV7h05 ①全方位更合理的学习路径 路线图包括ArkTS基础语法、鸿蒙应用APP开发、鸿蒙能力集APP开发、次开发多端部署开发、物联网开发等九大模块六大实战项目贯穿始终由浅入深层层递进深入理解鸿蒙开发原理 ②多层次更多的鸿蒙原生应用 路线图将包含完全基于鸿蒙内核开发的应用比如一次开发多端部署、自由流转、元服务、端云一体化等多方位的学习内容让学生能够高效掌握鸿蒙开发少走弯路真正理解并应用鸿蒙的核心技术和理念。 ③实战化更贴合企业需求的技术点 学习路线图中的每一个技术点都能够紧贴企业需求经过多次真实实践每一个知识点、每一个项目都是码牛课堂鸿蒙研发团队精心打磨和深度解析的成果注重对学生的细致教学每一步都确保学生能够真正理解和掌握。 为了能让大家更好的学习鸿蒙HarmonyOS NEXT开发技术这边特意整理了《鸿蒙开发学习手册》共计890页希望对大家有所帮助https://qr21.cn/FV7h05
《鸿蒙开发学习手册》https://qr21.cn/FV7h05
如何快速入门
基本概念构建第一个ArkTS应用…… 开发基础知识https://qr21.cn/FV7h05
应用基础知识配置文件应用数据管理应用安全管理应用隐私保护三方应用调用管控机制资源分类与访问学习ArkTS语言…… 基于ArkTS 开发https://qr21.cn/FV7h05
Ability开发UI开发公共事件与通知窗口管理媒体安全网络与链接电话服务数据管理后台任务(Background Task)管理设备管理设备使用信息统计DFX国际化开发折叠屏系列…… 鸿蒙开发面试真题含参考答案https://qr21.cn/FV7h05 大厂鸿蒙面试题https://qr18.cn/F781PH 鸿蒙开发面试大盘集篇共计319页https://qr18.cn/F781PH
1.项目开发必备面试题 2.性能优化方向 3.架构方向 4.鸿蒙开发系统底层方向 5.鸿蒙音视频开发方向 6.鸿蒙车载开发方向 7.鸿蒙南向开发方向