OK3568-C开发板源码编译与交叉编译环境搭建

原创 2023-03-21 13:11:00 rk3568源码编译 rk3568交叉编译环境搭建 rk3568环境搭建

本篇试用报告由发烧友码农爱学习提供,感谢码农爱学习的支持。

在上篇文章《发烧友实测 | OK3568-C开发板初体验》中,我们对飞凌嵌入式OK3568-C开发板进行了开箱测评,测试了命令行登录与命令行测试,并外接HDMI屏幕测试了出厂界面。本篇,将继续进行OK3568-C开发板Linux系统开发需要用的软件交叉编译环境的配置。下面就介绍两种交叉编译环境的配置方法

一、C/C++交叉编译环境编译

如果只是使用C/C++代码,则在自己的Ubuntu虚拟机中添加RK3568对应的交叉编译器(gcc/g++)即可。进行代码的交叉编译时可用使用如下方法,该配置方式简单便捷。

1. 下载aarch64类型的gcc

在Linaro官网中下载GCC交叉编译工具链,飞凌嵌入式OK3568-C开发板采用的是64位的Cortex-A55内核,需要使用aarch64-linux-gnu。

地址:>>https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/

我下载的是这个:gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz。

然后解压:

tar-xvfgcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar

解压结果如下:

解压完成之后,可以在其下的bin目录中看到aarch64编译器:

使用这里的gcc或g++,就能交叉编译C或C++程序了。

2. 交叉编译C/C++程序测试

写一个简易的hello word的C++测试程序main.cpp:

include

int main()

{

printf("hello\n");

return 0;

}

然后使用如下指令进行编译:

export PATH=/home/xxpcb/myTest/OK3568/gcc_aarch64/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin:$PATH

aarch64-linux-gnu-g++ main.cpp -o main

第一句是临时添加环境变量,当然也可以添加到.bashrc中实现永久添加,由于每种开发板用到的编译工具链不太一样,我一般都使用这种临时添加的方式。

第二句是使用aarch64-linux-gnu-g++来编译C++程序,编译结果如下,可用使用file指令查看编译出的程序的文件类型:

可以看到,编译出的文件是ELF 64-bit LSB的可执行文件,ARM aarch64架构的。

然后将程序放到飞凌嵌入式OK3568-C开发板中运行,这里使用ADB拷贝程序。可以看到在下图右侧窗口中看到,在OK3568-C开发板中已成功运行hello word程序。

3. 关于开发板的WiFi自动联网

想要给开发板传输文件,就需要先连上网络。在上篇《发烧友实测 | OK3568-C开发板初体验》中介绍过,OK3568-C开发板使用一个脚本来进行WiFi配网,但每次开机后都需要再配置。可以写个脚本加入到开机自启动程序中。

例如,在/etc/init.d目录下,添加一个S99myinit文件,写入如下内容即可实现开机自动连网:

#!/bin/sh

fltest_wifi.sh -i mlan0 -s "wifi_name" -p wifi_password

这里注意要替换为自己的WiFi名和密码,并且要给这个文件可执行权限。

二、RK3568 Linux源码编译

刚才介绍了只进行C/C++程序开发时进行交叉编译环境配置的方法。如果还要进行Qt开发,可以通过编译RK3568 Linux源码的方式,得到Qt的交叉编译工具链。由于我这里已经安装过了VirtualBox虚拟机和Ubuntu18系统,那就在自己的开发环境中进行RK3568的开发吧。

1. 基础环境配置

在进行RK3568的源码编译之前,需要先进行对自己的虚拟机进行一些依赖包的安装,如下。首先是安装一些必要的库:

sudo apt-get update sudo apt-get install build-essential

sudo apt-get install libncurses*

sudo apt-get install lzop

sudo apt-get install net-tools

然后还有安装一些编译OK3568 Linux源码所需的库:

sudo apt-get update

sudo apt-get install openssh-server vim git fakeroot

sudo apt-get install repo git ssh make gcc libssl-dev liblz4-tool expect g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib unzip device-tree-compiler python-pip libncurses5-dev

此外,为了便于Qt开发,可选择安装Linux版的Qt Creator到自己的虚拟机中,安装过程也比较简单,并且我之前已经安装过了,这里就不过多介绍了。当然,不安装Qt Creator也是可以进行Qt程序的编译的,只要有Qt交叉编译环境即可。

2. 准备RK3568源码

cat OK3568-linux-source.tar.bz2.a* > OK3568-linux-source.tar.bz2

tar -xvf OK3568-linux-source.tar.bz2

第一句是把.aa和.ab两个压缩包合并为一个压缩包,有个两个文件都差不多4G大小,这个合并的过程需要一点时间(大概2、3分钟左右),并且合并过程没有信息打印,命令行为不可输入状态,等变为可输入状态,即合并完成,并且在虚拟机上可看到合并后的压缩包。

第二句是把合并后的压缩包进行解压,这个解压过程也要一点时间(大概20分钟左右),解压过程会有信息打印。

解压完成后,可以看到OK3568-Linux的源码文件夹:

3. 编译RK3568源码

在编译之前,需要确保自己的虚拟机有足够的磁盘空间和内存空间,我的虚拟机配置如下,我的笔记本一共12G内存,我给了虚拟机10G。

注意上图中的硬盘空间,只是这个虚拟机的最大空间,需要在ubuntu中使用df指令确认下实际的大小,如果不够大,可以使用GParted等软件调整自己的虚拟机硬盘空间。

如下图所示,我的ubuntu的硬盘现在总共是276G,这个截图是我编译完源码后截的图,感觉整个编译源码操作,耗费了有几十个G的空间,现在还剩余80G的空间可用。

3.1 全编译测试

进入到刚才解压后的RK3568源码目录,通过运行.build.sh脚本即可编译,在编译之前,可以先来看下脚本中的内容:

这里编译脚本比较长,截取部分图如下:

执行脚本后会先出现一个选项需要选择,选择1,即使用OK3568的配置。

编译一段时间后(大概10分钟)会弹出下图界面,需要选择,提取图中信息:

VCCIO4 和 VCCIO6 选择 1800000

其余的选择 3300000

使用上下方向按键选择选项,按回车确认选择即可。

编译的过程中,会十分耗费内存资源,我的电脑显示在编译过程中,内存基本占满了,再使用其它软件都会特别的卡,所以在编译的时候,就不用进行其它操作了,让它独自编译好了。

整个编译时间较长,我的电脑用了7、8个小时才编译完,从凌晨编译到天亮,还好没报错。编译成功后的截图如下,注意大片的红色部分不是错误信息,只是在提醒电源域的配置是否正确。

编译成功后,会在IMAGE文件夹下生成对应编译工程结果文件,这些文件中,update.img为打包好用于OTG或TF卡全烧写使用,其它的编译文件用于分步烧写时使用。

3.2 内核单独编译测试

整个编译程序,十分的耗时,有时如果只是修改了内核代码,可以单独编译内核,编译方法是,在执行脚本时,指定一个kernel参数即可:

./build.sh kernel

三、Qt程序交叉编译测试

1. Qt程序交叉编译

RK3568 Linux源码编译完成后,可以到output目录下的bin目录中查看编译出的交叉编译工具,对应Qt开发,需要注意是qmake这个工具,bin目录中的所有编译工具如下:

使用资料中的Qt程序进行交叉编译测试,我使用的是qcamera这里例程,将程序源码复制到Ubuntu中,然后使用如下指令进行Qt程序的交叉编译:

export PATH=/home/xxpcb/myTest/OK3568/sourcecode/OK3568-linux-source/buildroot/output/OK3568/host/bin:$PATH

/home/xxpcb/myTest/OK3568/sourcecode/OK3568-linux-source/buildroot/output/OK3568/host/bin/qmake

make

第一句是临时添加环境变量;

第二句是使用RK3568源码编译结果中的qmak来生成Makefile;

第三句是使用make来编译;

编译结果如下,同样可以使用fie指令来确认编译出的可执行文件的文件类型。

可以看到,编译出的fltest_qt_qcamera文件也是ELF 64-bit LSB的可执行文件,ARM aarch64架构的。

2. Qt程序运行测试

同样使用ADB的方式,将可执行程序拷贝到板子中,然后运行,运行结果如下,注意我在qt程序中稍微修改了一下,给Exit字符串加了一个中括号,以确认板子中运行的就是我自己编译出的Qt程序。

至此,Qt的交叉编译环境已验证可正常使用。



相关产品 >

  • FET3568-C核心板

    RK3568性能强而稳 国产芯|飞凌嵌入式RK3568系列核心板,采用瑞芯微国产高性能AI处理器RK3568设计生产,RK3568兼具CPU、GPU、NPU、VPU于一身,RK3568 性能、性价比在同类产品中具有较高优势,RK3568处理器是一款定位中高端的通用型SoC, 飞凌RK3568核心板主要面向工业互联网、HMI、NVR存储、车载中控、工业网关等领域。目前RK3568系列已经批量稳定出货

    了解详情
    FET3568-C核心板
  • OK3568-C开发板

    强而稳,国产芯,1Tops算力,多路高速接口|飞凌RK3568系列RK3568开发板基于国产工业级AI处理器RK3568四核64位Cortex-A55 处理器设计。RK3568作为国产化高性能处理器,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,瑞芯微RK3568芯片是一款定位中高端的通用型SoC,NPU达到1Tops,飞凌RK3568系列核心板提供瑞芯微RK3568规格书_datasheet_数据手册_原理图等,


    了解详情
    OK3568-C开发板

推荐阅读 换一批 换一批