前言:
海思的文档已经非常详细了,分门别类详尽整齐。但是对于刚刚接手的开发者而言,每次编译都不得不从一个文档看到另一个文档,再是另一个文档,跳来跳去又跳到readme……这一过程实在是繁琐之至。为了是这一过程清晰并且一目了然,在此整理出整个编译过程(以Hi3559AV100为例),给自己也给其他用到海思SDK的人提供方便之门。
一.准备阶段 安装虚拟机
ubuntu16.04,开启相关服务
Windows下安装mobaxtern,filezilla,开启相关服务
二. 安装交叉编译工具:
以《Hi3559A╱C V100 开发环境用户指南.pdf》为基础,这个文档在“XXX\ReleaseDoc\zh\01.software\board\OSDRV”目录下
发布包提供编译工具链:
aarch64-himix100-linux、 gcc-arm-none-eabi-4_9-2015q3。
aarch64-himix100-linux 为基于 64bit 操作系统 glibc 的工具链。
gcc-arm-none-eabi-4_9-2015q3 为 Huawei LiteOS M7 工具链。
注意:(两个都必须安装!不是只用到了Linux就不安装另一个,不然后续编译会各种稀奇古怪的报错)
比如:
直接make all时
0.3.1/osdrv/components/ipcm/ipcm/class/virt-tty/liteos' home/book/Downloads/hi3995tools/Hi3559AV100 SDK V2.0.3.1/osdrv/components/ipcm ipcm make[21:Leavingdirectory/home/book/Downloads/hi3995 tools/Hi3559AV100 SDK V2.0.3.1/osdrv/components/ipcm/ipcm sharefs making... make -f do make module sharefs make[21:Enteringdirectory/home/book/Downloads/hi3995 tools/Hi3559AV100 SDK W 2.0.3.1/osdrv/components/ipcm/ipcm make[2]: Nothing to be done for 'sharefs'. make[21:Leavingdirectory"/home/book/Downloads/hi3995 tools/Hi3559AV100 SDK V2 0.3.1/osdrv/components/ipcm/ipcm' ipcm make all... make[1]:Leavingdirectory'/home/book/Downloads/hi3995_tools/Hi3559AV100_SDK_V2 0.3.1/osdrv/components/ipcm/ipcm /Downloads/hi3995_tools/Hi3559AV100_SDK_V2.0.3.1/osdrv p/home/book/Downloads/hi3995_tools/Hi3559AV100_SDK_V2.0.3.1/osdrv/components/i pcm/ipcm/out/node6/*.a/home/book/Downloads/hi3995 tools/Hi3559AV100 SDK V2.0.31/osdrv/platform/liteos_m7/liteos/out/hi3559av100/cortex-m7/lib cp:无法获取'/home/book/Downloads/hi3995 tools/Hi3559AV100 SDK V2.0.3.1/osdrv/co mponents/ipcm/ipcm/out/node 6/*.a’的文件状态(stat):没有那个文件或目录 make: *** [hiipcm] Error 1 Makefile:468: recipe for target 'hiipcm' failed Hx--1024
想排查问题单独编译内核时
drivers/built-in.o:在函数'hisi_spi_nor_unprep'中: arm pmu.c:(.text+0xb0278): 对'fmc switch mutex’未定义的引用 arm_pmu.c:(.text+0xb0278):截断重寻址至相符:R_AARCH64_ADR_PREL_PG_HI21 针对未定义的符号 fmc switch mutex arm_pmu.c:(.text+0xb027c): 对'fmc_switch_mutex'未定义的引用 drivers/built-in.o:在函数'hisi_spi_nor_probe'中: arm pmu.c:(.text+0xb0808):对'hifmc cs user’未定义的引用 arm_pmu.c:(.text+0xb0808)::截断重寻址至相符:R AARCH64_ADR_PREL_PG_HI21 针对未定义的符号 hifmc_cs_user arm_pmu.c:(.text+0xb0840): 对'hifmc_cs_user’未定义的引用 arm_pmu.c:(.text+0xb0a24):对'hifmc_cs_user’未定义的引用 drivers/built-in.o:在函数'hisi spi nor_prep'中: arm_pmu.c:(.text+0xb0d1c):对'fmc_switch mutex’未定义的引用 armpmu.c:(.text+0xb0d1c):截断重寻址至相符:R_AARCH64_ADR_PRELPG HI21 针对未定义的符号 fmc switch mutex arm pmu.c:(.text+0xb0d20): 对'fmc switch mutex’未定义的引用 make: *** [vmlinux] Error1 Makefile:969: recipe for target 'vmlinux" failed Hx--1024
实际上都会在安装全工具链后迎刃而解
aarch64-himix100-linux安装步骤如下:
步骤 1. 解压工具链。
执行如下命令进行解压:
tar -xvf aarch64-himix100-linux.tgz
步骤 2. 安装工具链。
运行命令 sudo ./aarch64-himix100-linux.install 即可完成此工具链的安装。
其它工具链安装方法与上述描述类似。
gcc-arm-none-eabi-4_9-2015q3安装步骤如下:
步骤1、从ARM网站下载工具链压缩包:
(1)进入网站:
https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q3-update
(2)下载gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2
步骤2、安装:
(1)将下载的 gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2和发布包里的gcc-arm-none-eabi-4_9-2015q3.install放到同一个目录下
(2)执行如下命令:
chmod +x gcc-arm-none-eabi-4_9-2015q3.install sudo ./gcc-arm-none-eabi-4_9-2015q3.install
三.安装 Hi3559AV100 SDK
3.1 Hi3559AV100 SDK 包位置
在"Hi3559AV100***/01.software/board"目录下,可以看到一个Hi3559AV100_SDK_Vx.x.x.x.tgz 的文件,该文件就是 Hi3559AV100 的软件开发包。
3.2 解压缩 SDK 包
在 linux 服务器上(或者一台装有 linux 的 PC 上,主流的 linux 发行版本均可以),使用命令:tar -zxf Hi3559AV100_SDK_Vx.x.x.x.tgz,解压缩该文件,可以得到一个Hi3559AV100_SDK_Vx.x.x.x 目录。
3.3 展开 SDK 包内容
返回 Hi3559AV100_SDK_Vx.x.x.x 目录,运行./sdk.unpack(请用 root 或 sudo 权限执行)将会展开 SDK 包打包压缩存放的内容,请按照提示完成操作。
如果需要通过 WINDOWS 操作系统中转拷贝 SDK 包,请先运行./sdk.cleanup,收起SDK 包的内容,拷贝到新的目录后再展开。
3.4 在 linux 服务器上安装交叉编译器
已经安装过了可以尝试开始编译了,此时可以进入/Hi3559AV100_SDK_V2.0.3.1/osdrv$目录 ,在opensource/kernel路径下下载Linux4.9.37版本的tar.gz后就可以直接make BOOT_MEDIA=spi AMP_TYPE=linux all即可,出现下图所示的界面就代表编译完成,也就说明我们的环境搭建就此完成了,其余详细的对于uboot的修改啦,kernel源码的修改啦,文件系统的制作啦我们都可以在后续单独讨论
3995 tools/Hi3559AV100 SDKV2.0.3.1/osdrv reating filesystem with parameters: Size:100663296 Block size: 4096 Blocks per group: 32768 Inodes per group: 6144 Inode size: 256 Journal blocks: 1024 Label: Blocks:24576 Block groups: 1 Reserved block group size: 7 reated filesystem with 521/6144 inodes and 4088/24576 blocks/Downloads/hi3995 tools/Hi3559AV100SDKV2.0.3.1/osdrv Find/home/book/Downloads/hi3995tools/Hi3559AV100_SDK_V2.0.3.1/osdrv/pub/rootfs glibc multi-core arm64/ -name '*svn'l xargs rm -rf bushd/home/book/Downloads/hi3995tools/Hi3559AV100 SDK V2.0.3.1/osdrv/pub;tar c frootfs glibcmulti-core arm64.tgz rootfs glibc multi-core arm64;popd /Downloads/hi3995tools/Hi3559AV100_SDK_V2.0.3.1/osdrv/pub ~/Downloads/hi3995_t p0ls/Hi3559AV100SDKV2.0.3.1/osdrv /Downloads/hi3995_tools/Hi3559AV100_SDKV2.0.3.1/osdrv Hx--1024 ----finish osdrv work
四.安装可能出现的报错
./sdk.unpack: 2: ./sdk.unpack: source: not found
/sdk.unpack: 2: ./sdk.unpack: source: not found/sdk.unpack:4:./sdk.unpack: ECHo: not found/sdk.unpack: 6: ./sdk.unpack: WARN: not found/sdk.unpack:7: ./sdk.unpack: WARN: not found/sdk.unpack: 8: ./sdk.unpack: ECHO: not found Nsdk.unpack: 17:./sdk.unpack: ECHO: not found/sdk.unpack: 18:./sdk.unpack: ECHO: not found/sdk.unpack:25:./sdk.unpack:ECHO: not found /sdk.unpack:27:./sdk.unpack: run command progress float: not found/sdk.unpack: 29:./sdk.unpack: ECHO: not found sdk.unpack:31:./sdk.unpack: run command progress float: not found/sdk.unpack: 33:./sdk.unpack: ECHO: not found /sdk.unpack:35:./sdk.unpack: run command progress float: not found/sdk.unpack: 37:./sdk.unpack: Echo: not found /sdk.unpack:39:./sdk.unpack: run command progress float: not found/sdk.unpack:41:./sdk.unpack: ECHO: not found /sdk.undack:43:./sdk.undack: run command proaress float: not found book@www.100ask.org:~/Downloads/hi3559/Hi3559AV100_sDK_V2.0.1.0$ sudo dpkg-recon fiqure dash
&emsp终端输入:sudo dpkg-reconfigure dash,将dash设定改为No
正在设定 dash The system shell is the default command interpreter for shell scripts. Using dash as the system shell will improve the system's overall performance. It does not alter the shell presented to interactive users. Use dash as the default system shell (/bin/sh)? <Yes> <No>
&emsp重新运行解压脚本就没有问题了
Unpacking SDK WARN:Be sure you have installed the cross-compiler. if not, install it first! WARN: ALL THE SOUCE FILES WILL BE OVERWRITED. FILES YOU MOTIFIED WILL BE LOST ! OS TYPE = SDK CHIP =hi3559av100 unpacking osal run command progress float: 'tar -xvzf package/osal.tgz'100%]################################################## unpacking hisyslink run commandprogress float: "tar -xvzf package hisyslink.tgz「100% ]################################################## unpacking osdrv run command progress float: 'tar -xvzf package/osdrv.tgz[100%]################################################## unpacking mpp run command progress float: 'tar -xvzf package/mpp.tgz'[100%]################################################## unpacking drv run command progress float: 'tar -xvzf package/drv.tqz' 100%]################################################## bookowww.100ask.ora:~/Downloads/hi3559/Hi3559AV100SDKV2.0.1.0S Hx--1024