11. GCC编译程序#

11.1. 板卡GCC编译编译链#

本章配套视频介绍:

../../_images/video.png

《20-在鲁班猫上使用GCC编译程序》

https://www.bilibili.com/video/BV1wc411P752/

1#获取仓库
2git clone https://gitee.com/LubanCat/lubancat_rk_code_storage.git
3
4#代码所在的位置
5lubancat_rk_code_storage/quick_start/hello

早期因为处理器芯片性能不够,存储空间不多以及编译性能不够等因素, 早期的开发板普遍采用交叉编译的方式, 而交叉编译的方式会有几种缺点: 不能离线编译, 操作麻烦, 环境配置复杂等

LubanCat-RK系列的处理器性能强悍,在开发板上自行编译程序的时间会很快,因此 ,我们推荐直接使用板上集成的GCC软件进行编译, 从此可以减少大量的时间在文件的传输上。

LubanCat-RK系列自带GCC编译器,我们可以使用下面的命令去查看GCC版本

1#查看gcc命令
2gcc -v
3
4#查看gcc的安装路径
5which gcc
6
7#如果没有gcc,下载安装
8sudo apt update
9sudo apt install gcc -y

例如Debian12的系统自带的gcc版本如下:

 1#查看gcc命令
 2gcc -v
 3
 4#信息输出如下
 5Using built-in specs.
 6COLLECT_GCC=/usr/bin/gcc
 7COLLECT_LTO_WRAPPER=/usr/lib/gcc/aarch64-linux-gnu/12/lto-wrapper
 8Target: aarch64-linux-gnu
 9Configured with: ../src/configure -v --with-pkgversion='Debian 12.2.0-14' --with-bugurl=file:///usr/share/doc/gcc-12/README.Bugs
10--enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-12
11--program-prefix=aarch64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext
12--enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes
13--with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --disable-libquadmath-support --enable-plugin
14--enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto
15--enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checking=release --build=aarch64-linux-gnu
16--host=aarch64-linux-gnu --target=aarch64-linux-gnu
17Thread model: posix
18Supported LTO compression algorithms: zlib zstd
19gcc version 12.2.0 (Debian 12.2.0-14)

gcc的版本为12.2.0,gcc的版本号可能会因为镜像以及系统的不同而不同,但是不影响编译。

11.2. 交叉编译工具链#

SDK源码包可以从“资料网盘/8-SDK源码压缩包及虚拟机”中获取,SDK包中带有交叉编译工具链,路径为:

 1#rk3576的SDK源码包中的交叉编译工具
 2SDK源码/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-
 3
 4#查看版本
 5SDK源码/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc -v
 6#信息输出如下
 7Using built-in specs.
 8COLLECT_GCC=prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc
 9COLLECT_LTO_WRAPPER=/home/guest/LubanCat_Linux_rk3576_SDK/prebuilts/gcc/linux-x86/aarch64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/../libexec/gcc/aarch64-none-linux-gnu/10.3.1/lto-wrapper
10Target: aarch64-none-linux-gnu
11Configured with: /data/jenkins/workspace/GNU-toolchain/arm-10/src/gcc/configure --target=aarch64-none-linux-gnu --prefix=
12--with-sysroot=/aarch64-none-linux-gnu/libc --with-build-sysroot=/data/jenkins/workspace/GNU-toolchain/arm-10/build-aarch64-none-linux-gnu/install//aarch64-none-linux-gnu/libc
13--with-bugurl=https://bugs.linaro.org/ --enable-gnu-indirect-function --enable-shared --disable-libssp --disable-libmudflap --enable-checking=release --enable-languages=c,c++,fortran
14--with-gmp=/data/jenkins/workspace/GNU-toolchain/arm-10/build-aarch64-none-linux-gnu/host-tools --with-mpfr=/data/jenkins/workspace/GNU-toolchain/arm-10/build-aarch64-none-linux-gnu/host-tools
15--with-mpc=/data/jenkins/workspace/GNU-toolchain/arm-10/build-aarch64-none-linux-gnu/host-tools --with-isl=/data/jenkins/workspace/GNU-toolchain/arm-10/build-aarch64-none-linux-gnu/host-tools
16--enable-fix-cortex-a53-843419 --with-pkgversion='GNU Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29)'
17Thread model: posix
18Supported LTO compression algorithms: zlib
19gcc version 10.3.1 20210621 (GNU Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29))

版本为10.3.1,后续步骤如果想要交叉编译可将gcc编译链换成以上aarch64-none-linux-gnu-gcc编译工具链,不作重复说明。

11.3. Hello World!#

本次教程会让lubancat向现实世界发出愉悦的咆哮

代码位置#
1quick_start/hello/hello.c

代码:

quick_start/hello/hello.c#
1#include <stdio.h>
2
3int main(void)
4{
5        printf("Hello World!\n");
6        printf("meow!\n");
7        return 0;
8}

源码 hello.c

 1 #使用vi创建hello.c文件
 2 vi hello.c
 3
 4 #键盘敲入'i'或'a'进入编辑模式
 5 #复制代码到vim编辑器里
 6 #键盘敲入'Esc'键
 7 #然后敲入":wq" 保存并退出
 8
 9 #也可以直接把源码下载到板卡上,然后进行编译
10 #输入命令编译
11 gcc -o hello hello.c
12
13 #执行程序
14 ./hello

如下图:

未找到图片

lubancat发出了它愉悦的咆哮

11.4. vscode便捷调试开发#

除了直接在板卡上进行调试或者编译,这里我们提供一种更方便开发调试的方法, 就是使用vscode SSH远程登录lubancat,然后对鲁班猫进行二次开发。

本文章是基于 《SSH登录》

如果不能实现SSH登录的话,下面的vscode远程开发就无法正常使用。

11.4.1. 配置环境#

首先得配置环境,如果在配置环境中,设置了静态IP以及免密码登录,那么在后面的开发中, 就可以实现快速连接,快速开发,开发效率会极大的提高。

11.4.1.1. vscode使用#

vscode下载官网 《vscode官网》

vscode新手教程: https://blog.csdn.net/weixin_52212950/article/details/124693906

11.4.1.2. 查看lubancat IP地址#

1#执行命令,查看IP
2ifconfig

如下图

未找到图片

192.168.103.156为lubancat的IP地址

11.4.1.3. vscode连接板卡#

在连接板卡前,要先确认网络是可以在板卡和主机间是可以畅通的, 我们可以在pc上打开命令提示符或者power shell

1 #ping板卡
2 ping ip
3 #IP地址填板卡的ip地址

如下图

未找到图片

板卡和主机之间是能够正常进行网络通信

然后我们需要打开安装好的vscode,配置完基础操作后,点击左侧的扩展, 下载Remote-SSH插件

如下图:

未找到图片

安装完成后就可以用SSH远程连接板卡了

如下图:

未找到图片

然后在正上方会出现让我们填写的内容,我们填写

1 #192.168.xxx.xxx为板卡的IP地址
2 ssh cat@192.168.xxx.xxx
3
4 #按enter键进入
5
6 #然后选择第一个保存配置

注意

除了直接通过ip地址进行ssh连接,我们还可以通过hostname来连接板卡, 如果你的板卡与电脑连接在同一个局域网内,且局域网内的lubancat板卡仅有一台, 则可以使用下列命令进行连接

1ssh cat@lubancat

打开板卡, 如下图

未找到图片

然后,vscode会让你选择linux,Windows,mac,我们选择Linux

如果需要输入密码,就输入密码

如果是第一次登录的话,vscode会询问登录,我们在终端里输入yes

未找到图片

然后就可以通过打开文件夹来选择你要打开的项目,或者其他。

11.4.1.4. 免密登录#

如果你觉得使用vscode每次都需要登录很麻烦,你可以使用以下方法来解决

1#打开PC的命令提示符或者power shell
2#输入
3ssh-keygen -t rsa
4
5#然后连续回车直到结束
6
7#找到.ssh这个文件夹,打开id_rsa_pub这个文件

如下图

未找到图片

可以用记事本打开,打开后把里面的内容复制好。

1#连接板卡
2#以cat用户登录
3#在命令行上输入
4
5ssh-keygen -t rsa
6
7#然后连续回车直到结束
8#可以看到/home/cat目录下会有.ssh文件夹
未找到图片

然后进入该文件夹,就可以看到生成的公钥和私钥

未找到图片
1#然后我们可以创建一个文件authorized_keys
2vi authorized_keys
3
4#把刚刚从记事本上复制的内容粘贴到里面,然后保存退出

以上就是免登录的操作了。

本文部分参考自:https://blog.csdn.net/qq_44571245/article/details/123031276

如果对本文操作感到疑惑的可以参考上文

11.4.1.5. 连接板卡#

未找到图片

功能介绍,如下图

未找到图片

执行编译和执行操作

未找到图片

以上内容就是使用vscode便捷开发的教程, 类似的操作不限于C语言,C++,python,java,go等均可在vscode里寻找到相应的插件辅助您开发。