最近开始学习海思的开发,使用的芯片型号是 hi3518e。首先需要面对的问题,就是如何使用海思 SDK

真正的产品是一个很复杂的东西,涉及到的知识面很广,单独的一个开发商很难完成。因此嵌入式开发这个行业存在不同层级,大家各司其职。海思芯片的应用场景中,会普遍的使用到音视频编解码,而这些算法也很复杂,为了简化开发,海思提供了这个 SDK,里面提供已经实现好的音视频编解码的算法,提供用户调用。另外这个 SDK 中,也包含了 uboot、linux、cross compiler 等等开发必须的工具,通过 SDK 可以更加方便的使用这个工具进行用户程序的开发

SDK 解包

首先解压 SDK 包,并进入它的文件夹,可以看到以下信息

1
2
3
4
5
.
├── package
├── scripts
├── sdk.cleanup
└── sdk.unpack

我们需要做的就是通过运行 source sdk.unpack,将 SDK 中的压缩包解压,解压后的文件夹

1
2
3
4
5
6
7
8
.
├── drv
├── mpp
├── osdrv
├── package
├── scripts
├── sdk.cleanup
└── sdk.unpack

安装工具链

进入到 osdrv/opensource/toolchain 可以看到两个工具链, hisiv300 是 uclibc 的, hisiv400 是 glibc 的

进入到 arm-hisiv300-linux ,可以见到一个安装脚本 cross.install.v300 , 修改它的 TOP_DIR 为自己想安装工具链的位置,超级权限安装

最后可执行文件会放到 TAR_BIN_DIR=$TOOL_DIR/target/bin 这个目录,将它添加到 $PATH 环境变量中

最后运行 arm-hisiv300-linux-gcc -v ,输出信息正常即可

编译整个 osdrv

进入到 osdrc/opensource 下,可以看到 busybox kernel toolchain uboot ,通过 SDK 的 Makefile 可以一次性全部编译

需要提前安装必修的软件包

1
sudo apt-get install uuid-dev zlib1g-dev

下面说说遇到的问题的解决方法

编译错误: /bin/sh: 1: pushd: not found的问题

解决方法很简单,执行sudo dpkg-reconfigure dash 命令,将 dash 设置为 No

error: storage size of ‘hints’ isn’t known

这个问题是因为开发机的系统版本过高,SDK 中的 mtd-utils 版本过低导致的

比较好的解决方法是,下载 mtd-utils-2.0.0 版本对 SDK 中的 mtd-utils 进行替换

1
wget ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-2.0.0.tar.bz2

在我的电脑上无法使用 mtd-utils-2.1.1 版本,所以一般人最好还是下载 2.0.0 版本

修改 osdrv/tools/pc/jffs2_tool/Makefile

1
2
3
4
5
6
7
8
9
10
11
CC             := gcc
BUILD_DIR := $(PREFIX)/tmp
ZLIB := $(shell pwd)/../zlib
ZLIB_INSTALL := $(PREFIX)/../zlib
ZLIB_DIR := $(ZLIB_INSTALL)/tmp
STRIP := strip
MTD_UTILS := mtd-utils-2.0.0 #需要修改的地方
# this lib should be install to host
LZO := lzo-2.09

TARGETS := mkfs.jffs2

将下载好的 mtd-utils-2.0.0.tar.bz2 解包,进入文件夹,运行

1
./configure --prefix=

然后重新再压缩回 mtd-utils-2.0.0.tar.bz2

最后就是以 ---------finish osdrv work 结束编译