Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试

摘要:
使用arm-linux-gcc编译器。2.交叉编译源代码。1.环境Kali Linux(由于本机Ubuntu 16.04虚拟机已损坏,请使用Kali Linux进行部署和测试)。2.安装树莓派交叉编译器。1.下载树莓派交叉编译器https://step。3.将交叉编译器的路径添加到环境变量。

这篇文章主要介绍了交叉编译的实现,包括环境部署,并简单测试交叉编译环境是否安装成功。 

一、交叉编译

      在一个平台上生成另一个平台上的可执行代码。为什么要大费周折的进行交叉编译呢?一句话:不得已而为之。有时是因为目的平台上不允许或不能够安装所需要的编译器,而又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行所需要的编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。

      要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译源代码,最终生成可在目标平台上运行的代码。

     常见的交叉编译例子如下:

1、在Windows PC上,利用ADS(ARM 开发环境),使用armcc编译器,则可编译出针对ARM CPU的可执行代码。

2、在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。

3、在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARM CPU的可执行代码。

二、交叉编译源代码

1、环境

Kali-Linux(由于本机Ubuntu 16.04虚拟机坏了,所以使用Kali-Linux进行部署由于测试)

2、树莓派交叉编译工具安装

step1. 下载树莓派交叉编译工具https://github.com/raspberrypi/tools

step2. 将源码放到各用户都能share的文件夹下,如/usr/tools

Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试第1张

在该文件夹下,一共有5个不同版本的交叉编译工具

arm-bcm2708hardfp-linux-gnueabi 
gcc-linaro-arm-linux-gnueabihf-raspbian 
arm-bcm2708-linux-gnueabi 
gcc-linaro-arm-linux-gnueabihf-raspbian-x64 
arm-rpi-4.9.3-linux-gnueabihf

其中arm-rpi-4.9.3-linux-gnueabihf和gcc-linaro-arm-linux-gnueabihf-raspbian-x64是64位机器用的,每一个交叉编译工具的目录下都有bin目录进入,执行./arm-linux-gnueabihf-gcc -v可查看gcc版本。

在这里我们使用的是 gcc-linaro-arm-linux-gnueabihf-raspbian-x64 版本!

step3. 将交叉编译工具的路径加到环境变量中,为了以后启动不用再设置,我加到了/etc/bash.bashrc中

gedit /etc/bash.bashrc
或者
#/etc/profile全局的,随系统启动设置【设置这个文件是一劳永逸的办法】
#gedit /etc/profile
64位添加:
#树莓派交叉编译环境:start export PATH
=$PATH:/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin export PATH=$PATH:/usr/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin #树莓派交叉编译环境:start
32位添加:
#树莓派交叉编译环境:start export PATH=$PATH:/usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin(gcc有问题,暂不明) export PATH=$PATH:/usr/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin(使用这个文件中的gcc) #树莓派交叉编译环境:start

 重新加载

source /etc/bash.bashrc

step4. 检测是否安装成功

way1: 

arm #双tab

显示以下内容

Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试第2张

 way2:

arm-linux-gnueabihf-gcc -v 
#能显示正确信息
 
arm-linux-gnueabihf-g++ -v 
#能显示正确信息

三、编译源代码

1、在写编译脚本时,一定要确保编译器写的是交叉编译的编译器。比如比较常用的Makefile,

demo: $(obj)
    $(CXX) -o $@ $^ $(LDFLAGS)

其中的CXX必须是arm-linux-gnueabihf-g++才能编译出正确的在树莓派上的可执行文件。

2、编译第三方库

如果你想设置全局的CC和CXX变量,在每次打开一个新的Terminal时,输入以下命令:

export CC=arm-linux-gnueabihf-gcc  
export CXX=arm-linux-gnueabihf-g++ 

 其他的全局变量同上。

四、简单例子测试

编写一个测试文件,在PC机上完成编译然后上传到树莓派中并执行。该例子仅测试交叉编译是否成功并简单测试了浮点数功能 
新建一个文件夹hello,里面有两个文件hello.c 和 Makefile。

hello.c

#include <stdio.h>  
int main(void)  
{  
    float pi = 3.14;      
    printf("Hello World
");  
    printf("%.2f
",2*pi);  
} 

Makefile

CC=arm-linux-gnueabihf-gcc  
hello:hello.o  
clean:  
    rm -rf hello.o hello

在makefile文件中使用了至少两条隐含规则,CC为默认工具链;.o文件由同名的.c文件生成。

在该文件夹下,进行make一下

make

把产生的可执行文件hello上传到树莓派,执行hello可执行文件,可以得到正确结果,说明交叉编译链配置成功

ls
chmod 777 hello    #赋予可执行权限
./hello

Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试第3张

五、eclipse交叉编译环境测试

1、创建交叉应用工程
在 Eclipse 主界面点击菜单 File > New > C/C++ Project > C Managed Build或者C++ Managed Build,在弹出的“C/C++ Project”对话框中,输入项目名称。选择一个项目类型(如Executable/Empty Project),在 Toolchains 中一定要选 Cross GCC,这是CDT对交叉环境的支持,提供了额外的功能,以方便嵌入式应用程序的开发。

点击下一步,来到“Select Configurations”页面,我们采用默认,直接下一步,来到“Cross GCC Command”的设置。这里我们可以填写交叉编译工具链的交缀和路径,如:

Cross compiler prefix: arm-linux-gnueabihf-  #(别打错!)
Cross compiler path: /usr/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

 Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试第4张

 上例的情况是在我们已经安装好了ARM芯片商提供的交叉编译包。一般来说,芯片商都提供了这样一个交叉编译环境,包括目标平台的编译工具链、Glibc库、二进制工具和其它常用工具。上例是TI提供的DM3730的开发包的安装路径和程序的前缀(真实程序为:arm-arago-linux-gnueabi-gcc、arm-arago-linux-gnueabi-ld等)

最后点击完成,一个交叉项目就创建好了。关于交叉编译前缀和路径的设置,在项目创建后,可以在项目的属性中改变它。

2、设置工程属性(可选)

建好工程后,右击工程,选择properties,在左侧栏中选中C/C++ General →Path and Symbols,设置Include文件夹,注意为确保不漏,Assembly、GNU C以及GNU C++这三个都要设置这些路径哦:

 Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试第5张

 Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试第6张

 选中左侧栏中的C/C++ Build→Settings,进行交叉编译器设置:

 Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试第7张

首先可以看到之前在建立工程时的前缀和编译工具链路径会在这里显示。前缀千万不要打错啊

查看编译器工具的设置:

Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试第8张

可以看到,在Command下方的All Options中出现了工具链的目录。在编译时,Eclipse就会调用 前缀 + 相应的工具 (如gcc) 去编译啦。下方的Compiler、Linker、Assembler的Command分别为g++、g++、as。

3、添加头文件及源文件

配置好以上内容后就可以添加个.c或者.cpp的源文件,以上面hello为例:

Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试第9张

 或者

Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试第10张

4、编译

Project > Build Project

5、执行

将编译好的二进制文件拷贝到树莓派中执行

chmod 777 pi_cross_c
chmod 777 pi_cross_cpp
./chmod 777 pi_cross_c
./chmod 777 pi_cross_cpp

Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试第11张

 到此,Kali-Linux已经部署完成了对树莓派3B的交叉编译环境!!!

下一篇文章: 

Linux实现树莓派3B的交叉编译——(二)miracl库的测试与静态库的生成

参考:https://blog.csdn.net/caomang23/article/details/82658982

https://blog.csdn.net/u010833052/article/details/78481973

https://blog.csdn.net/iefenghao/article/details/88815093

https://www.cnblogs.com/NJdonghao/p/Cross_Toolchain.html

https://blog.csdn.net/qq_16397695/article/details/83063826

https://shumeipai.nxez.com/2013/10/08/configure-cross-compiler-platform-raspberry-pi.html

免责声明:文章转载自《Linux实现树莓派3B的国密SM9算法交叉编译——(一)环境部署、简单测试与eclipse工程项目测试》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇深入浅出-模块开发如何获取项目中XML的路径下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

在Fedora 12下编译和调试RTThread

在Fedora 12下编译和调试RT-Thraed 1.安装编译工具 yum install scons yum install python 安装工具arm-2010q1-202-arm-none-linux-gnueabi.bin,我是安装在/home/lixianjing/CodeSourcery目录下的,后面会引用这个路径。 2.下载RT-Th...

openssh版本升级修复漏洞

 作者:邓聪聪   解决方案是升级高版本,下面是升级的步骤 1;安装telnet工具,因为升级过程中怕失败或者重启ssh失败。我们直接yun安装即可。 同时安装服务端和客户端命令: yum –y  install telnet*接下来,编辑配置文件vi /etc/xinetd.d/telnet # default: on # description: T...

JAVA中使用动态链接库须知

好不容易 使用cygwin+windows打了个包,放到JAVA中使用。但是还是会报各种错。   JAVA中使用.so文件 static{ System.loadLibrary("test"); //加载libtest.so } 以上是网上的经典用法,很简单的一句。但是用的时候还是出错了。。。 主要还是.so路径找不到。找了大半天,终于,问题解决了...

我的全栈之路-C语言基础之C语言概述与开发环境搭建

我的全栈之路-C语言基础之C语言概述与开发环境搭建 我的全栈之路 1.1 信息技术发展趋势 1.2 浅谈计算机系统架构 1.2.1 计算机系统架构概述 1.2.2 计算机硬件系统 1.2.3 计算机软件系统 1.3 程序和指令 1.4 计算机编程语言发展史 1.5 程序的编译和解释 1.6 计算机语言应用场景 1.7 C语言概览 1.7.1 C...

【.NET程序性能分析下篇】使用CLR Profiler分析.NET程序

  就像剥去.NET语法糖衣的工具(Reflector等)很多一样,我们可以用来分析.NET程序性能的工具有很多,如前面一片博文DebugLZQ给大家介绍的vs自带的性能分析工具,除此之外常用的还有还有clr profiler、Windbg等。   vs自带的性能分析可以很快的找到瓶颈代码,而且支持多线程。   Windbg就不多说了,Windows平台下...

20款免费备份文件软件

      经常对电脑中资料进行备份的重要性已不用多说,但每次都辛苦地逐个目录拷贝、或花半天时间整理目录和文件、更不能想象重装系统后繁复的系统设置调整。如果你曾经因为这些而对系统备份工作有所迟疑,那么现在让你彻底告别这些顾虑! 1. Areca Backup 7.1.10 Areca Backup 是一个开源的备份软件,用 Java 写成。Areca B...