精华内容
下载资源
问答
  • 鸿蒙源码
    2021-08-01 14:34:42

    本文摘录自 OHOZ 团队的 OpenHarmony 源码导读项目,在线阅读(腾讯云Github Pages)中包含最新的内容。


    本文将 Harmony(鸿蒙)分为 2 个概念:

    1. 蓝鸿蒙:下图中蓝色部分,主要用于智能终端,HW 没开源,仅与商业合作伙伴合作,基于 Android 的 AOSP(目前是 Android 11)。
    2. 红鸿蒙:下图中红色部分,主要用于 IoT,HW 贡献给 OpenHarmony(原子社区)的代码,于 2021.06.02 发布的 HarmonyOS2.0 即是此概念。
      在这里插入图片描述

    HW 有意混淆两个鸿蒙的概念,对公众不解释物联网、智能终端之间鸿蒙的差异,应该是有些特殊的因素,但这也为鸿蒙品牌带来了风险:HW 高管有些说鸿蒙没有拷贝 Android 一行代码,但未指明是红鸿蒙;又有些高管说鸿蒙基于 AOSP,平滑移植 Android APP,但未指明是蓝鸿蒙 —— 这些宣传会给大众造成一定的困扰。

    鸿蒙开发者相对应也被分为 2 类:

    1. 蓝鸿蒙 APP 开发(北向开发):可平滑移植 AOSP 上 Android APP 开发,与 AOSP 接口保持了一致,这部分开发使用 DevEco Studio 工具,查看 HarmonyOS Develope 和 华为开发者联盟( 官网HarmonyOSweibo)网站文档。与安卓开发不同的是,这部分开发除了使用 JAVA 外,还大量使用 js、ts,有点类似微信小程序的开发。
    2. 红鸿蒙嵌入式开发(南向开发):使用 DevEco Device Tool 工具或直接 Docker 中编译,查看 HarmonyOS DeviceHPM 两个网站,这部分开发模式与传统的嵌入式开发几乎没有区别:搭建环境、编译、烧录版本、JTAG 调试……

    本文档仅拆解、分析开源的红鸿蒙的源码,不涉及蓝鸿蒙部分,拿不到源码,拿到想分析也有心无力,所以北向(APP)开发以后再说。

    Arch、SoC、target

    鸿蒙目前支持的 Arch(架构)仅有:ARM 的 Cortex-A 中的 A9、Cotrex-M(已逐步放弃);RISC-V 由于是开源架构,所以 IP 公司很多,比如芯来科技,国内的兆易基于芯来的 IP 开发的 SoC GD32 系列很有一飞冲天的气势。

    Arch 与 SoC:

    Soc/IP \ ArchCortex-ACotrex-MRISC-V备注
    海思Hi3516、Hi3518Hi3861
    联盛德(WinnerMicro)W800
    兆易(GD)/芯来(Nuclei)GD32vf103Harmony2.0 新增
    Sifivefe310
    意法STM32f103/429Harmony2.0 已去除
    NXPi.MX6

    Hi3516 Core 是 Cortex-A7@800MHz + A17@1.25GHz;
    Hi3518 Core 是 Cortex-A926@440MHz

    SoC 与 开发板(target):

    Vendor \ SocHi3516/18i.MX6Hi3861SMT32GD32xW800
    海思
    芯来Nuclei Demo
    润和 HihopeHiSpark AI/CameraHiSpark WiFi IoTNeptune
    小熊派BearPi-HM_NanoBearPi-IoT
    百问网IMX6ULLSMT32MP157
    疯壳Fengke

    环境、源码、编译

    废话不多说,直接开始所有软件项目上手三板斧:劈脑袋、鬼剔牙、掏耳朵……哦,不对,是:下载源码、搭建环境、编译版本。

    一图胜千言,下图根据官方文档总结,意欲描述三板斧的全部关键动作:

    在这里插入图片描述

    上图列出了 3 种方式搭建开发环境和编译代码,对比:

    方式适用场景主要特点
    1源码学习代码完整,版本已对齐,每个子项目都还是独立的 git 库(有 .git)
    2自动化编译全命令行操作,容易合入 CI
    3快速调板下载源码、toolchain、build 一气呵成,并且包含烧录、分区、调试等功能

    2、3 都会自动下载 toolchain,并且依赖包保存在 ohos_bundles,但不再是独立的 git 库。

    1. repo + docker + hb

    • 安装 repo
    curl https://gitee.com/oschina/repo/raw/fork_flow/repo-py3 > /usr/local/bin/repo
    chmod a+x /usr/local/bin/repo
    
    • 拉取代码
    mkdir HarmonyOS
    cd HarmonyOS
    repo init -u https://gitee.com/openharmony/manifest.git  -b OpenHarmony_1.0.1_release --no-repo-verify
    repo sync -c
    
    • docker 最方便的搭建环境
    docker run -it -v $(pwd):/home/openharmony swr.cn-south-1.myhuaweicloud.com/openharmony-docker/openharmony-docker:0.0.4
    

    docker 虽然方便,但包含的 toolchain 并不完整,所含的 hpm、hos、hb、gcc-risc-v 等仅能支持海思的芯片,针对其他品牌的芯片还需自己安装指定的 toolchain。

    • build harmonyos
    root@90065f887932:/home/openharmony# hb set
    root@90065f887932:/home/openharmony# hb build -f
    

    2. hpm 方式拉取特定发行版

    • 安装 hpm(或使用上面 docker 中的 hpm)
    npm install -g @ohos/hpm-cli
    hpm -V
    
    • 找到开发版:在 HPM 官网 上找,或者使用 hpm search -t distribution 命令搜索可用的发行版

    发行版,不是发行板!HPM 发行版对标的是 Linux 发行版概念,指一套软件的集合,但一般与一个开发板对应。
    以前做嵌入式开发,通常为一个开发板做一套 BSP(板级支持包),但 APP 团队(或部门)拿到 BSP 后做 APP 开发仍会有相当的困难,现在鸿蒙封装出发行版的概念,将 BSP 和 APP 及其 Examples 都打包,极大的降低了二次开发者的门槛。

    $ hpm search -t distribution
    ┌---------┬-------------------------------------┬---------┬---------------------------------------------------------------------┐
    │ (index) │                name                 │ version │                             description                             │
    ├---------┼-------------------------------------┼---------┼---------------------------------------------------------------------┤
    │    0'@hihope/neptune_iot''1.0.1''适用于HiHope Neptune WiFi/BT IOT 模组开发'             │
    │    1'@bearpi/bearpi_hm_nano_flower''1.1.0''基于BearPi-HM_Nano开发板实现的护花使者案例'             │
    │    2'@bearpi/bearpi_hm_nano_agricul...''1.1.0''基于BearPi-HM_Nano开发板实现的智慧农业案例'             │
    │    3'@ohos/hispark_aries''1.0.3''适用于摄像头类产品开发,具备多媒体及图像功能。'           │
    │    4'@ohos/hispark_taurus''1.0.4''适用于带屏摄像头类产品开发,具备ACE框架,分布式调度能力及多媒体。' │
    │    5'@ohos/ip_camera_hi3518ev300''1.0.3''适用于摄像头类产品开发,具备多媒体及图像功能。'......
    
    • 然后执行如下命令下载开发版所需的源码、toolchain、tool 并编译,以 hispark_aries 为例
    mkdir hispark_aries
    cd hispark_aries
    hpm init dist
    hpm i @ohos/hispark_aries
    hpm dist # 或 hpm build
    

    3. DevEco Device Tool 一站式服务

    • 安装 VSCode、Nodejs、Python
    • 安装 DevEco Device Tool
    • 在 VSCode 中打开 DevEco 扩展
      • New Project:选择开发版
      • Build:使用的 hos 命令
    更多相关内容
  • 鸿蒙HarmonyOS源码

    2020-10-24 20:09:55
    鸿蒙HarmonyOS源码 鸿蒙HarmonyOS源码 鸿蒙HarmonyOS源码 鸿蒙HarmonyOS源码 鸿蒙HarmonyOS源码
  • 本课程是整个第1期的第2个课程,我们来系统过一遍鸿蒙2.0整体源码,精确到末端功能模块的程度来分析下整个鸿蒙源码的架构,让大家在整体上知道鸿蒙OS是怎么构成的,每个部分是干嘛的,哪里来的。这是后续继续深入...
  • 熟悉鸿蒙源码构建系统是为了进一步分析鸿蒙源码运行,分析鸿蒙整体OS的组成,进而为深度掌握鸿蒙OS打好基础。   课程特色 *深入浅出,通俗易懂。不怕学不会,就怕你不学习。 *思路清晰、语言风趣,对着视频看也...
  • 鸿蒙源码解析(一)

    千次阅读 2021-07-26 09:11:39
    鸿蒙模块一trans_service目录下auth_conn_manager.c和auth_conn_manager.h文件解析 其中trans_service目录主要负责设备的身份验证和传输通道,提供设备认证机制。而auth机制在设备认证和用户权限验证中发挥着重要的...

    鸿蒙模块一trans_service目录下auth_conn_manager.c和auth_conn_manager.h文件解析

    其中trans_service目录主要负责设备的身份验证和传输通道,提供设备认证机制。而auth机制在设备认证和用户权限验证中发挥着重要的作用。

    auth机制原理图一

    auth机制原理图

    auth机制原理图二

    在这里插入图片描述
    auth机制是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。

    使用场景:
    用户不再需要注册大量账号
    用于单点登录
    用于分布式系统的权限控制

    运行流程
    在这里插入图片描述

    运行流程:
    (A)用户打开客户端以后,客户端要求用户给予授权。
    (B)用户同意给予客户端授权。
    (C)客户端使用上一步获得的授权,向认证服务器申请令牌。
    (D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
    (E)客户端使用令牌,向资源服务器申请获取资源。
    (F)资源服务器确认令牌无误,同意向客户端开放资源。
    

    四种授权模式

    1. 授权码
      在这里插入图片描述
    1)用户访问客户端,后者将前者导向认证服务器,假设用户给予授权,认证服务器将用户导向客户端事先指定的"重定向URI"(redirection URI),同时附上一个授权码。
    (2)客户端收到授权码,附上早先的"重定向URI",向认证服务器申请令牌:GET /oauth/token?response_type=code&client_id=test&redirect_uri=重定向页面链接。请求成功返回code授权码,一般有效时间是10分钟。
    (3)认证服务器核对了授权码和重定向URI,确认无误后,向客户端发送访问令牌(access token)和更新令牌(refresh token)。POST /oauth/token?response_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA&redirect_uri=重定向页面链接。请求成功返回access Token和refresh Token。
    
    1. 简化模式
      在这里插入图片描述
    适用于公开的浏览器单页应用
    Access Token直接从授权服务器返回(只有前端渠道)
    不支持refresh tokens
    假定资源所有者和公开客户应用在同一个设备上
    最容易受安全攻击
    
    1. 用户名密码
      在这里插入图片描述
    使用用户名密码登录的应用,例如桌面App
    使用用户名/密码作为授权方式从授权服务器上获取access token
    一般不支持refresh token
    假定资源拥有者和公开客户子啊相同设备上
    
    1. 客户端凭证
      在这里插入图片描述
    适用于服务器见通信场景,机密客户代表它自己或者一个用户
    只有后端渠道,使用客户凭证获取一个access token
    因为客户凭证可以使用对称或者非对称加密,该方式支持共享密码或者证书
    

    代码部分:
    auth_conn_manager.h内容
    (路径:模块一\communication_softbus_lite-master\trans_service\include\libdistbus\auth_conn_manager.h)

    #ifndef AUTH_CONN_MANAGER_H
    #define AUTH_CONN_MANAGER_H
    /// 这里使用条件编译,减少编译的工程量。加快共同调用时候的编译速度
    #include "bus_manager.h"
    int StartListener(BaseListener* callback, const char *ip);
    void StopListener(void);
    void CloseAuthSessionFd(int fd);
    ///添加三个函数定义声明,便于auth_conn_manager.c直接调用函数
    #endif // AUTH_CONN_MANAGER_H
    /// 使用宏定义来编辑头文件,加快执行效率
    

    由于头文件有关于多种变量以及函数的声明,故在源文件包含的时候,容易造成多重包含,引起变量和函数的重复声明和定义。头文件一般选用条件编译的格式可以避免多个c文件共同调用同一个头文件时候重复编译。

    auth_conn_manager.c头文件内容
    (路径:模块一\communication_softbus_lite- master\trans_service\source\libdistbus\auth_conn_manager.c)

    #include "auth_conn_manager.h"
    #include <arpa/inet.h>
    // defined()函数检查某常量是否存在,若存在则返回true,否则返回false
    #if defined(__LITEOS_M__) || defined(__LITEOS_RISCV__)
    /// 前者是基于鸿蒙内核LITEOS_M,后者是基于RISC-V的现有内核
    /*这个条件编译检查__LITEOS_M__和__LITEOS_RISCV__是否存在,如果存在则调用else之前的头文件否则调用else和endif之间的头文件*/
    #include <cmsis_os.h>
    #include <lwip/sockets.h>
    #else
    #include <errno.h>
    #include <pthread.h>
    #include <signal.h>
    #include <sys/socket.h>
    #include <sys/time.h>
    #endif
    /* 前面使用条件编译*/
    #include <stdbool.h>
    #include <string.h>
    #include <sys/ioctl.h>
    #include <sys/select.h>
    #include <sys/types.h>
    #include <unistd.h>
    #include "data_bus_error.h"
    #include "os_adapter.h"
    #include "tcp_socket.h"
    #define DEFAULT_BACKLOG    4 
    #define SESSIONPORT        0
    /* 定义默认返回日志为4,和服务器端口为0*/
    BaseListener *g_callback = NULL;
    static int g_listenFd = -1;
    static int g_dataFd = -1;
    static int g_maxFd = -1;
    /*初始化部分变量*/
    #if defined(__LITEOS_M__) || defined(__LITEOS_RISCV__)
    static osThreadId_t g_uwTskLoID;
    #endif
    /*这里同上面使用条件编译,检查__LITEOS_M__和__LITEOS_RISCV__是否存在,如果存在则调用else之前的内容,否则调用else和endif之间的内容*/
    
    展开全文
  • harmonyos源代码 Harmonyos 应用开发 官方社区 HarmonyOS应用开发常见问题FAQ-JS UI开发 ####系统定义 HarmonyOS是一款分布式操作系统。在传统的单设备系统能力的基础上,HarmonyOS提出了基于同一套系统能力、适配...
  • 鸿蒙中任务就是一种线程,二者本质上没有区别,只是在不同的应用环境下有不一样的名字 下面附上任务的定义代码 typedef struct { VOID *stackPointer; /**< Task stack pointer */ //内核态栈指针,SP位置,切换...

    任务or线程?

    经过分析take_manager代码,我们发现任务的出现常常伴随着线程,任务池的工作和线程的工作原理有一定的相似度,我们今天分析一下这两者的区别。
    鸿蒙中任务就是一种线程,二者本质上没有区别,只是在不同的应用环境下有不一样的名字
    下面附上任务的定义代码

    typedef struct {
        VOID            *stackPointer;      /**< Task stack pointer */ //内核态栈指针,SP位置,切换任务时先保存上下文并指向TaskContext位置
        UINT16          taskStatus;         /**< Task status */   //各种状态标签,可以拥有多种标签,按位标识
        UINT16          priority;           /**< Task priority */  //任务优先级[0:31],默认是31级
        UINT16          policy;    //任务的调度方式(三种 .. LOS_SCHED_RR )
        UINT16          timeSlice;          /**< Remaining time slice *///剩余时间片
        UINT32          stackSize;          /**< Task stack size */  //非用户模式下栈大小
        UINTPTR         topOfStack;         /**< Task stack top */  //非用户模式下的栈顶 bottom = top + size
        UINT32          taskID;             /**< Task ID */    //任务ID,任务池本质是一个大数组,ID就是数组的索引,默认 < 128
        TSK_ENTRY_FUNC  taskEntry;          /**< Task entrance function */ //任务执行入口函数
        VOID            *joinRetval;        /**< pthread adaption */ //用来存储join线程的返回值
        VOID            *taskSem;           /**< Task-held semaphore */ //task在等哪个信号量
        VOID            *taskMux;           /**< Task-held mutex */  //task在等哪把锁
        VOID            *taskEvent;         /**< Task-held event */  //task在等哪个事件
        UINTPTR         args[4];            /**< Parameter, of which the maximum number is 4 */ //入口函数的参数 例如 main (int argc,char *argv[])
        CHAR            taskName[OS_TCB_NAME_LEN]; /**< Task name */ //任务的名称
        LOS_DL_LIST     pendList;           /**< Task pend node */  //如果任务阻塞时就通过它挂到各种阻塞情况的链表上,比如OsTaskWait时
        LOS_DL_LIST     threadList;         /**< thread list */   //挂到所属进程的线程链表上
        SortLinkList    sortList;           /**< Task sortlink node */ //挂到cpu core 的任务执行链表上
        UINT32          eventMask;          /**< Event mask */   //事件屏蔽
        UINT32          eventMode;          /**< Event mode */   //事件模式
        UINT32          priBitMap;          /**< BitMap for recording the change of task priority, //任务在执行过程中优先级会经常变化,这个变量用来记录所有曾经变化
                                                 the priority can not be greater than 31 */   //过的优先级,例如 ..01001011 曾经有过 0,1,3,6 优先级
        INT32           errorNo;            /**< Error Num */
        UINT32          signal;             /**< Task signal */ //任务信号类型,(SIGNAL_NONE,SIGNAL_KILL,SIGNAL_SUSPEND,SIGNAL_AFFI)
        sig_cb          sig;    //信号控制块,这里用于进程间通讯的信号,类似于 linux singal模块
    #if (LOSCFG_KERNEL_SMP == YES)
        UINT16          currCpu;            /**< CPU core number of this task is running on */ //正在运行此任务的CPU内核号
        UINT16          lastCpu;            /**< CPU core number of this task is running on last time */ //上次运行此任务的CPU内核号
        UINT16          cpuAffiMask;        /**< CPU affinity mask, support up to 16 cores */ //CPU亲和力掩码,最多支持16核,亲和力很重要,多核情况下尽量一个任务在一个CPU核上运行,提高效率
        UINT32          timerCpu;           /**< CPU core number of this task is delayed or pended */ //此任务的CPU内核号被延迟或挂起
    #if (LOSCFG_KERNEL_SMP_TASK_SYNC == YES)
        UINT32          syncSignal;         /**< Synchronization for signal handling */ //用于CPU之间 同步信号
    #endif
    #if (LOSCFG_KERNEL_SMP_LOCKDEP == YES) //死锁检测开关
        LockDep         lockDep;
    #endif
    #if (LOSCFG_KERNEL_SCHED_STATISTICS == YES) //调度统计开关,显然打开这个开关性能会受到影响,鸿蒙默认是关闭的
        SchedStat       schedStat;          /**< Schedule statistics */ //调度统计
    #endif
    #endif
        UINTPTR         userArea;   //使用区域,由运行时划定,根据运行态不同而不同
        UINTPTR         userMapBase;  //用户模式下的栈底位置
        UINT32          userMapSize;        /**< user thread stack size ,real size : userMapSize + USER_STACK_MIN_SIZE */
        UINT32          processID;          /**< Which belong process *///所属进程ID
        FutexNode       futex;    //实现快锁功能
        LOS_DL_LIST     joinList;           /**< join list */ //联结链表,允许任务之间相互释放彼此
        LOS_DL_LIST     lockList;           /**< Hold the lock list */ //拿到了哪些锁链表
        UINT32          waitID;             /**< Wait for the PID or GID of the child process */ //等待孩子的PID或GID进程
        UINT16          waitFlag;           /**< The type of child process that is waiting, belonging to a group or parent,
                                                 a specific child process, or any child process */
    #if (LOSCFG_KERNEL_LITEIPC == YES)
        UINT32          ipcStatus;   //IPC状态
        LOS_DL_LIST     msgListHead;  //消息队列头结点,上面挂的都是任务要读的消息
        BOOL            accessMap[LOSCFG_BASE_CORE_TSK_LIMIT];//访问图,指的是task之间是否能访问的标识,LOSCFG_BASE_CORE_TSK_LIMIT 为任务池总数
    #endif
    } LosTaskCB;
    

    代码定义部分很长,该结构体有一定复杂性。

    描述

    线程是计算资源竞争的最小单元,线程可以使用或等待CPU、使用内存空间等系统资源,并独立于其它线程运行。
    鸿蒙内核每个进程内的线程独立运行、独立调度,当前进程内线程的调度不受其它进程内线程的影响。
    线程的状态说明:

    • 初始化(Init):该线程正在被创建。
    • 就绪(Ready):该线程在就绪列表中,等待CPU调度。
    • 运行(Running):该线程正在运行。
    • 阻塞(Blocked):该线程被阻塞挂起。Blocked状态包括:pend(因为锁、事件、信号量等阻塞)、suspend(主动pend)、delay(延时阻塞)、pendtime(因为锁、事件、信号量时间等超时等待)。
    • 退出(Exit):该线程运行结束,等待父线程回收其控制块资源。
      在这里插入图片描述
      这里的任务和线程概念已经没什么区别,主要是不同情况下的称谓不同而已。

    OpenHarmony LiteOS-M的任务模块可以给用户提供多个任务,实现任务间的切换,帮助用户管理业务程序流程。任务模块具有如下特性:

    • 支持多任务。
    • 一个任务表示一个线程。
    • 抢占式调度机制,高优先级的任务可打断低优先级任务,低优先级任务必须在高优先级任务阻塞或结束后才能得到调度。
    • 相同优先级任务支持时间片轮转调度方式。
    • 共有32个优先级[0-31],最高优先级为0,最低优先级为31。

    任务相关概念

    任务状态

    任务有多种运行状态。系统初始化完成后,创建的任务就可以在系统中竞争一定的资源,由内核进行调度。

    任务状态通常分为以下四种:

    • 就绪(Ready):该任务在就绪队列中,只等待CPU。
    • 运行(Running):该任务正在执行。
    • 阻塞(Blocked):该任务不在就绪队列中。包含任务被挂起(suspend状态)、任务被延时(delay状态)、任务正在等待信号量、读写队列或者等待事件等。
    • 退出态(Dead):该任务运行结束,等待系统回收资源。

    四种状态的关系
    在这里插入图片描述

    任务相关属性

    任务ID

    任务ID,在任务创建时通过参数返回给用户,是任务的重要标识。系统中的ID号是唯一的。用户可以通过任务ID对指定任务进行任务挂起、任务恢复、查询任务名等操作。

    任务优先级

    优先级表示任务执行的优先顺序。任务的优先级决定了在发生任务切换时即将要执行的任务,就绪队列中最高优先级的任务将得到执行。

    任务入口函数

    新任务得到调度后将执行的函数。该函数由用户实现,在任务创建时,通过任务创建结构体设置。

    任务栈

    每个任务都拥有一个独立的栈空间,我们称为任务栈。栈空间里保存的信息包含局部变量、寄存器、函数参数、函数返回地址等。

    任务上下文

    任务在运行过程中使用的一些资源,如寄存器等,称为任务上下文。当这个任务挂起时,其他任务继续执行,可能会修改寄存器等资源中的值。如果任务切换时没有保存任务上下文,可能会导致任务恢复后出现未知错误。因此在任务切换时会将切出任务的任务上下文信息,保存在自身的任务栈中,以便任务恢复后,从栈空间中恢复挂起时的上下文信息,从而继续执行挂起时被打断的代码。

    任务控制块TCB

    每个任务都含有一个任务控制块(TCB)。TCB包含了任务上下文栈指针(stack pointer)、任务状态、任务优先级、任务ID、任务名、任务栈大小等信息。TCB可以反映出每个任务运行情况。

    任务切换

    任务切换包含获取就绪队列中最高优先级任务、切出任务上下文保存、切入任务上下文恢复等动作。

    任务运行机制

    用户创建任务时,系统会初始化任务栈,预置上下文。此外,系统还会将“任务入口函数”地址放在相应位置。这样在任务第一次启动进入运行态时,将会执行“任务入口函数”。

    展开全文
  • 一、获取源码与编译 用到的工具 虚拟机VMwareWorkstation MobaXterm RaiDrive Visual Studio Code 四个工具 在MobaXterm用SSH连接到虚拟机上的地址的前提下在命令行敲命令 第一种方法:使用HPM下载源码 1、创建...

    一、获取源码与编译

    用到的工具 虚拟机VMwareWorkstation   MobaXterm   RaiDrive    Visual Studio Code 四个工具

    在MobaXterm用SSH连接到虚拟机上的地址的前提下在命令行敲命令 

    第一种方法:使用HPM下载源码

    1、创建文件夹 mkdir code
    2、切换到文件夹 cd code
    3、创建code1
    4、切换到code1
    5、hpm init -t default  获取源码   出现 initialization finised 表示成功

    6、hpm dist 编译源码直至编译完成

    第二种方法:从代码仓库下载源码

    1、mkdir code2
    2、cd code2
    3、git clone https://gitee.com/bearpi/bearpi-hm _nano  下载   

    3、查看下载目录 ls
    4、python build.py BearPi-HM_Nano 编译源码直至完成       (BearPi-HM_Nano )开发版的名字

    二、烧录

    烧录

    1、

    安装CH340驱动

    2、

     

    Hiburn烧录工具

    3、电脑管理 设备管理器 端口 com几

    4、打开hiburn工具

    Com口改成对应的口

    打开setting   com settings  波特率改成921600

    Select file

    路径:SFTP/home/bearpi/code/code1/out/BearPi-HM_Nano/Hi3861_wifiiot_app_allinone.bin

    勾选 Auto burn

    点击 Connect  之后按一下开发板的复位按键,开始烧录

    出现上图表示烧录完成

    烧录完成点击Disconnect

    5、用MobaXterm查看开发板是否烧录成功

    点击Session

    点击Serial

     

    改成对应的com口   波特率改成 115200 点击ok

    接下来点击开发板的复位按钮  

    上图显示烧录完成。

     

    展开全文
  • HarmonyOS源码目录结构1

    2022-08-04 15:47:58
    对应的代码仓包含有:HarmonyOS Framework基础能力集合,定位于大多数设备开发都需要能力模块,目前提供了全球化、DFX、安全、系统启动等模块|——
  • 本节介绍如何在Linux主机上配置鸿蒙源码的编译构建环境,所有命令均通过远程终端在Linux主机上执行。 安装文件系统打包工具 运行"mkfs.vfat",如果未找到该命令,需要安装 运行"mcopy ",如果未找到该命令,需要...
  • HarmonyOS源码获取大全

    万次阅读 2020-09-11 15:03:44
      OpenHarmony是HarmonyOS的开源版,由华为捐赠给开放原子开源基金会(OpenAtom Foundation)开源。第一个开源版本支持在128KB~128MB设备上运行,欢迎参加开源社区一起持续演进。   代码仓库地址:...
  • 如何通过Windows下载鸿蒙源码

    千次阅读 2020-12-17 23:11:53
    鸿蒙提供了两种源代码下载方式,一种是Linux的下载,另一种是单仓库的下载。在windows下我们采用单仓库下载 Linux:repo window:git clone 下载方式和安卓ASOP下载方式一样,要下载AOSP请看我的另一篇博客...
  • 鸿蒙源码下载并编译

    万次阅读 2020-09-18 15:37:41
    第一章 下载源码并编译 1.1 在Ubuntu中安装开发环境 如果你是从头看文档,并且按照文档操作,那么你已经按照《5.2 安装Ubuntu软件》下载并运行了这个脚本:Configuring_ubuntu.sh。如果你是中途看文档,那么请按照...
  • Ubuntu编译HarmonyOS源码

    千次阅读 2021-06-23 08:57:03
    但是用git clone会经常断开,如果只是下载某个版本来编译,以后不再同步最新代码,那还是直接下载压缩包的源码吧。 2.安装和配置python 强烈建议按官方的方式来,不然,后续有很多坑。 3.安装gn 4.安装ninja 5.安装...
  • 寻找鸿蒙源码入口网上说鸿蒙操作系统开源了,全部134个...还是上网搜吧,因为鸿蒙源码刚开源,所以网上是不会搜到源码讲解的,搜到的基本都是鸿蒙OS应用开发教程,这个和鸿蒙源码是两回事哈。搜到一个官方开发教程...
  • 本文主要总结软总线模块下trans_service目录中个文件的作用和功能,宏观上把握trans_service在鸿蒙系统中发挥的作用。 一、分布式软总线介绍 1.1 总线 总线(Bus)是一个非常广泛的概念,在传统计算机硬件体系中应用...
  • ubuntu 编译 鸿蒙 源码

    万次阅读 2020-09-26 21:25:26
    https://device.harmonyos.com/cn/docs/start/introduce/oem_quickstart_3516_environment-0000001054501981
  • 提示:本文基于开源鸿蒙内核分析,官方源码【kernel_liteos_a】,官方文档【docs】本文作者:鸿蒙内核发烧友,将持续研究鸿蒙内核,更新博文,敬请关注。内容仅代表个人观点,错误之处,欢迎大家指正完善。本文分析...
  • 全网最全的鸿蒙源码结构分析(附自制4张架构图)

    万次阅读 多人点赞 2020-09-21 23:44:34
    前言:今天下午到晚上折腾了6个多小时,从官网一直到Gitee和CodeChina,把所有知道的资料都看了一下,整理了一份鸿蒙架构和源码对比图给大家,希望大家都来看看。 文章目录一、鸿蒙结构图自制版(结合源码重新制作...
  • 鸿蒙HarmonyOS应用开发系列 | 解读鸿蒙源码

    万次阅读 多人点赞 2020-12-14 15:44:10
    收集 并将持续更新。 鸿蒙OS的系统调用是如何实现的? | 解读鸿蒙源码 鸿蒙开发环境搭建、源码下载和编译 ... Harmony OS 开发避坑指南——源码下载和编译 全网最全的鸿蒙源码结构分析(附自制4张架构图) ...
  • 如何寻找鸿蒙源码入口

    千次阅读 2021-05-28 17:19:57
    描述寻找鸿蒙源码入口网上说鸿蒙操作系统开源了,全部134个仓库OpenHarmony - Open_Harmony - Gitee.com啥?134个仓库是什么东西?不应该是1个仓库吗?Linux源码好像就一个压缩吧,为什么鸿蒙冒出134个仓库来,然后...
  • HarmonyOS源码的编译、烧录、调试插件。华为官网有下载方式,这里提供一个更加快捷的安装通道,下载后为安装包,可以直接安装
  • 鸿蒙源码分析(三)

    千次阅读 2021-07-28 11:16:45
    鸿蒙JSON和cJSON语法以及message.c中相关的类型转获取 文件路径(模块一\communication_softbus_lite- master\trans_service\source\utils\message.c) JSON 语法是 JavaScript 对象表示法语法的子集。数据在键/值对...
  • 鸿蒙内核源码注释中文版 【 Gitee仓 | CSDN仓 | Github仓 | Coding仓 】 项目中文注解鸿蒙官方内核...鸿蒙源码分析系列篇 【 CSDN | OSCHINA | WIKI 】 从 HarmonyOS 架构层视角整理成文, 并首创用生活场景讲故事的方式
  • 提示:本文为鸿蒙系统源码分析总目录,源码来自官方源码库【OpenHarmony】,项目...鸿蒙内核源码分析 官方源码【kernel_liteos_a】官方文档【docs】参考文档【Huawei LiteOS鸿蒙内核源码分析(双向循环链表篇) ...
  • 鸿蒙内核源码注释仓库 >> 精读内核源码,中文注解分析, 深挖地基工程,大脑永久记忆, 四大源码仓每日同步更新 < Gitee | Github | CSDN | Coding > 鸿蒙内核源码分析博客 >> 故事说内核,问答式导读...
  • 百万汉字注解 >> 精读内核源码,中文注解分析, 深挖地基工程,大脑永久记忆,四大码仓每日同步更新< gitee | github | csdn | coding >...读本篇之前建议先读鸿蒙内核源码分析(总目录)arm体系系列篇. 寄存器
  • 鸿蒙的异常接管,在系统发生异常时的处理动作为:显示异常发生时正在运行的任务信息(包括任务名、任务号、堆栈大小等),以及CPU现场等信息。 进入和退出异常方式 异常接管切换需要处理好两件事: ● 一个是代码要...
  • 鸿蒙内核源码分析(百篇博客分析)鸿蒙内核源码分析(编译过程篇)|简单案例窥视GCC编译全过程
  • 如何创建项目,请参考这篇文章《 HarmonyOS鸿蒙开发之01 运行第一个hello world (教程含源码)》 2、 通过XML技术编写页面 在Java UI框架中,提供了两种编写布局的方式:在XML中声明UI布局和在代码中创建布局。这...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,197
精华内容 2,078
关键字:

鸿蒙源码

友情链接: qiyizhiquzao.zip