一、安装arm交叉编译工具arm-2009q3-67-arm-none-linux-gnueabi
Linux下编译生成arm交叉编译工具很复杂,像我一样的新手,可以直接下载别人已经编译好的arm交叉编译工具。
下载地址点击打开链接
http://www.veryarm.com/arm-none-linux-gnueabi-gcc#linux
(1)下载文件
arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
(2)解压缩
# 解压缩
sudo tar -xvf arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
# 解压缩后文件为 /home/ff/arm-2009q3
sudo mv arm-2009q3 /usr/local
# 授权
sudo chmod 777 /usr/local/arm-2009q3 -R
# 配置arm编译工具环境变量
sudo vim /etc/profile
# 在/etc/profile文件最后添加如下内容,保存并退出
export ARM=/usr/local/arm-2009q3/bin export PATH=$ARM:$PATH
# 使环境变量生效
source /etc/profile
(3)测试输入arm
按tab键,如果能给出提示 :arm-none-linux-gnueabi-表示arm交叉编译工具生效。
可以编写测试test.cpp文件,应用
# 编译test可执行文件
arm-none-linux-gnueabi-g++ test.cpp -o test
将test放到tftp根目录下(linux系统作为tftp-server如果没有则需要先安装tftp,嵌入式中一般内置了tftp-client)。在嵌入式设备中通过
# 下载tftp服务端中提供的test可执行文件
tftp -g -r test 192.168.207.104
# 修改test权限
chmod 777 test
# 运行test
./test
二、Ubuntu下安装Hi3518交叉编译环境
(1)下载Hi3518E V200R001C01SPC040
(2)将Hi3518E_SDK_V1.0.4.0.tgz移动到Ubuntu中
(3)解压缩Hi3518E_SDK_V1.0.4.0.tgz
(4)运行sdk.unpack脚本解压缩osdrv到当前目录
./sdk.unpack: 2 : ./sdk.unpack: source: not found.
...
百度得知是脚本解析有问题,原因ubuntu16.04 系统默认的SH(脚本解析器)为dash,可以使用 ls -l /bin/sh 命令查看。
dash解析器的解析效率很高,但是功能不如bash那么强大,因此,在解析有些命令时,会出现找不到的错误。
修改默认脚本解析器为bash,方法如下:
1、命令行输入:sudo dpkg-reconfigure dash
2、选择<no>
3、ls -l /bin/sh 查询确认
还可以直接修改两个脚本文件,使用bash解释执行这两个脚本
1、修改Hi3518E_SDK_V1.0.4/scripts/common.sh文件
将第一行 #!/bin/sh 改为 #!/bin/bash
2、修改Hi3518E_SDK_V1.0.4/sdk.unpack文件
(5)安装Hi3518E交叉编译工具
进入目录: Hi3518E_SDK_V1.0.4/osdrv/opensource/toolchain/arm-hisiv300-linux
运行脚本cross.install.v300.
sudo ./cross.install.v300
安装完成后,使环境变量生效:
source /etc/profile
(6)验证
输入arm,按tab键,会提示arm-hisiv300-linux-g++等提示。
三、arm交叉编译alsa
(1)下载alsa-lib库
(2)解压缩
放在路径 /usr/local/alsa-arm
(3)配置
sudo ./configure --host=arm-linux --prefix=/usr/local/alsa-arm
会在/usr/local/alsa-arm下生成makefile文件,创建include文件及其内的.h文件
注释:
--host=arm-linux : 编译目的机器为arm
--prefix=... : 配置安装路径为?/usr/local/alsa-arm
(4)编译
sudo make
sudo make install
生成include ,lib文件。拷贝到alsa-lib下对应的头文件和库文件目录中。
***************** warning******************
不知什么原因,我在sudo make install时,提示出错,无法生成Lib库文件。
但是网上资料都是这么介绍,我暂且记录下来以后有时间再去解决。
******************warning******************
我的解决方案是,直接把别人编译后的include,lib拿过来放到arm-none-linux-gnueabi下对应文件夹中。