10 开源鸿蒙中芯片与开发板对应的源码(硬件相关的部分)

开源鸿蒙中芯片与开发板对应的源码(硬件相关的部分)

作者将狼才鲸
日期2024-03-20

  • 开源鸿蒙通过芯片仓存放指定芯片和指定开发板的代码,硬件相关的代码和纯逻辑代码是分开存放的

    • 源码模块的组织结构在manifest这个Git仓库,这也是拉取源码时的顶层仓库:https://gitee.com/openharmony/manifest
    • 平台仓都组织在manifests/ohos/ohos.xml文件中,而芯片仓都组织在manifests/chipsets/目录下
    • 每个芯片平台会在device和vendor目录下创建相应的仓,把这类仓称为芯片仓,其它的仓称为平台仓,芯片仓可能会随着硬件的演进而逐渐废弃,生命周期相对较短
    • default.xml由ohos/ohos.xml和chipsets/all.xml组成,是所有平台仓和芯片仓的集合;可以通过缺省参数下载所有代码仓(全量代码)
    • chipsets/chipsetN/chipsetN-detail.xml是单个芯片平台所引入的仓集合
    • 每个开发板的chipsets/chipsetN/chipsetN-detail.xml里主要包括device/soc,device/board以及vendor相关仓
    • 官方支持的开发板和模拟器种类-编译形态整体说明
  • 因为硬件各种各样,为了学习方便,这里选择几个ARM核的QEMU模拟器(不使用硬件,使用虚拟开发板)

    • 编译参数(产品名):qemu_arm_linux_headless,开发板名称:qemu-arm-linux,芯片名称:qemu,芯片内核:ARM Cortex-A,系统类型:标准,系统内核:linux,开发板参数:https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_arm_linux_headless/config.json
    • 编译参数(产品名):qemu_small_system_demo,开发板名称:arm_virt,芯片名称:qemu,芯片内核:ARM Cortex-A,系统类型:小型,系统内核:liteos_a,开发板参数:https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_small_system_demo/config.json
    • 编译参数(产品名):qemu_mini_system_demo,开发板名称:arm_mps2_an386,芯片名称:qemu,芯片内核:ARM Cortex-M4,系统类型:轻型,系统内核:liteos_m,开发板参数:https://gitee.com/openharmony/vendor_ohemu/blob/master/qemu_mini_system_demo/config.json
  • verdor芯片仓的开发板配置

    • https://gitee.com/openharmony/vendor_ohemu/tree/master/qemu_arm_linux_headless
    • https://gitee.com/openharmony/vendor_ohemu/tree/master/qemu_small_system_demo
    • https://gitee.com/openharmony/vendor_ohemu/tree/master/qemu_mini_system_demo
  • device芯片仓的源码和配置

    • https://gitee.com/openharmony/device_qemu/tree/master/arm_virt/linux
    • https://gitee.com/openharmony/device_qemu/tree/master/arm_virt/liteos_a
    • https://gitee.com/openharmony/device_qemu/tree/master/arm_virt/liteos_a_mini
    • https://gitee.com/openharmony/device_qemu/tree/master/arm_mps2_an386含上电后的初始化代码
    • https://gitee.com/openharmony/device_qemu/tree/master/drivers
  • 参考网址:

    • QEMU Arm MPS2 and MPS3 boards

源码框架

  • 以下配置文件指示了你要下载哪些Git仓库,并将他们拉取到哪个子文件夹下,拉取完成后才会构成完整的开源鸿蒙源码

    • https://gitee.com/openharmony/manifest/blob/master/default.xml 分为平台仓和芯片仓
    • https://gitee.com/openharmony/manifest/blob/master/ohos/ohos.xml 所有与硬件无关的平台仓,按group类型拉取代码,是你的group则拉取,不是则忽略
      • 例如,将 https://gitee.com/openharmony/kernel_liteos_m 仓库拉取到 kernel/liteos_m 目录下
    • https://gitee.com/openharmony/manifest/blob/master/chipsets/all.xml 所有与硬件相关的芯片仓,按芯片名称分类
    • https://gitee.com/openharmony/manifest/blob/master/chipsets/qemu.xml 选中一款芯片,例如选中qemu这款虚拟芯片,平台仓还是选中全量,芯片仓则选中特有的
    • https://gitee.com/openharmony/manifest/blob/master/chipsets/qemu/qemu.xml qemu这款虚拟芯片的芯片仓代码
      • 将 https://gitee.com/openharmony/vendor_ohemu 这个仓库拉取到 vendor/ohemu 文件夹下,含模块依赖关系、操作系统的配置参数、OEM-ID-密钥源码
      • 将 https://gitee.com/openharmony/device_qemu 这个仓库拉取到 device/qemu 文件夹下,包含芯片相关驱动底层硬件相关部分
  • 以ARM Cortex-M内核的arm_mps2_an386开发板为例,简述源码结构

  • openHarmony\device\qemu\arm_mps2_an386\liteos_m\board\startup.s(源码网址https://gitee.com/openharmony/device_qemu/blob/master/arm_mps2_an386/liteos_m/board/startup.s) 中描述了芯片上电后的第二行代码:复位中断(第一行代码RAM 0地址的复位中断融合到编译器里面去了),在复位中断中跳转到C语言的main函数

.global Reset_Handler.section .text
.type  Reset_Handler, %function
Reset_Handler:ldr  r0, =__bss_startldr  r1, =__bss_endmov  r2, #0bss_loop:str  r2, [r0, #0]add  r0, r0, #4subs r3, r1, r0bne  bss_loopldr  sp, =__irq_stack_topb    main
.size  Reset_Handler, .-Reset_Handler
  • openHarmony\device\qemu\arm_mps2_an386\liteos_m\board\main.c(源码网址https://gitee.com/openharmony/device_qemu/blob/master/arm_mps2_an386/liteos_m/board/main.c) 中在main函数里面启动操作系统
/*****************************************************************************Function    : mainDescription : Main function entryInput       : NoneOutput      : NoneReturn      : None*****************************************************************************/
LITE_OS_SEC_TEXT_INIT int main(void)
{unsigned int ret;UartInit();ret = LOS_KernelInit();if (ret != LOS_OK) {printf("LiteOS kernel init failed! ERROR: 0x%x\n", ret);goto EXIT;}
#if (LOSCFG_SUPPORT_LITTLEFS == 1)LfsLowLevelInit();
#endifUart0RxIrqRegister();NetInit();#if (LOSCFG_USE_SHELL == 1)ret = LosShellInit();if (ret != LOS_OK) {printf("LosAppInit failed! ERROR: 0x%x\n", ret);}
#endifret = LosAppInit();if (ret != LOS_OK) {printf("LosAppInit failed! ERROR: 0x%x\n", ret);}LOS_Start();EXIT:while (1) {__asm volatile("wfi");}
}
  • openHarmony\device\qemu\arm_mps2_an386\liteos_m\board\driver 包含了芯片的底层驱动代码
  • 接下来就是理解操作系统内核模块,当前时LiteOS-M、LiteOS-A和Linux,之后会全部换成鸿蒙内核

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HW中常见的面试题

1.说说你在工作中或者SRC中挖到的比较典型的漏洞? 2.HW中如果已经发现红方IP地址,该如何溯源? 通过蜜罐系统或者安全设备锁定红方MAC,然后通过IP地址对,whois查询到该IP注册人以及注册邮箱,如果是发现邮箱是某厂商注册则可利…

SpringBoot-03 | SpringBoot自动配置

SpringBoot-03 | SpringBoot自动配置 原理分析代码示例源码剖析SpringBootConfiguration:组合注解,标记当前类为配置类ComponentScanEnableAutoConfigurationImport加载spring.factoriesrun初始化加载spring.factoriesspring.factories中的钩子类 网上盗…

部署DiffSynth-Studio实现视频风格转换

DiffSynth 是一个新的 Diffusion 引擎,可以实现图片和视频的风格转换。 拉取源码 git clone https://github.com/Artiprocher/DiffSynth-Studio/ 创建环境 conda env create -f environment.yml conda activate DiffSynthStudio 下载模型 将Stable Diffusion模…

组织学习的革命:打破常规,引领未来

组织学习的革命:打破常规,引领未来 一、组织学习的重塑:从传统到现代的转变 在知识经济的时代背景下,组织学习已经成为企业持续发展和竞争优势的关键。传统的组织学习方式,如培训、研讨会等,虽然在一定程…

NeRF——基于神经辐射场的三维场景重建和理解

概述 三维重建是一种将物理世界中的实体转换为数字模型的计算机技术。其基本概念是通过对物理世界中的物体或场景进行扫描或拍摄,并使用计算机算法将其转换为三维数字模型。抽象意义上的三维模型指的是:形状和外观的组合,并且可以渲染成不同…

阿里云服务器2核4G服务器收费价格表,1个月和一年报价

阿里云2核4G服务器多少钱一年?2核4G服务器1个月费用多少?2核4G服务器30元3个月、85元一年,轻量应用服务器2核4G4M带宽165元一年,企业用户2核4G5M带宽199元一年。本文阿里云服务器网整理的2核4G参加活动的主机是ECS经济型e实例和u1…

PyTorch学习笔记之激活函数篇(三)

文章目录 3、ReLU3.1 公式3.2 对应的图像3.3 对应的图像的代码3.4 优点与不足3.5 torch.relu()函数 3、ReLU 3.1 公式 ReLU函数的公式&#xff1a; f ( x ) { x , x > 0 0 , x < 0 f(x) \begin{cases} x&,x>0 \\ 0&,x<0 \end{cases} f(x){x0​,x>…

Vue 3响应式系统详解:ref、toRefs、reactive及更多

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

为什么延迟删除可以保证MYSQL 与redis的一致性?

看过很多保持MYSQL 与redis保持一致性的文章都提到了延迟删除&#xff0c;其实脱离任何业务场景的设计都是不切实际的&#xff0c;所以我会本着一个通用的读写场景去分析为什么延迟删除大概率可以保证MYSQL与redis的最终一致。 通常的读写场景 通常在使用redis作为读写缓存时…

Oracle SEQUENCE实现自增流水号,并设置定时任务每日清零

--创建增长序列 create sequence IMES.TEST_SEQ_PALLET minvalue 1 maxvalue 1336335 start with 1 increment by 1 nocache cycle order; --测试 select IMES.TEST_SEQ_PALLET.nextval from dual; --创建存储过程重置自增序列从1开始 IMES.TEST_SEQ_RESET_NEXT create or r…

无人机/飞控--ArduPilot、PX4学习记录(2)

这是一篇碎碎念&#xff0c;零零碎碎的记录了环境配置过程&#xff0c;仅供本人记录学习历程和参考。(记录的挺乱的&#xff0c;但是文章链接里的博客写的是真好) 本章主要完成的目标&#xff1a; 安装PX4 并 成功运行出3D无人机界面。 参考文章&#xff1a; 搭建PX4环境&…

虹科干货 | 网络取证分析和入侵分析培训重磅来袭,先来认真预习!什么是IOC?应该如何识别和响应?

文章速览&#xff1a; 网络安全中的IOC是什么&#xff1f;IOC和IOA有什么区别&#xff1f;IOC有哪些类型&#xff1f;IOC的常见实例有哪些&#xff1f;IOC解决方案和工具 近期&#xff0c;Wireshark 大学和 虹科Allegro Packets联合举办了网络取证和入侵分析线上培训课程&…

cv::Mat::depth() 获取图像的深度时返回值为0?

在OpenCV中&#xff0c;当使用函数比如 cv::Mat::depth() 获取图像的深度时&#xff0c;返回的整数值是代表数据类型的枚举值&#xff0c;而不是直接的比特数。这些枚举值定义在cv::Mat的数据类型中&#xff0c;用于描述像素值的数据类型及其位深度。如果cv::Mat::depth() 返回…

不同的Git仓库单独设置用户名和邮件地址

最近使用公司电脑将自己的一个私人项目推送到远程仓库&#xff0c;仓库显示的公司邮箱地址。因为设置了全局的username和usermail&#xff0c;这样就比较尴尬了。但是又不能频繁来回改用户信息&#xff0c;那么请看下面如何单独设置仓库的用户信息&#xff0c;让不同的仓库展示…

走上管理岗才发现:所谓工作能力强,就一点

走上管理岗才发现&#xff1a;所谓工作能力强&#xff0c;就一点 建立SOP‼️ - 我二本工科&#xff0c;电力专业&#xff0c;从现场工程师到新能源公司核心部门经理&#xff0c;入职公司三个月直接升职加薪。 - 我刚从工程师升至经理带团队的时候&#xff0c;经常靠加班续命&a…

zookeeper底层细节

zk 临时节点和watch机制实现注册中心自动注册和发现&#xff0c;数据都在内存&#xff0c;nio 多线程模型&#xff1b; cp注重一致性&#xff0c;数据不一致时集群不可用 事务请求处理方式 1.all事务由唯一服务器处理 2.将客户端事务请求转成proposal分发follower 3.等待半…

部署单节点k8s并允许master节点调度pod

安装k8s 需要注意的是k8s1.24 已经弃用dockershim&#xff0c;现在使用docker需要cri-docker插件作为垫片&#xff0c;对接k8s的CRI。 硬件环境&#xff1a; 2c2g 主机环境&#xff1a; CentOS Linux release 7.9.2009 (Core) IP地址&#xff1a; 192.168.44.161 一、 主机配…

【spring】@ConditionalOnResource注解学习

ConditionalOnResource 介绍 ConditionalOnResource 是Spring框架中的一个条件化注解&#xff0c;它允许你根据类路径中是否存在指定的资源来决定是否加载特定的Bean定义或配置类。这个注解可以用于类级别或方法级别。 具体Conditional使用请看这篇文章【spring】Conditional…

停车管理系统asp.net+sqlserver

停车管理系统asp.netsqlserver 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库&#xff0c; 功能模块&#xff1a; 停车管理系统asp.net sqlserver 用户功能有菜单列表 我的停车记录 专…

vue3<setup>中判断当前视口距离顶部的距离

在 Vue 3 的 <script setup> 语法中&#xff0c;你可以使用 Composition API 来跟踪视口距离顶部的距离。你可以创建一个响应式的 ref 来存储这个距离&#xff0c;并在 onMounted 生命周期钩子中设置一个滚动事件监听器来更新这个值。下面是一个示例&#xff1a; <te…