1.简介 HPM SDK是一个基于宽松使用许可(BSD 3-Clause)完全开源的综合性软件支持包,帮助用户使用先楫 半导体基于RISC-V内核的MCU简化和加快应用开发。 HPM SDK包括第三方工具软件、硬件驱动软件、集成实时操作系统、中间件、参考例程以及说明文档等。HPMSDK支持用Cmake为Segger和GCC提供示例项目,并同时集成进RT Thread、FreeRTOS等开源项目中。 HPM SDK 官方是持续迭代更新的,更新内容通常包括:1.修复已知的BUG;2.支持新发布的MCU及BOARD;3.新增新的例程、中间件、组件、驱动等;在新的SDK版本发布后均会有对应版本的release note说明;但是用户常常在更新新的HPM SDK时,发现自己的代码和HPM SDK在同一级目录下(常常放到sample目录),更新时发现是一个巨大的工作量; 本文介绍了如何在HPM SDK之外搭建开发工程项目,当HPM SDK版本更新时,可直接替换旧的SDK即可;做到自己的代码工程和官方的SDK隔离开,避免更新时引入太多的冲突问题。 HPM SDK是基于Cmake工具来构建搭建编译工程的,针对Cmake的介绍和语法本文不做详细介绍; 上海先楫半导体面向用户同时提供HPM SDK的集成工具集sdk_env,本文的介绍基于hpm sdk版本1.2.0,基于工具集sdk_env_v1.2.0。
2.HPM SDK 组成结构介绍2.1 SDK ENV组成结构 SDK ENV是HPM SDK在windows环境下工作集工具,使用SDK ENV无需额外搭建开发环境,直接运行SDK ENV即可完成工程构建、编译;
注意:在linux环境下无需SDK ENV,直接使用hpm_sdk即可。按照hpm_sdk README.txt搭建即可。 l doc:主要是先楫半导体官方开发的用户指导手册,包含 HPM6750EVK和HPM6750EVK mini等用户指导手册。 l hpm_sdk: HPM SDK的核心软件包。 l toolchains:编译工具链。 l tools:主要第三方软件和相应的处理脚本。
l 其他:SDK运行环境配置脚本和说明文件。
2.2 HPM SDK核心软件包组成 SDK核心软件包主要是支持完成应用软件开发的各种组件,包含了驱动、板级支持文件、中间件、soc定义文件、实例、处理脚本、帮助文件等。如下图所示 各个目录的主要内容: l arch: 与risc-v架构相关的操作接口。 l boards: 与 开发板相关的硬件定义和接口,主要为HPM6300EVK、HPM6750 EVK、HPM6750 EVK mini等相关的板卡硬件信息。 l cmake: 与cmake和工程管理相关配置文件。 l components: 常用板载模块驱动、处理逻辑和控制接口,包括camera、codec、debug_console、enet_phy、serial_nor、touch、usb等。 l doc: SDK支持文档和软件API的支持文档。 l drivers: soc片上硬件模块驱动、处理逻辑和控制接口。 l middleware: 常见算法库、图形库、组件库、RTOS等。 l samples: 各种应用例程。 l script: 与工程管理、编译相关的处理脚本。 l soc: soc片上资源寄存器定义。 l 其他:处理脚步和说明文件。
3.HPM SDK之外搭建工程 特别强调:A.需基于HPMSDK 1.2.0及以上的版本。 B.HPM SDK之外搭建的工程,当前只支持命令行方式构建编译,GUI图形界面工具暂不支持。 在HPM SDK之外搭建工程,理论上不受任何路径限制,以下方案是笔者实现的一种。用户可参考此方案任意实现适合自己的工程结构。 笔者是在hpm_sdk同级目录下新增了user_app目录来存放自己的工程;如下:
Windows下SDK_ENV下目录结构:
Linux下目录结构:
hpm_sdk是基于cmake工具构建编译开发的,只需要将hpm_sdk根目录下 CMakeLists.txt文件中添加user_app目录为项目子目录即可,其它不做任何修改。如下:
add_subdirectory(../user_app ../user_app/build_tmp) 简单讲解cmake add_subdirectory() add_subdirectory(sourceDir [binaryDir ] [ EXCLUDE_FROM_ALL ]) add_subdirectory()命令允许项目将另一个目录带入构建; sourceDir可以为任何目录,不一定是源树中的子目录,尽管它通常是。sourceDir可以指定为绝对路径或相对路径;binaryDir通常不需要指定。省略时,CMake会在构建树中创建一个与sourceDir同名的目录。如果sourceDir包含任何路径组件,它们将被镜像到CMake创建的binaryDir中。binaryDir也可以显式地指定为绝对路径或相对路径。如果sourceDir是源树之外的一个路径,CMake需要指定binaryDir,因为相应的相对路径不能再被自动构造。 笔者使用相对路径添加user_app为工程子目录,同时使用相对路劲添加binaryDir。 以下是user_app目录结构: 各个目录的主要内容: l apps: 上层应用工程; l boards: 私有的boards; l components: 私有的组件; l doc: 文档; l middleware: 私有中间件; l services: 私有services; l tools:工具; l CMakeList.txt
apps下私有实例:helloworld
boards下私有boards: Windows SDK ENV下构建编译: 双击运行:start_cmd.cmd
cd user_appappshello_world
generate_project-b hpm6200power -x D:workspace 1_codeae_workspaceuser_appboards -f -tflash_xip
其中: -b指定构建的board -x指定构建board的查找路径;不加-x 默认hpm_sdk/boards路径 -t 指定构建项目类型
Linux构建编译:
cd hpm_sdk/
source env.sh
cd ../user_app/apps/hello_world/
mkdir build
cd build
cmake -GNinja -DBOARD_SEARCH_PATH=/home/zhangeg/work/ae_workspace/user_app/boards-DBOARD=hpm6200power -DCMAKE_BUILD_TYPE=flash_xip ..
ninja
其中: -DBOARD_SEARCH_PACH=指定构建board的查找路径;不加默认hpm_sdk/boards路径; -DBOARD=指定构建的board
-DCMAKE_BUILD_TYPE=指定构建项目类型
|