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
  • 参考网址:

源码框架

shell 复制代码
.global Reset_Handler

.section .text
.type  Reset_Handler, %function
Reset_Handler:
    ldr  r0, =__bss_start
    ldr  r1, =__bss_end
    mov  r2, #0

bss_loop:
    str  r2, [r0, #0]
    add  r0, r0, #4
    subs r3, r1, r0
    bne  bss_loop

    ldr  sp, =__irq_stack_top
    b    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函数里面启动操作系统
c 复制代码
/*****************************************************************************
 Function    : main
 Description : Main function entry
 Input       : None
 Output      : None
 Return      : 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();
#endif

    Uart0RxIrqRegister();

    NetInit();

#if (LOSCFG_USE_SHELL == 1)
    ret = LosShellInit();
    if (ret != LOS_OK) {
        printf("LosAppInit failed! ERROR: 0x%x\n", ret);
    }
#endif

    ret = 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,之后会全部换成鸿蒙内核
相关推荐
周洲08309 分钟前
STM32 GPIO 外部中断深度解析:边沿触发 / 电平触发、NVIC 优先级配置、中断嵌套实战
stm32·单片机·嵌入式硬件
轻微的风格艾丝凡36 分钟前
波形异常记录--零飘过大
嵌入式·硬件工程·dsp
LCG元42 分钟前
STM32F103 CAN 总线通信实战:标准库双机通信与过滤器配置精讲
stm32·单片机·嵌入式硬件
z20348315203 小时前
STM32单片机控制无源蜂鸣器播放《晴天》
stm32·单片机·嵌入式硬件
奔跑的架构师4 小时前
[A-49]ARMv9/v8-PSCI接口规范与工作流程简介
android·linux·arm开发·arm
国科安芯4 小时前
详解ADC 规则组外部触发:CH2、CH3 与 TRGO2
运维·网络·单片机·嵌入式硬件·mcu·系统架构
ACP广源盛139246256735 小时前
WAIC2026 国产算力浪潮@ACP#YLB3118 在算力矩阵中的存储定位与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
Dr.kangder5 小时前
嵌入式面试总结(十四)——中断处理
单片机·面试·职场和发展·架构·硬件架构·嵌入式
振南的单片机世界5 小时前
硬核菊花链:3个GPIO+无限74HC595=端口扩展“无限套娃”
arm开发·stm32·单片机·嵌入式硬件
Dr.kangder5 小时前
嵌入式面试总结(十)——流水线
单片机·嵌入式硬件·面试·职场和发展·系统架构·嵌入式