1. 编译
1.1 交叉编译环境
rk3568其交叉编译工具位于buildroot/output/rockchip_rk3368/host/usr
目录下,需要将工具的bin/目录aarch64-buildroot-linux-gnu/bin/ 目录设为环境变量。
执行source envsetup.sh
选择目标版本,针对芯片为rk3568
来说选择63
。编译脚本是sdk目录下的build.sh
查看交叉编译工具版本:
cd buildroot/output/rockchip_rk3568/host/usr/bin
./aarch64-linux-gcc --version
1.1.1 配置文件说明
打包文件package-file,目录在tools/linux/Linux_Pack_Firmware/rockdev
编译配置文件BoardConfig.mk,目录在device/rockchip/rk356x
镜像生成路径在sdk目录下rockdev目录
打包成update.img,需在sdk目录下执行./build.sh updateimg
1.2文件系统编译
以buildroot为例,在buildroot同级目录下执行./build.sh rootfs命令进行整体编译文件系统,编译完成之后会在buildroot/output/rockchip_rk3568/images
下生成所需的文件系统,例如rootfs.ext4
rootfs.squashfs
等。
2. 文件系统制作
2.1 QT移植与文件系统
在sdk的buildroot/configs 目录下,sdk 所 支 持 平 台 相关的 配 置 文 件rockchip_rk3568_defconfig
或者在 buildroot/configs/rockchip
目录下有 qt 所支持的相关配置 display.conf
和 qt.conf
等
(1)在buildroot/output/rockchip_rk3568
进行配置,通过make menuconfig
来进行对应需求配置,或者先使用上述./build.sh rootfs命令编译完看缺少哪些东西再进行配置。
配置界面主要选项:
Target options
选项:执行source envsetup.sh选择对应版本后系统会自己填写cpu相关的参数信息。
Toolchain
选项:buildroot所支持的工具链。
System configuration
选项:系统欢迎语,包括密码设置,时区设置等
Target packages
选项:第三方的开源工具的软件,例如字体库,qt图形界面所需要的,如果需要把工具软件集成到固件,需要在此选项中进行配置。
Filesystem images
选项:选择生成文件系统镜像的格式,例如ext4,squashfs,jffs2
等
(2)直接添加配置宏选项,在buildroot/output/rockchip_rk3568
目录下.conf或者rk3568所支持的rockchip_rk3568_defconfig
在文件中直接添加即可,最后执行编译文件系统命令。
2.1.1 qt编译支持方式
对于qt支持有两种方式,第一种根据sdk来配置相关qt所支持的库,第二种根据qt源码编译出qt所支持的库,在这里建议使用第一种方式。
上述图片是qt5.9版本的配置界面,需要哪种配置选中即可,之后在buildroot同级目录下编译即可。
插件支持:qt系统所支持的插件有eglfs,xcb,linuxfb,wayland
等,根据项目所需要显示支持的插件选择,需注意eglfs和xcb是基于x11系统框架的,需要在图形界面中 Target packages → Rockchip BSP packages
下面有显示platform支持,默认为Wayland,如需要eglfs显示支持需要改成x11支持。
(2)qt版本的变更,如果目前使用的版本为qt5.9需要变更为其他qt版本等相关配置时,需要修改qt相关的配置文件,在buildroot/package/qt5/qt5.mk
中修改,修改完成后需要重新清掉之前qt版本编译的东西避免再次编译出错。
2.1.2 qt5环境变量声明
在qt所支持的图形界面中采用tslib校准方式来校准。tslib相关宏支持,可在配置文件中添加,或者通过make menuconfig图形界面来配置,相关宏选项如下所示:
BR2_PACKAGE_QT5BASE_TSLIB=y
BR2_PACKAGE_TSLIB=y
tslib相关命令介绍:
ts_calibrate:进行5点校准。
ts_test:进行画线测试。
对于tslib相关的东西移植进系统后和qt配合,需要声明环境变量,相关配置如下:
/* 开启qt程序debug */
export QT_DEBUG_PLUGINS=1
export QT_LOGGING_RULES=qt.qpa.input=true
/*tslib需要的配置*/
export DISPLAY=:0
export TSLIB_TSDEVICE=/dev/input/event2 /*event2为触摸节点*/
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export LD_LIBRARY_PATH=/usr/lib
export TSLIB_PLUGINDIR=/usr/lib/ts/
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export QT_QPA_FB_NO_LIBINPUT=1
export QT_QPA_FB_TSLIB=1
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event2
/*qt运行程序需要的配置*/
export QT_QPA_PLATFORM_PLUGIN_PATH=$LD_LIBRARY_PATH/qt/plugins/platforms
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=1024x768:offset=0x0
export QT_PLUGIN_PATH=$LD_LIBRARY_PATH/qt/plugins
export QT_QPA_FONTDIR=/etc/fonts
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/event2:rotate=0