3个版本 (重大更新)

0.3.1 2020年8月28日
0.2.0 2019年12月28日
0.1.1 2019年4月28日
0.1.0 2019年4月27日

#459 in 嵌入式开发

每月21次下载
用于nuki-backend-hifb

MIT许可证

1MB
22K SLoC

himpp-rs

Build Status

Hi3XXX MPP API for Rust绑定。

要求

  1. 目标板工具链必须安装并导出到 PATH
    • hi3516ev200 - arm-himix100-linux.
    • hi3516ev300 - 与 hi3516ev200 相同。
    • hi3518ev200 - 与 hi3516ev200 相同。
    • hi3518ev300 - 与 hi3516ev200 相同。
    • hi3519av100 - arm-himix200-linux.
    • hi3531v100 - arm-hisiv100nptl-linux.
    • hi3559av100 - aarch64-himix100-linux.
  2. 必须为目标板安装rust目标
    • hi3516ev200 - armv7-unknown-linux-musleabihf.
    • hi3516ev300 - 与 hi3516ev200 相同。
    • hi3518ev200 - 与 hi3516ev200 相同。
    • hi3518ev300 - 与 hi3516ev200 相同。
    • hi3519av100 - aarch64-unknown-linux-gnu.
    • hi3531v100 - arm-hisiv100-linux-uclibcgnueabi.
    • hi3559av100 - aarch64-unknown-linux-gnu.
  3. MPP_DIR 导出到包含 mpp-lib 的目录。
  4. SYS_INCLUDE 导出到包含系统头文件的目录。

工具链和mpp-lib可以从BSP SDK获取。如果使用xargo构建,则为 arm-hisiv100-linux-uclibcgnueabi

环境默认值

Hi3516EV200

Hi3616EV300、Hi3616EV200、Hi3618EV300 使用相同的SDK。

export PATH=/opt/hisi-linux/x86-arm/arm-himix100-linux/bin:$PATH
export MPP_DIR=$(pwd)/vendor/mpp-lib-Hi3516EV200_V1.0.1.0
export SYS_INCLUDE=/opt/hisi-linux/x86-arm/arm-himix100-linux/target/usr/include

Hi3519AV100

export PATH=/opt/hisi-linux/x86-arm/arm-himix200-linux/bin:$PATH
export MPP_DIR=$(pwd)/vendor/mpp-lib-Hi3519AV100_V2.0.2.0
export SYS_INCLUDE=/opt/hisi-linux/x86-arm/arm-himix200-linux/target/usr/include

Hi3531V100

export PATH=/opt/hisi-linux-nptl/arm-hisiv100-linux/target/bin:$PATH
export MPP_DIR=$(pwd)/vendor/mpp-lib-Hi3531V100_V1.0.D.0
export SYS_INCLUDE=/opt/hisi-linux-nptl/arm-hisiv100-linux/target/usr/include

Hi3559AV100

export PATH=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/bin:$PATH
export MPP_DIR=$(pwd)/vendor/mpp-lib-Hi3559AV100_V2.0.2.0
export SYS_INCLUDE=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/aarch64-linux-gnu/sys-include
export TARGET_CC=aarch64-himix100-linux-gcc
export BINDGEN_EXTRA_CLANG_ARGS="--sysroot=/opt/hisi-linux/x86-arm/aarch64-himix100-linux/target"

构建

要构建包,您必须首先设置交叉编译环境。

.cargo/ 中有一些预设,可以帮助您快速设置交叉编译。

示例

# Setup for Hi3559AV100 boards
cp .cargo/hi3559av100.toml .cargo/config
# or for link static libraries
cp .cargo/hi3559av100-static.toml .cargo/config
# Build the package ...
cargo b

确保在Cargo.toml中启用了 hi3559av100 功能,hi3559av100 指定了目标板,您可以将它更改为其他板,例如: hi3531v100 更多功能请参阅Cargo.toml。

使用 arm-hisiv100-linux-uclibcgnueabi 构建

# the nightly toolchain and rust-src must be installed.
rustup override set nightly
rustup component add rust-src
# the xargo command must be installed.
cargo install xargo
# if the above already, that should be work now.
RUST_TARGET_PATH=$(pwd) xargo [build|clean|run|test] ...

如果未设置 RUST_TARGET_PATH,xargo 将引发 "Error loading target specification..." 错误

示例

ffi-example

use himpp::ffi::*;

fn main() {
    unsafe {
        println!("HI_MPI_SYS_Init() = {}", HI_MPI_SYS_Init());
        println!("HI_MPI_SYS_Exit() = {}", HI_MPI_SYS_Exit());
    }
}

mpi-example

use himpp::mpi;

fn main() {
    mpi::sys::init()
        .or_else(|err| {
            println!("Initialize failed: {}, exit and try again!", err);
            mpi::sys::exit().and_then(|_| mpi::sys::init())
        })
        .unwrap();
    // Add your code here
    mpi::sys::exit().unwrap();
}

更多 示例

常见问题解答

如何在目标 != 主机时启用 Doc-Tests

要在目标机不等于主机时启用doc-tests,您必须使用夜间工具链并开启-Z doctest-xcompile标志。

例如

RUSTDOCFLAGS="-C linker=aarch64-himix100-linux-gcc" cargo +nightly t -Z doctest-xcompile

如何更改我的目标板连接

只需导出环境变量TARGET_SSH_USERTARGET_SSH_HOST,如下所示

export TARGET_SSH_USER=hello
export TARGET_SSH_HOST=192.168.3.4

依赖关系

~0.1–6MB
~69K SLoC