LiteOS增加执行自定义源码

开发过程注意事项:

  1.  源码工程路径不能太长
  2.  源码工程路径不能有中文
  3.  一定要关闭360等杀毒软件,否则编译的打包阶段会出错

增加自定义源码的步骤:

  1.创建源码目录

2. 创建源文件

新建myhello目录后,再此目录下再新建源文件myhello_demo.c

3. 编写自定义代码

在myhello_demo.c中增加代码如下:

#include <stdio.h>

#include <ohos_init.h> //必须包含此头文件,否则无法调试输出



void myhello_init() //自定义一个入口函数

{

    printf("myhello init\n");

}



//声明myhello_init为入口函数

SYS_RUN(myhello_init); //在鸿蒙系统层自动执行入口函数

// APP_FEATURE_INIT(myhello_init); //在鸿蒙系统的应用层自动执行入口函数

4. 配置自定义源码的编译

   鸿蒙系统源码是通过目录下的BUILD.gn描述当前源码如何编译,则有哪些源文件,及使用的头文件路径。复制iothardware目录下的BUILD.gn到myhello目录下。

修改myhello目录下的BUILD.gn文件内容为:

static_library("myhello_demo") {

    sources = [

        "myhello_demo.c"

    ]



    include_dirs = [

        "//utils/native/lite/include",

        "//kernel/liteos_m/kal/cmsis",

        "//base/iot_hardware/peripheral/interfaces/kits",

    ]

}

其中:myhello_demo为编译的目标名, sources指定当前目标由哪些源文件组成, include_dirs指定源码中使用的头文件所在路径。

修改myhello上级App目录下的BUILD.gn, 修改内容为:

import("//build/lite/config/component/lite_component.gni")



lite_component("app") {

    features = [

#备注 "源码目录名:源码目录BUILD.gn的目标名"

        "myhello:myhello_demo",

    ]

}

5. 执行程序

重新ReBuild工程后,upload烧录并打开monitor后即可接收开发板里输出的信息。

<think>我们正在讨论的是TensorFlowLiteMicro(TFLiteMicro)的交叉编译。根据用户的问题,他希望在Linux环境下对TFLiteMicro的源码进行交叉编译。交叉编译意味着我们将在x86_64的Linux主机上编译生成适用于ARM架构(如aarch64)的可执行文件或库。参考之前的引用内容,我们可以发现一些线索:引用[1]提到了在linux_aarch64目录下生成了TFLite的静态库(包括libtensorflow-lite.a),并且提到了编译示例label_image。引用[2]和[3]则涉及了在交叉编译环境中使用ArmNNSDK和TensorFlowLite的编译过程,其中引用[3]特别提到了编译TFLite时使用的TensorFlow版本(2.3.1)和具体的commit(fcc4b966f1265f466e82617020af93670141b009),以及使用flatbuffers编译schema.fbs。但是,用户的问题是关于TensorFlowLiteMicro的交叉编译,而不是TensorFlowLite。因此,我们需要调整方向。TensorFlowLiteMicro是TFLite的扩展,针对微控制器和嵌入式设备。它的交叉编译过程与TFLite类似,但有一些特定的步骤。根据官方文档和常见的交叉编译实践,我们可以采取以下步骤:1.设置交叉编译工具链(例如,针对ARM64的gcc-linaro工具链)。2.获取TensorFlow源代码(包含TensorFlowLiteMicro)。3.配置编译环境(可能需要使用Makefile或CMake,以及一些依赖库)。4.针对目标平台进行编译。由于TFLiteMicro通常用于嵌入式系统,我们可能需要生成静态库,并针对特定的微控制器架构(如Cortex-M系列)进行编译。但用户的问题中并没有指定具体的目标平台,我们假设是ARMv8-A(aarch64)架构,类似于引用[1]中的目标。以下是步骤的详细说明:步骤1:安装交叉编译工具链对于ARM64目标,我们可以安装aarch64-linux-gnu工具链。在Ubuntu上,可以执行:```bashsudoapt-getinstallgcc-aarch64-linux-gnug++-aarch64-linux-gnu```步骤2:获取TensorFlow源代码```bashgitclonehttps://github.com/tensorflow/tensorflow.gitcdtensorflow```注意:最好切换到稳定的分支,例如用户提到的commit(但这里我们可能需要使用最新的稳定分支,或者根据需求选择)。例如:```bashgitcheckoutr2.8#假设我们使用2.8版本,但请根据实际情况选择```步骤3:配置编译环境TFLiteMicro的交叉编译可以通过Makefile来完成。TensorFlow提供一个Makefile用于构建TFLiteMicro的库和示例。我们需要修改Makefile中的一些设置以支持交叉编译。首先,进入TensorFlow源代码目录下的tensorflow/lite/micro/tools/make目录。在Makefile中,我们可以通过设置目标平台(TARGET)和编译器选项(例如CXX和CC)来进行交叉编译。但是,TensorFlowLiteMicro的Makefile构建系统已经支持交叉编译。我们可以通过设置TARGET_ARCH环境变量来指定目标架构。例如,对于ARM64(Cortex-A系列),我们可以使用:```bashmake-ftensorflow/lite/micro/tools/make/MakefileTARGET_ARCH=aarch64microlite```这个命令将编译生成一个适用于ARM64的微内核库(libtensorflow-microlite.a)。然而,上述Makefile方式可能不够灵活,特别是当我们需要更复杂的交叉编译设置时。因此,另一种方法是使用CMake。步骤4(备选):使用CMake进行交叉编译TensorFlowLiteMicro也支持使用CMake进行构建。我们可以使用CMake的交叉编译功能。首先,确保安装了CMake(版本要求>=3.16)。然后,创建一个CMake工具链文件(例如,aarch64-toolchain.cmake),内容如下:```set(CMAKE_SYSTEM_NAMELinux)set(CMAKE_SYSTEM_PROCESSORaarch64)set(CMAKE_C_COMPILERaarch64-linux-gnu-gcc)set(CMAKE_CXX_COMPILERaarch64-linux-gnu-g++)#设置查找路径,确保能够找到目标系统的库set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAMNEVER)set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARYONLY)set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDEONLY)set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGEONLY)```接下来,在TensorFlow源代码目录中,我们可以为TFLiteMicro创建一个构建目录:```bashmkdir-ptensorflow/lite/micro/tools/cmake/build_aarch64cdtensorflow/lite/micro/tools/cmake/build_aarch64```然后,运行CMake,指定工具链文件:```bashcmake-DCMAKE_TOOLCHAIN_FILE=../../path/to/aarch64-toolchain.cmake..```注意:这里的路径需要根据实际位置调整。另外,我们可能需要设置其他选项,例如:```bashcmake-DCMAKE_TOOLCHAIN_FILE=../../path/to/aarch64-toolchain.cmake\-DTFLITE_MICRO_ENABLE_GENERATED_EXAMPLES=OFF\..```最后,编译:```bashmake-j4```这样,我们就可以在build_aarch64目录下得到交叉编译后的库和示例。注意:TFLiteMicro的构建需要flatbuffers,但TensorFlow的源代码中已经包含了flatbuffers的子模块,因此通常不需要单独编译。然而,根据引用[3]的内容,我们注意到在编译TFLite时使用了flatc(flatbuffers编译器)来编译schema.fbs。在TFLiteMicro中,同样需要flatbuffers的支持。因此,在交叉编译时,我们可能需要确保主机上安装了flatbuffers(或者使用TensorFlow源代码中提供的版本)。总结:用户可以选择使用Makefile或者CMake进行交叉编译。Makefile方式相对简单,而CMake方式更灵活。由于用户没有指定具体的目标硬件,我们假设为ARM64架构(aarch64)。如果目标硬件是其他架构(如Cortex-M),则需要调整工具链和编译选项。因此,我们可以提供两种方法供用户选择。注意:在编译过程中可能会遇到依赖问题,例如需要安装Python的某些包(如numpy)或者需要其他工具(如wget)来下载依赖库。因此,建议用户确保主机环境已经安装了必要的开发工具。下面我们给出使用Makefile进行交叉编译的具体步骤:步骤1:安装交叉编译工具链(如上述aarch64-linux-gnu)步骤2:获取TensorFlow源代码(并切换到合适的版本)步骤3:进入TensorFlow目录,执行:```bashmake-ftensorflow/lite/micro/tools/make/MakefileTARGET_ARCH=aarch64microlite```这个命令会下载所需的依赖库(如flatbuffers、gemmlowp等)并编译出适用于ARM64的TFLiteMicro库。生成的库位于:tensorflow/lite/micro/tools/make/gen/aarch64_armv8-a_default/lib/libtensorflow-microlite.a此外,我们还可以编译示例程序,例如:```bashmake-ftensorflow/lite/micro/tools/make/MakefileTARGET_ARCH=aarch64micro_speech```这将生成micro_speech的二进制文件,同样位于gen/aarch64_armv8-a_default/bin目录下。如果用户的目标平台是其他架构,可以在Makefile中通过TARGET_ARCH指定,如cortex-m4,cortex-m7等。最后,我们提供一些注意事项:-由于TFLiteMicro的构建系统在持续更新,不同版本可能会有差异,建议参考官方文档。-交叉编译时,可能需要指定目标操作系统(例如,嵌入式系统可能没有操作系统,即裸机环境)。在Makefile中,可以通过TARGET_OS指定(如baremetal)。因此,针对用户的问题,我们给出基于Makefile的交叉编译步骤,因为这是官方推荐且相对简单的方法。注意:如果用户需要更复杂的构建(如使用自定义工具链),可能需要编写自定义工具链文件(在Makefile中通过TARGET_TOOLCHAIN_ROOT和TARGET_TOOLCHAIN_PREFIX指定)。下面我们给出一个完整的回答。</think>### TensorFlow Lite Micro 交叉编译指南 在 Linux 环境下对 TensorFlow Lite Micro (TFLite Micro) 进行交叉编译,需要配置交叉编译工具链并修改构建参数。以下是详细步骤: #### 1. **环境准备** ```bash # 安装基础依赖 sudo apt-get update sudo apt-get install git make cmake python3 python3-pip # 安装交叉编译工具链 (以 ARM64 为例) sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu ``` #### 2. **获取源代码** ```bash git clone https://github.com/tensorflow/tensorflow.git cd tensorflow git checkout v2.10.0 # 使用稳定版本 ``` #### 3. **配置交叉编译** 创建工具链文件 `aarch64_toolchain.cmake`: ```cmake set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) ``` #### 4. **编译 TFLite Micro 库** ```bash mkdir tflite_micro_build && cd tflite_micro_build # 配置 CMake cmake ../tensorflow/lite/micro/tools/cmake \ -DCMAKE_TOOLCHAIN_FILE=../aarch64_toolchain.cmake \ -DTFLITE_MICRO_ENABLE_GENERATED_EXAMPLES=OFF # 关闭示例加速编译 # 编译静态库 make -j$(nproc) tensorflow-lite-micro ``` 生成的静态库路径:`tflite_micro_build/libtensorflow-lite-micro.a` #### 5. **编译示例程序(可选)** ```bash # 编译 micro_speech 示例 make micro_speech # 查看 ARM 可执行文件 file gen/linux_aarch64_default/bin/micro_speech ``` #### 关键注意事项 1. **目标架构**:修改 `CMAKE_SYSTEM_PROCESSOR` 和编译器路径适配目标平台(如 ARMv7 用 `arm-linux-gnueabihf`) 2. **依赖项**:需交叉编译 flatbuffers(引用[3]),通过以下命令生成 schema: ```bash flatc --cpp --gen-object-api tensorflow/lite/schema/schema.fbs ``` 3. **版本兼容**:TensorFlow 2.3+ 需 contrib 目录(引用[2]),建议使用 2.10 稳定版 4. **内存优化**:嵌入式设备需在 `micro_interpreter.h` 中调整 `tensor_arena_size` #### 验证生成文件 ```bash # 检查 ARM 可执行文件格式 aarch64-linux-gnu-objdump -f gen/linux_aarch64_default/bin/micro_speech ``` 应显示 `architecture: aarch64` [^1]: 编译过程需保持主机与目标机库路径一致 [^2]: ARMv8 交叉编译需 ComputeLibrary 支持 [^3]: flatbuffers 是 TFLite 模型格式的编译依赖
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值