正点原子RK3588开发板ATK-DLRK3588支持多种屏幕,支持正点原子店铺售卖的5.5寸720x1280、5.5寸1080x1920以及10.1寸800x1280这三款MIPI屏,同时还支持HDMI显示、DP显示;正点原子家的MIPI屏都是物理竖屏,而HDMI显示屏、DP显示屏一般都是物理横屏。
Android系统它既支持横屏显示、也支持竖屏显示,如下图所示:
本文基于正点原子RK3588开发板讲一下Android系统如何设置屏幕的显示方向。
1.相关属性介绍
介绍四个属性:
- vendor.hwc.device.primary
- vendor.hwc.device.extend
- persist.sys.rotation.efull-n(n是一个数字,譬如1、2、3)
- persist.sys.rotation.einit-n(n是一个数字,譬如1、2、3)
vendor.hwc.device.primary
该属性用于设置主屏,譬如:
- vendor.hwc.device.primary=DSI #设置MIPI屏为主屏
- vendor.hwc.device.primary=HDMI-A #设置HDMI显示屏为主屏
- vendor.hwc.device.primary=LVDS #设置LVDS屏为主屏
- vendor.hwc.device.primary=eDP #设置eDP显示屏为主屏
- vendor.hwc.device.primary=DP #设置DP显示屏为主屏
备注:主屏通常只有一个、而副屏可以有多个,若系统只有一个逻辑屏,该屏便是逻辑主屏(对应物理主屏)。
vendor.hwc.device.extend
该属性用于设置副屏,譬如:
- vendor.hwc.device.extend=DSI #设置MIPI屏为副屏
- vendor.hwc.device.extend=HDMI-A #设置HDMI显示屏为副屏
- vendor.hwc.device.extend=LVDS #设置LVDS屏为副屏
- vendor.hwc.device.extend=eDP #设置eDP屏为副屏
- vendor.hwc.device.extend=DP #设置DP显示屏为副屏
- vendor.hwc.device.extend=DSI,HDMI-A #设置MIPI屏和HDMI显示屏为副屏
正点原子提供的Android SDK,主屏默认为MIPI屏、副屏默认为HDMI显示屏和DP显示屏,用户可根据自己的实际需求进行更改,打开device/rockchip/rk3588/ATK_DLRK3588/ATK_DLRK3588.mk文件:
vi device/rockchip/rk3588/ATK_DLRK3588/ATK_DLRK3588.mk
persist.sys.rotation.einit-n(n=1、2、3、….)
该属性用于设置副屏(副屏1、副屏2等)的显示方向,可取值为0/1/2/3,分别表示将副屏显示方向旋转(顺时针)0度、90度、180度、270度,如下图所示:
persist.sys.rotation.efull-n(n=1、2、3、….)
该属性用于设置副屏(副屏1、副屏2等)是否全屏显示,可取值为false和true,如下图所示:
2.主屏显示方向
主屏的显示方向可通过SF_PRIMARY_DISPLAY_ORIENTATION变量控制,该变量可取值为0、90、180、270,分别表示将主屏显示方向旋转(顺时针旋转)0度、90度、180度以及270度。
打开device/rockchip/rk3588/ATK_DLRK3588/BoardConfig.mk文件:
vi device/rockchip/rk3588/ATK_DLRK3588/BoardConfig.mk
如果我们要将主屏的显示方向旋转90度,可以在该文件末尾添加如下内容:
SF_PRIMARY_DISPLAY_ORIENTATION := 90 #旋转90度
修改完成后,保存退出,在SDK根目录下执行如下命令重新编译Android源码:
source build/envsetup.sh
lunch ATK_DLRK3588-userdebug
./build.sh -A -J10
将编译生成的super.img烧录到开发板上,然后上电启动开发板,进入Android系统后会发现mipi屏(本例中mipi屏为主屏)由竖屏显示变成了横屏显示,如下所示:
3.副屏显示方向
副屏的显示方向可通过persist.sys.rotation.einit-n(n=1、2、3、….)属性控制,第1小节中已经介绍了。我们以MIPI主屏、HDMI副屏为例,如果要将HDMI屏的显示方向旋转90度、并且HDMI屏图像参考MIPI屏的宽高比进行缩放(也就是不强制HDMI全屏显示);要实现这种需求,可以在device/rockchip/rk3588/ATK_DLRK3588/ATK_DLRK3588.mk文件中添加如下内容:
PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.primary=DSI
PRODUCT_PROPERTY_OVERRIDES += vendor.hwc.device.extend=HDMI-A
PRODUCT_PROPERTY_OVERRIDES += persist.sys.rotation.einit-1=1
PRODUCT_PROPERTY_OVERRIDES += persist.sys.rotation.efull-1=false
修改完成后,保存退出,在SDK根目录下执行如下命令重新编译Android源码:
source build/envsetup.sh
lunch ATK_DLRK3588-userdebug
./build.sh -A -J10
将编译生成的super.img烧录到开发板上,然后上电启动开发板,连接HDMI显示器,进入Android系统后会发现HDMI屏显示方向旋转了90度,如下所示:
4.recovery模式下屏幕的显示方向
Recovery模式下屏幕的显示方向可通过TARGET_RECOVERY_DEFAULT_ROTATION变量控制,该变量可取值为:ROTATION_NONE、ROTATION_RIGHT、ROTATION_DOWN、ROTATION_LEFT,分别表示recovery模式下屏幕显示方向将旋转0度、90度、180度、270度。
打开device/rockchip/rk3588/ATK_DLRK3588/BoardConfig.mk文件,然后添加如下内容:
TARGET_RECOVERY_DEFAULT_ROTATION := ROTATION_RIGHT #旋转90度
修改完成后,保存退出,在SDK根目录下执行如下命令重新编译Android源码:
source build/envsetup.sh
lunch ATK_DLRK3588-userdebug
./build.sh -A -J10
将编译生成的recovery.img和misc.img烧录到开发板上,烧录完成会自动重启进入recovery模式(烧录misc.img首次启动将进入recovery模式),此时会发现屏幕显示方向旋转了90度,如下图所示: