这次体验的硬件平台是来自飞凌嵌入式的OK3588-C开发板,该开发板基于Rockchip新一代旗舰 RK3588处理器开发,采用核心板+底板的分体式设计,将FET3588-C核心板的全部功能引脚以最便利的方式引出,并针对不同的功能做了深度优化,方便用户二次开发的同时简化用户设计。
我所使用的FET3588-C核心板主要规格参数如下:
本次开发选择的是Linux操作系统,rockchip公司提供了rk3588平台的Linux系统开发SDK,这个SDK包括了U-Boot开发,Kernel开发,Recovery开发,根文件系统开发(包括Buildroot或Yocoto构建组件)以及基于Linux应用开发的相关指导,具体可以参考Rockchip公司提供的《Rockchip_Developer_Guide_Linux_Software》开发文档。
同时飞凌电子针对OK3588开发板对Rockchip公司提供的SDK进行了相应的定制和优化,使购买开发板的用户能够更快的构建和移植Linux系统并在基于Linux系统进行应用开发。具体可以参考飞凌电子提供的《OK3588-C_Linux_用户编译手册》开发文档。
由于飞凌电子已经做好了Linux系统相关的定制和移植,因此我们只需要在提供的官方SDK上根据自身的需要进行相关的应用开发即可。根据飞凌电子的开发文档,我们有两种方式可以进行Linux系统上的应用开发:
显然对于个人项目或者应用开发调试阶段,使用第一种方式较为便捷快速,但如果是实际的批量产品开发则是第二种方式更合理。
这里主要介绍给予buildroot进行Linux根文件系统的制作过程。
Buildroot 是 Linux 平台上一个构建嵌入式 Linux 系统的框架。整个 Buildroot 是由 Makefile 脚本和 Kconfig 配置文件构成的。你可以和编译 Linux 内核一样,通过 buildroot 配置,menuconfig 修改,编译出一个完整的可以直接烧写到机器上运行的 Linux 系统软件 (包含 boot、kernel、rootfs 以及 rootfs 中的各种库和应用程序)。
在飞凌电子提供的开发SDK中已经包含了buildroot构建工具,我们可以直接到该目录下看一下buildroot构建工具的主要目录结构:
build.sh是官方提供的一个自动构建的脚本,我们可以直接help看一下提供的相关命令如下图所示:
这里我们首先将构建环境切换到OK3588平台的buildroot构建,通过输入./build.sh lunch命令,会自动列出所有支持的板级配置,我们选择2即可。
继续在sdk目录下输入 source envsetup.sh命令,这时又会自动列出支持的各种环境配置,我们输入140选择OK3588环境。
这里我用qt写了一个简单的"hello world"的demo程序, 我将这个工程源文件放在与buildroot同级的app目录下。然后我们需要在buildroot的package目录下添加我们的hello world demo工程的配置文件,在package目录新建hello_world_demo文件夹,并在其中添加两个文件:Config.in 和hello_wolrd_demo.mk.
Config.in:
config BR2_HELLO_WORLD_DEMO
bool "hello world"
depends on BR2_PACKAGE_QT5
help
hello world demo application based on QT
hello_world_demo.mk
HELLO_WORLD_DEMO_VERSION = 1.0
HELLO_WORLD_DEMO_SITE = $(TOPDIR)/../app/hello_world_demo
HELLO_WORLD_DEMO_SITE_METHOD= local
HELLO_WORLD_DEMO_LICENSE = none
HELLO_WORLD_DEMO_LICENSE_FILES = LICENSE
# TODO: Add install rules in .pro
define HELLO_WORLD_DEMO_INSTALL_TARGET_CMDS
mkdir -p $(TARGET_DIR)/usr/share/applications $(TARGET_DIR)/usr/share/icon
$(INSTALL) -D -m 0644 $(@D)/icon_player.png $(TARGET_DIR)/usr/share/icon/
$(INSTALL) -D -m 0755 $(@D)/hello_world_demo $(TARGET_DIR)/usr/bin/
$(INSTALL) -D -m 0755 $(@D)/hello_world.desktop $(TARGET_DIR)/usr/share/applications/
endef
$(eval $(qmake-package))
然后还要在package目录下的Config.in文件中包含我们刚刚编写的hello_world_demo的Config.in。我们可以打开package下的Config.in 文件,然后在合适的位置添加source “package/hello_world_demo/Config.in”
在buildroot目录下,输入命令make menuconfig 打开编译选项,找到刚刚添加的hello_world_demo 工程的编译配置选项,选择打开该选项,然后保存配置。
在buildroot目录下输入make 命令开始整个根文件系统的构建。
make -j8
如果是第一次进行完整的文件系统编译,可能会等待较长时间,这里耐心等待即可。由于官方给的build.sh构建脚本是用的linuxfs文件夹下的文件系统镜像,所以将buildroot构建的根文件系统复制到linuxfs 文件夹下。
cp ./output/OK3588/images/rootfs.ext4 ../linuxfs/rootfs.img
退回到buildroot的上层目录,运行sudo ./build.sh 命令
构建完成后会提示构建成功。
将系统镜像烧写到开发板中,我这里直接用的linux下的烧写工具,我在sdk的目录下创建的一个软链接
具体的烧写过程是,将板子的TypeC0口和PC的USB口连接,然后按住Recovery按键的同时,按下Reset按键,送开reset按键几秒后再松开Recovery按键,这样板子就进入了镜像烧写模式。这时在命令行输入如下命令:
sudo ./linux_upgrade_tool uf ./rockdev/update.img
就开始进行镜像的烧录,烧录完成后如下图所示,会出现Upgrade firmware ok提示,然后开发板会自动重启进入Linux系统。
由于没有写hello_world的桌面快捷方式配置,所以系统桌面上没有我们编写的hello_world软件的入口。我们打开系统的终端,直接通过命令行的方式运行我们写的hello_world_demo程序,如下图所示:
hello_world_demo应用程序运行成功后,就会出现一个简单的应用界面,如下图所示:
点击hello world按钮后会播放一段动画,应用程序工作正常。
本文基于飞凌嵌入式的OK3588-C开发板,完成了Linux系统的配置,编译,并写了一个简单的demo应用程序,通过buildroot将该应用程序固化到系统镜像中。最后通过烧写系统镜像,验证了编写的应用程序在Linux系统下正常运行。
从整个过程我们可以发现,关于Linux系统的配置和移植厂家提供的sdk已经做了充分的定制和优化,我们需要做的不多,可能需要根据使用的外设做一定的配置即可。这样可以让我们专注于应用层的开发,而且将应用程序固化到系统镜像的过程也非常简单。考虑到RK3588非常不错的性能以及OK3588开发板上丰富的外设,在这套硬件平台上可以完成非常多的产品原型验证和设计工作。