OpenHarmony 实战开发——3.1 Release + Linux 原厂内核Launcher起不来问题分析报告

1、关键字

Launcher 无法启动;原厂内核;Access Token ID;

2、问题描述

芯片:rk3566;rk3399

内核版本: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 更新 metaData,KvStore 会调用阮总先接口获取 LocalDeviceId。

对应代码调用关系:

KvStoreDataService::UpdateMetaData()

–>kv_store,DeviceKvStoreImpl::GetLocalDeviceId()

–> kv_store,KvStoreUtils::GetProviderInstance().GetLocalDevice()

–>SoftBus IPC 接口,SoftBusAdapter::GetLocalDevice()

–>SoftBus IPC 接口,GetLocalNodeDeviceInfo()

–>SoftBus Server,GetLocalNodeDeviceInfo()

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 特权应用、UID=1000 特权、MDM 权限证书等等,且不能应用于分布式场景。OpenHarmony 的 Access Token 机制,有总体的设计,能够分布式传输。

OpenHarmony 应用程序框架提供的 API,分成 Signature、Privilege 和 Normal 三级。

API 等级/APL 等级APL 3APL 2APL 1
API Level SignatureYNN
API Level PrivilegeYYN
API Level NormalYYY

凡是不能访问的 API,必须通过 AACL(API 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

如何快速入门:

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr21.cn/FV7h05

大厂鸿蒙面试题::https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/609437.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5G NR 吞吐量计算 and 4G LTE 吞吐量计算

5G NR Throughput References • 3GPP TS 38.306 V15.2.0 (2018-06) ➤J : number of aggregated component carriers in a band or band combination ➤Rmax : 948/1024 • For the j-th CC, Vlayers(j) is the maximum number of layers ➤Qm(j) : Maximum modulation orde…

2024数维杯B题全保姆教程 生物质和煤共热解问题的研究

B题 生物质和煤共热解问题的研究 (1)基于附件一,请分析正己烷不溶物(INS)对热解产率(主要 考虑焦油产率、水产率、焦渣产率)是否产生显著影响?并利用图像 加以解释。 根据我视频的分析,这里采用…

阅读送书抽奖?玩转抽奖游戏,js-tool-big-box工具库新上抽奖功能

先讨论一个问题,你做软件工作是为了什么?从高中选专业,就喜欢上了软件开发?还是当初毕业不知道干啥,不喜欢自己的专业,投入软件开发的怀抱?还是干着干着别的,突然觉得互联网行业真不…

Springboot+Vue项目-基于Java+MySQL的毕业就业信息管理系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

什么是趋势交易?澳福无偿分享

盈利的本质就是能低买高卖,那么怎么能找到交易中的高点和低点呢?其实很简单,只需要运用趋势交易就能很快的找到交易中的高点和低点。那么什么是趋势交易呢?澳福外汇今天详解! 趋势交易有3种趋势,如果其包含…

对话NVIDIA英伟达:AI已照进现实 | 最新快讯

文 | MetaPost NVIDIA 创始人兼首席执行官黄仁勋在 GTC 2024 主题演讲上表示:下一波 AI 浪潮将是 AI 对物理世界的学习。 当下,全球范围内价值超过50万亿美金的行业正在竞相实现数字化,数字孪生技术正在赋能千行百业。NVIDIA Omniverse 中国…

“感恩遇到你,郭护士!”佛山市一医院 护士回家途中救了位老奶奶

“感恩遇见你,我感谢郭护士关爱长者、热心助人的高尚行为……”看着信件上感谢的话语,郭琳玲的内心感动不已。而这一封亲笔手写的感谢信,是来自一位将近八十岁的老奶奶。 郭琳玲是佛山市第一人民医院创伤重症功能神经外科的一名护士。4月30日…

【快讯】山东省第四批软件产业高质量发展重点项目开始申报

为加快落实《山东省高端软件“铸魂”工程实施方案(2023-2025)》,提高软件产业规模能级,提升关键软件技术创新和供给能力,塑强数字经济发展核心竞争力,确定开展第四批软件产业高质量发展重点项目申报工作&am…

深入探讨利用大型语言模型的力量的策略 (LLMs)

Note: 提示词工程是一门融合了艺术和科学的学科——它既是对技术的理解,也是对创造力和战略思维的理解。 本文为对LLMS策略分享内容学习后的整理,尝试抛开网上广泛讨论和记录的传统提示词工程技术,展示通过实验学到的新见解,以及…

树和二叉树的定义和基本术语

文章目录 前言一、树的定义二、树的基本术语三、二叉树的定义总结 前言 T_T此专栏用于记录数据结构及算法的(痛苦)学习历程,便于日后复习(这种事情不要啊)。所用教材为《数据结构 C语言版 第2版》严蔚敏。 一、树的定义…

React:Router-2. createBrowserRouter函数式

参考文档:ReactRouter官网 前边的文章 BrowserRouter组件式路由 提供了组件式路由的方式,在react-router6.4.0及以上版本,提供了 createBrowserRouter 函数式路由创建方式。 一、创建路由 1. 新建router.js文件,使用createBrow…

线程-进程-多线程 概述简介

01 线程简介 任务, 进程, 线程, 多线程 多任务 什么是多任务? 生活中的例子 第一个例子: 这张图片, 一个人边吃饭边玩手机, 同时做了两件任务,大家不要去当这样的低头族. 第二个例子: 第二张图, 开车的时候能打电话, 能打点滴 第三个例子: 第三个图, 说明了我们可以边…

HTML4(三):表单

文章目录 表单1. 基本结构2. 常用表单控件2.1 文本输入框2.2 密码输入框2.3 单选框2.4 复选框2.5 隐藏域2.6 提交按钮2.7 重置按钮2.8 普通按钮2.9 文本域2.10 下拉框2.11 示例 3. 禁用表单控件4. lable标签5. fieldset与legend标签6. 总结 表单 概念:一种包含交互…

vue3中如何更优雅的使用echarts?

echarts在vue或者react中使用存在的问题 每个图表需要从头到尾写地一遍完整的option配置,这样一来的话就会显得十分的冗余在同一个项目中,其实不难发现各类图表设计十分相似,甚至是相同,因此我们没必要一直做重复的工作&#xff…

基于Java+SpringBoot+Vue前后端分离教学资源共享平台系统

基于JavaSpringBootVue前后端分离教学资源共享平台系统 🍅 作者主页 网顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统…

标准参编征集|《第三方运维服务水平评价指南 工业废水处理设施》

目前,对于工业废水处理设施第三方运维服务的标准,国家和行业未曾出台有针对性的评价标准和规范,工业企业和工业园区对第三方运维服务的监督、考核、评价体系需要进一步补充和完善。 本标准的编制旨在帮助第三方运营单位从运营技术和管理举措…

Linux 第二十五章

🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C,linux 🔥座右铭:“不要等到什么都没有了…

定制聚四氟乙烯砂芯抽滤装置

聚四氟乙烯布氏漏斗及其抽滤装置,是实验室中使用的一种仪器,用来使用真空或负压力抽吸进行过滤。 布氏漏斗形状为扁圆筒状,圆筒底面上开了很多小孔。下连一个狭长的筒状出口。 使用的时候,一般先在圆筒底面垫上滤纸,…

使用PyTorch实现L1, L2和Elastic Net正则化

在机器学习中,L1正则化、L2正则化和Elastic Net正则化是用来避免过拟合的技术,它们通过在损失函数中添加一个惩罚项来实现。 正则化介绍 L1 正则化(Lasso回归): L1 正则化通过向损失函数添加参数的绝对值的和来实施惩…

JavaScript异步编程——07-Promise实例的方法【万字长文,感谢支持】

Promise 实例的方法简介 Promise 的 API 分为两种: Promise 实例的方法(也称为:Promis的实例方法) Promise 类的方法(也称为:Promise的静态方法) Promise 实例的方法:我们需要实…