【Semidrive X9HP】在 X9HP AP2 中搭建 wayland 环境

本篇博文介绍如何在 X9HP 平台的 AP2 域中搭建 wayland 运行环境,软件版本是 X9 PTG4.0,硬件环境是 X9H 开发板 X9H_REF_A04。

一、思路分析

1. 本次使用的 lunch_config 是 X9HP_Ref_Isolation_Android_Linux_Serdes_8G_3200.json,该 lunch 的 Linux 系统默认是编译 cluster-qt 这个 distro 配置的,所以需要先修改 json 里指定的 distro。
2. 由于更换成了 wayland 环境,所以 AP2 本来的 cluster 应用会运行失败,需要把它关闭。
3. wayland.conf 这个 distro 原本是适用于 Native_Linux 的,Native_Linux 的 ram_disk 空间要比充当 AP2 的 Linux 大不少,所以我们需要适当减少一些不必要的库和应用,否则编译出来的系统会超出 AP2 的 ram_disk,导致启动失败。
4. wayland 需要输入设备才能运行,因此要在 Kernel 中添加输入设备的编译。

二、详细修改

1. 在 yocto/meta_semidrive/distro/wayland.conf 中添加 wayland 以及相关库的编译,在 yocto/meta_semidrive/machine/x9hp_ref_cluster.conf 中去掉默认的 cluster 应用。
--- a/conf/distro/wayland.conf
+++ b/conf/distro/wayland.conf
@@ -11,46 +11,57 @@ DISTRO_VERSION = "1.0"
#PREFERRED_VERSION_meson = "0.53.2"

# Remove conflicting backends.
-DISTRO_FEATURES_remove = "x11 directfb vulkan "
-DISTRO_FEATURES_append = " opengl bluetooth bluez5 wifi wayland systemd"
-VIRTUAL-RUNTIME_init_manager = "systemd"
+DISTRO_FEATURES_remove = "x11 directfb vulkan linux-libc-headers usbhost pci libvulkan "
+DISTRO_FEATURES_append = " opengl bluez5 wayland"
+#VIRTUAL-RUNTIME_init_manager = "systemd"

IMAGE_INSTALL_append = " \
- rpmsg-echo-test \
- libdrm-tests \
- stressapptest \
sdrvinit sdrvadb \
audio-ref alsa-lib alsa-utils alsa-state alsa-plugins \
am-plugin \
cluster-demo \
- csi-test \
- vdsp-avm \
- e2fsprogs \
- sdshell \
nfs-utils \
libgpiod"
+
+IMAGE_INSTALL_remove = " \
+ pvr-lib-mesa-tests \
+ libvulkan "

-CORE_IMAGE_EXTRA_INSTALL += "wayland mtdev libevdev libinput libxkbcommon weston weston-examples libvulkan pvr-lib-mesa-tests "
+CORE_IMAGE_EXTRA_INSTALL += "wayland libxkbcommon weston pvr-lib-mesa "

# gstreamer and vpu , specify gstreamer version as 1.14.4
IMAGE_INSTALL_append = " gstreamer1.0 gstreamer1.0-libav gstreamer1.0-plugins-base \
gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-omx libomxil libomxvpu libvpu vputest "

-#IMAGE_INSTALL_append = " ffmpeg gstreamer1.0 libomxil libomxvpu libvpu gstreamertest "
+IMAGE_INSTALL_append = " "
PREFERRED_VERSION_gstreamer1.0 = "1.14.4"
PREFERRED_VERSION_ffmpeg = "4.2.2"
PREFERRED_VERSION_openssl = "1.0.2p"

-LICENSE_FLAGS_WHITELIST = "commercial_libomxil commercial_gstreamer1.0-omx commercial_gstreamer1.0-libav commercial_ffmpeg commercial_x264"
+LICENSE_FLAGS_WHITELIST = " "

-IMAGE_INSTALL_append = " bluez5 sdrvbtwifi wpa-supplicant optee-file"
+IMAGE_INSTALL_append = " bluez5 optee-file"

-IMAGE_FEATURES += "ssh-server-openssh"
+#IMAGE_FEATURES += "ssh-server-openssh"

-EXTRA_IMAGE_FEATURES += "\
- tools-debug \
- dev-pkgs \
- debug-tweaks"
+#EXTRA_IMAGE_FEATURES += "\
+# tools-debug \
+# dev-pkgs \
+# debug-tweaks"
+
+## below is example of recipe-specific debug control variables, add in recipe bb file.
+# Specifies recies to build packages with debugging information
+#DEBUG_BUILD = "1"
+# Do not remove debug symbols
+#INHIBIT_PACKAGE_STRIP = "1"
+# OPTIONAL: Do not split debug symbols in a separate file
+#INHIBIT_PACKAGE_DEBUG_SPLIT= "1"
+#PACKAGE_DEBUG_SPLIT_STYLE = 'debug-file-directory'
+
+PREFERRED_VERSION_openssl = "1.1.1k"
+
+INHERIT += "extrausers"
+EXTRA_USERS_PARAMS = "useradd -P 000000 user1;"

# Don't include kernels in standard images
## RDEPENDS_kernel-base = ""
@@ -63,6 +74,6 @@ PREFERRED_PROVIDER_virtual/egl = "mesa"
PREFERRED_PROVIDER_virtual/libgbm = "mesa"


# use 2048 MB according to bpt
-IMAGE_ROOTFS_SIZE = "2097152"
+IMAGE_ROOTFS_SIZE = "262144"

GPU_VZ_CTRL = "nonvz"

diff --git a/conf/machine/x9hp_ref_cluster.conf b/conf/machine/x9hp_ref_cluster.conf
index 60592e9..46326d0 100644
--- a/conf/machine/x9hp_ref_cluster.conf
+++ b/conf/machine/x9hp_ref_cluster.conf
@@ -84,5 +84,5 @@ HOSTTOOLS += "sync seq"
#MACHINE_DLOADERARG_${MACHAINE_NAME} += "BOOT_TYPE=emmc"
#MACHINE_BAREMETALARG_${MACHAINE_NAME} = "BOARD=x9_plus_ref"

-IMAGE_INSTALL_append = " messagecenter cluster nfs-utils sdrvnfsmnt"
+IMAGE_INSTALL_append = " messagecenter nfs-utils sdrvnfsmnt"
IMAGE_INSTALL_append = " xinetd netkit-telnet"

2. 在 yocto 的 Kbuild 中添加 wayland demo 需要的输入设备 gpio_keys 的编译,同时在 dts 中添加 gpio_keys 节点。
--- a/arch/arm64/configs/x9_ref_cluster_defconfig
+++ b/arch/arm64/configs/x9_ref_cluster_defconfig
@@ -94,15 +94,40 @@ CONFIG_NETDEVICES=y
# CONFIG_ETHERNET is not set
# CONFIG_WLAN is not set
# CONFIG_XEN_NETDEV_FRONTEND is not set
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ADP5588=y
+CONFIG_KEYBOARD_ADP5589=y
+CONFIG_KEYBOARD_ATKBD=y
+CONFIG_KEYBOARD_QT1070=y
+CONFIG_KEYBOARD_QT2160=y
+CONFIG_KEYBOARD_DLINK_DIR685=y
+CONFIG_KEYBOARD_LKKBD=y
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_INPUT_POLLDEV=y
+CONFIG_INPUT_SPARSEKMAP=y
+CONFIG_INPUT_MATRIXKMAP=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT=y
+CONFIG_INPUT_FF_MEMLESS=y
CONFIG_RPMSG_NET=y
CONFIG_ULINK_NET=y
-CONFIG_INPUT_POLLDEV=m
-CONFIG_INPUT_MATRIXKMAP=y
CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
+CONFIG_KEYBOARD_ADC=m
+CONFIG_KEYBOARD_GPIO=y
+CONFIG_KEYBOARD_CROS_EC=y
+CONFIG_INPUT_JOYSTICK=y
+CONFIG_JOYSTICK_XPAD=y
+CONFIG_JOYSTICK_XPAD_FF=y
+CONFIG_JOYSTICK_XPAD_LEDS=y
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_GOODIX=y
+CONFIG_TOUCHSCREEN_SEMIDRIVE=y
+CONFIG_TOUCHSCREEN_DS941_DS948_GOODIX=y
+CONFIG_TOUCHSCREEN_DS927_DS928_GOODIX=y
+CONFIG_TOUCHSCREEN_DS947_DS948_GOODIX=y
CONFIG_INPUT_MISC=y
# CONFIG_SERIO_SERPORT is not set
+CONFIG_SERIO_AMBAKMI=y
--- a/arch/arm64/boot/dts/semidrive/x9_high-plus_ref_native_cluster_8g_bt.dts
+++ b/arch/arm64/boot/dts/semidrive/x9_high-plus_ref_native_cluster_8g_bt.dts
@@ -12,9 +12,10 @@
#include "x9_high-plus_ref_cluster-clk-ctrl.dtsi"
#include "lcd-timings.dtsi"
#include <dt-bindings/pinctrl/pins-sdx9.h>
-#include <dt-bindings/memmap/x9_high-plus/projects/default/image_cfg.h>
+#include <dt-bindings/memmap/x9_high-plus/projects/serdes/image_cfg.h>
#include <dt-bindings/rpmsg/sd,x9hp-ap2.h>
#include <dt-bindings/backlight/sdrv_backlight.h>
+#include <dt-bindings/input/input.h>

/ {
model = "Semidrive kunlun x9 PLUS CLUSTER REF Board";
@@ -88,6 +89,27 @@
linux,initrd-end = <(AP2_BOARD_RAMDISK_MEMBASE + AP2_BOARD_RAMDISK_MEMSIZE)>;/* 64MB */
};

+ gpio_keys {
+ compatible = "gpio-keys";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ user_button1 {
+ label = "user_button1";
+ gpios = <&port5c 8 GPIO_ACTIVE_LOW>;
+ linux,code = <116>;
+ debounce-interval = <0>;
+ };
+
+ user_button2 {
+ label = "user_button2";
+ gpios = <&port5b 8 GPIO_ACTIVE_LOW>;
+ linux,code = <117>;
+ debounce-interval = <0>;
+ };
+
+ };

三、参考文档

1. 《X9HP平台AP2仪表Wayland环境》

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论