相关文章推荐


我们写了 linux 上第一个 c 程序 heollo world ,是使用 gcc 编译器进行代码的编译,编译得到的可执行文件只能在 X86 结构的 PC 上运行,不能在开发板上运行,如果要在 arm 开发板上运行,则需要交叉编译这个 C 程序。

什么是交叉编译呢?

如果我们想在 ARM 上运行,就要使用 ARM 的编译器,然后在 X86 上进行编译。因为我们使用 ARM 的编译器编译完了之后,是把我们的可执行程序放到开发板上来运行,而不是在 PC 上运行的,这个过程大家可以把它理解成交叉,然后再和我们的编译器结合起来就叫做交叉编译器。

接下来我们来看下,如何来交叉编译 C 程序呢?首先我们要安装交叉编译器,RK3399 的 Linux 系统的交叉编译器并未单独提供,是和 Linux 的 BSP 源码包一起提供的,路径为“iTOP-3399 开发板/01_iTOP-3399光盘资料/20210512/05 Linux 源码”。所以我们只需要在环境变量里面把在 BSP 源码包提供的交叉编译器加到环境变量里面或者直接使用绝对路径编译即可。

我们现在 ubuntu 系统的任意目录下创建一个 hello.c 文件 ,这个程序也非常简单,就是一个 helloworld ,我们来编译一下,然后运行下可执行文件,这个可执行文件可以在 PC 上运行的。如下图所示。

<ignore_js_op> RK3399开发板丨迅为3399交叉编译器的安装和使用_交叉编译

然后我们使用 file 命令来看下这个文件,这个文件可以在 X86 上运行的,但是它不能在 ARM 上运行,因为它这里写的是 X86。如下图所示。

<ignore_js_op> RK3399开发板丨迅为3399交叉编译器的安装和使用_交叉编译器_02

接下来我们来设置并使用交叉编译器编译。这里一共有俩种方法,我们先来看第一种方法。

方法一:

把 Linux 的 BSP 源码包中的交叉编译器添加到环境变量中去,然后使用交叉编译器编译。

1 作者将资料中的 rk3399_linux_sdk_v2.0 源码放于 Ubuntu16.04 的/home/work/3399/linux/no_ai/目录下(此路径没有要求,大家可自行任意放置), 如下图所示:

<ignore_js_op> RK3399开发板丨迅为3399交叉编译器的安装和使用_编译器_03

2 交叉编译工具在 linux 源码 rk3399_linux_sdk_v2.0 中

prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin 目录下,如下图所示:

<ignore_js_op> RK3399开发板丨迅为3399交叉编译器的安装和使用_linux_04

所以我们设置临时环境变量如下图所示:

export

PATH=/home/work/3399/linux/no_ai/rk3399_linux_sdk_v2.0/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-20

17.05-x86_64_aarch64-linux-gnu/bin RK3399开发板丨迅为3399交叉编译器的安装和使用_环境变量_05 PATH

如下图所示:

<ignore_js_op> RK3399开发板丨迅为3399交叉编译器的安装和使用_环境变量_06

注意:/home/work/3399/linux/no_ai/rk3399_linux_sdk_v2.0/此路径是自己 Linux 源码所放置的路径,大家依据自己的实际路径改写。

检查是否添加成功

echo $PATH

如下图所示

<ignore_js_op> RK3399开发板丨迅为3399交叉编译器的安装和使用_环境变量_07

从图中我们可以发现,环境变量 PATH 里面已经有了我们交叉编译的路径,所以我们可以继续往下进行。

注意! 第一步设置交叉编译工具是设置临时环境变量,只在当前设置的窗口有效,如果第一步设置交叉编译工具的窗口关闭了,请按照第一步再次打开并设置环境变量

回到 hello.c 所在的路径,使用命令交叉编译 hello.c

<ignore_js_op> RK3399开发板丨迅为3399交叉编译器的安装和使用_环境变量_08

输入命令“file hello” ,如下图所示:

<ignore_js_op> RK3399开发板丨迅为3399交叉编译器的安装和使用_编译器_09

此时我们编译出来的可执行文件就是 arm 的了,就可以在开发板上运行了。

方法二:

不设置环境变量,直接使用绝对路径编译。

我 们 要 使 用 的 交 叉 编 译 器 aarch64-linux-gnu-gcc , 在 虚 拟 机 ubuntu 的/home/work/3399/linux/no_ai/rk3399_linux_sdk_v2.0/prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05- x86_64_aarch64-linux-gnu/bin 这个路径下,所以我们可以直接使用绝对路径找到这个编译器来编译,回到hello.c 所在的路径,使用命令交叉编译 hello.c

如下图所示:

<ignore_js_op> RK3399开发板丨迅为3399交叉编译器的安装和使用_交叉编译_10

同样我们也可以编译出来可执行文件 hello,但是需要注意的是,编译器所在的绝对路径以大家电脑上的实际路径为准。

总结

方法一步骤较多,但是输入命令短小精悍。方法二输入命令路径很深,每次编译很繁琐,但是不受环境变量影响。两个方法均可实现交叉编译。大家可权衡选择。 <ignore_js_op> RK3399开发板丨迅为3399交叉编译器的安装和使用_交叉编译器_11

RK3399开发板丨迅为3399交叉编译器的安装和使用_linux_12


核心板参数

尺寸:6.5*5.5cm

高度:连同连接器在内0.26cm

CPU:Rockchip RK3399 28纳米HKMG制程 双核Cortex-A72 1.8/2.0GHz;四核Cortex-A53 1.4GHz

内存:2GB 双通道DDR3(4GB可选)

存储:16GB EMMC

电源管理:官方推荐RK808芯片

工作电压:3.3V供电

系统支持:Android8.1系统;Ubuntu16.04系统;Debian9系统

接口:支持双USB3.0 Type-C接口;支持PCIe 2.1 (4 full-duplex lanes );内置低功耗MCU;8路数字麦克风阵列输入

引角扩展:引出脚多达320个,满足用户各类扩展需求

多媒体:支持4K VP9 and 4K 10bits H265/H264 视频解码,高达60fps;1080P 多格式视频解码 (VC-1, MPEG-1/2/4, VP8)

运行温度:0度至+80度区间,设备工作正常,运行良好!

应用范围:可广泛用于人脸识别设备、无人机、机器人、游戏终端、广告机/一体机、金融POS类、车载控制业、云端服务、VOIP视频会议系统、医疗类、安防/监控/警务、工控类、IoT物联网领域、VR等近百行业应用产品。


底板参数

尺寸:19cm*12cm        PCB板:4层

POWER:电直流电源输入接口,12V/2A电源输入

GPS模块:支持(选配)

SWITCH:电源开关

WIFI/BT:双频2.4G/5G WIFI、Bluetooth4.1二合一模块

HDMI接口:1路 HDMI2.0输出接口

EDP LCD:1路

Type-C:1路 Type-C USB3.0接口,兼容OTG功能

MIPI_TX:1路

TF卡槽:1个

MIPI_TX/RX:1路

USB HOST:4路 USB2.0接口;1路 USB3.0接口;

SPDIF:光纤输出接口

串口:2路RS232串口

BUZZER        1个蜂鸣器

网口:1路千兆以太网(10/100/1000Mbps)

RTC:实时时钟

IRDA:1个

GPIO接口:20PIN,包括1路SPI和2路I2C

SIM卡槽:1个

LED:3个

PHONE:支持耳机输出

PCIE:PCIE M.2接口

MIC:支持MIC输入

陀螺仪:支持

按键:6个

电子罗盘:支持

4G模块:全网通(选配)

光线传感器:支持

CAMERA接口:CAMERA 1路、MIPI CAMERA 1路


 
推荐文章