简介
去TI官方的技术论坛搜索了很多关于为根文件系统添加x11支持的帖子,丕过都没有能给出很好的解决方案。结合公司最近的需求,即为 TI的评估板(am62xx-evm)构建能运行带GUI的java包的rootfs镜像, 必需要系统支持x11服务,分享在TI 提供的tisdk-base-image的基础上添加x11,与java的实现过程。
实现思路
实现需求的思路也很清晰明确:
- 准备一个相对干净的实验环境, 在这里指的是TI官方提供的的base image(tisdk-base-image),为了方便我们后续在平台上添加与验证各种软件包及其它特性。注意,务必先在服务器上成功构建一次,然后再做相应的实验,以减少直接去添加软件包出错后问题定位的难度。
- 在DISTRO_FEATURES 中移除wayland特性。
- 在DISTRO_FEATURES 中增加x11特性,这是运行带GUI的jar包所需要的。
- 添加meta-layer层来支持openjdk-8。
- 修改tisdk-base-image.bb,增加x11有关的软件包,xterm, xserver等,以及java软件包openjdk-8,推荐的实现是放在.bbapend中增加这些内容。
- 开始构建,出现依赖问题解决依赖。
- 将构建得到的image烧录到SD卡,启动板卡验证示例java程序是否能运行。
实现步骤
- 按官方的文档processor-sdk,使用processor-sdk-08.04.01.04-config.txt成功构建tisdk-base-image.
- 在DISTRO_FEATURES中增加x11,tisdk-base-image的配置中本身没有加入wayland,所以只需要加上x11,经过尝试,直接在local.conf中往DISTRO_FEATURES加入x11是不起作用的,它在构建过程会被优先解析,然而后面还会有文件将x11移除,有效的方式是在meta-arago/meta-arago-distro/conf/distro/arago.conf中注释这行内容:
# DISTRO_FEATURES_remove = "x11" - 添加x11后构建tisdk-base-image,会提示缺少libgl这个依赖:
ERROR: Nothing PROVIDES 'virtual/libgl' (but /home/jenkins/build/sdk/tisdk/sources/oe-core/meta/recipes-graphics/cairo/cairo_1.16.0.bb DEPENDS on or otherwise requires it)
mesa-gl PROVIDES virtual/libgl but was skipped: PREFERRED_PROVIDER_virtual/libgl set to mesa, not mesa-gl
mesa-gl PROVIDES virtual/libgl but was skipped: PREFERRED_PROVIDER_virtual/libgl set to mesa, not mesa-gl
mesa PROVIDES virtual/libgl but was skipped: PREFERRED_PROVIDER_virtual/libgles1 set to ti-sgx-ddk-um, not mesa
mesa PROVIDES virtual/libgl but was skipped: PREFERRED_PROVIDER_virtual/libgles1 set to ti-img-rogue-umlibs, not mesa
这是由于加入x11特性后meta-arago/meta-arago-distro/conf/distro/include/arago-prefs.inc文件中一些软件的PREFERRED_PROVIDER没有指定好,将egl,libgles1,libgles2,libgbm库都指定由mesa提供即可,解决方法如下:
diff --git a/meta-arago-distro/conf/distro/include/arago-prefs.inc b/meta-arago-distro/conf/distro/include/arago-prefs.inc
index f9fab020..4c462955 100644
--- a/meta-arago-distro/conf/distro/include/arago-prefs.inc
+++ b/meta-arago-distro/conf/distro/include/arago-prefs.inc
@@ -15,17 +15,17 @@ PREFERRED_PROVIDER_virtual/libgbm = "ti-sgx-ddk-um"
PREFERRED_PROVIDER_virtual/gpudriver = "ti-sgx-ddk-km"
# J7 has a Rogue GPU core
-PREFERRED_PROVIDER_virtual/egl_j7 = "ti-img-rogue-umlibs"
-PREFERRED_PROVIDER_virtual/libgles1_j7 = "ti-img-rogue-umlibs"
-PREFERRED_PROVIDER_virtual/libgles2_j7 = "ti-img-rogue-umlibs"
-PREFERRED_PROVIDER_virtual/libgbm_j7 = "ti-img-rogue-umlibs"
+PREFERRED_PROVIDER_virtual/egl_j7 = "mesa"
+PREFERRED_PROVIDER_virtual/libgles1_j7 = "mesa"
+PREFERRED_PROVIDER_virtual/libgles2_j7 = "mesa"
+PREFERRED_PROVIDER_virtual/libgbm_j7 = "mesa"
PREFERRED_PROVIDER_virtual/gpudriver_j7 = "ti-img-rogue-driver"
# am62xx has a Rogue GPU core
-PREFERRED_PROVIDER_virtual/egl_am62xx = "ti-img-rogue-umlibs"
-PREFERRED_PROVIDER_virtual/libgles1_am62xx = "ti-img-rogue-umlibs"
-PREFERRED_PROVIDER_virtual/libgles2_am62xx = "ti-img-rogue-umlibs"
-PREFERRED_PROVIDER_virtual/libgbm_am62xx = "ti-img-rogue-umlibs"
+PREFERRED_PROVIDER_virtual/egl_am62xx = "mesa"
+PREFERRED_PROVIDER_virtual/libgles1_am62xx = "mesa"
+PREFERRED_PROVIDER_virtual/libgles2_am62xx = "mesa"
+PREFERRED_PROVIDER_virtual/libgbm_am62xx = "mesa"
PREFERRED_PROVIDER_virtual/gpudriver_am62xx = "ti-img-rogue-driver"
# This is required when using keystone devices with graphical support
再次构建,会发现在cairo执行do_configure任务时报下面错误:
checking for cairo's PNG functions feature...
| checking for png... yes
| checking whether cairo's PNG functions feature could be enabled... yes
| checking for cairo's OpenGL surface backend feature...
| checking for gl... yes
| checking whether cairo's OpenGL surface backend feature could be enabled... yes
| checking for cairo's OpenGLESv2 surface backend feature...
| checking for glesv2... yes
| configure: error: use either --enable-gl=yes or --enable-glesv2=yes. Not both at the same time.
| NOTE: The following config.log files may provide further information.
| NOTE: /home/jenkins/build/sdk/tisdk/build/arago-tmp-external-arm-glibc/work/aarch64-linux/cairo/1.16.0-r0.arago1/build/config.log
| ERROR: configure failed
出错原因很明确,就是这句:
error: use either --enable-gl=yes or --enable-glesv2=yes. Not both at the same time.
只要想办法disable一项即可,在oe-core/meta/recipes-graphics/cairo/cairo_1.16.0.bb作如下修改:
diff --git a/meta/recipes-graphics/cairo/cairo_1.16.0.bb b/meta/recipes-graphics/cairo/cairo_1.16.0.bb
index 4827374ffc..41c9229c5c 100644
--- a/meta/recipes-graphics/cairo/cairo_1.16.0.bb
+++ b/meta/recipes-graphics/cairo/cairo_1.16.0.bb
@@ -49,7 +49,7 @@ PACKAGECONFIG[xcb] = "--enable-xcb,--disable-xcb,libxcb"
PACKAGECONFIG[egl] = "--enable-egl=yes,--disable-egl,virtual/egl"
-PACKAGECONFIG[glesv2] = "--enable-glesv2,--disable-glesv2,virtual/libgles2"
+PACKAGECONFIG[glesv2] = "--disable-glesv2,virtual/libgles2"
PACKAGECONFIG[opengl] = "--enable-gl,--disable-gl,virtual/libgl"
PACKAGECONFIG[trace] = "--enable-trace,--disable-trace"
到这一步,支持x11特性的tisdk-base-image就能成功构建。
4. 增加x11特性后,还需要为image添加x11相关的工具如xserver, xterm等用于图形界面的绘制,有两处改动:
#第一处在oe-core目录下,添加 xclock,xterm这两个工具,xterm为必需的
diff --git a/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb b/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb
index cddf1932f3..e97fcfc317 100644
--- a/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb
+++ b/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb
@@ -33,4 +33,6 @@ RDEPENDS_${PN}-utils = "\
xdpyinfo \
xinput-calibrator \
dbus-x11 \
+ xclock \
+ xterm \
"
#第二处,添加xserver软件有关的group, 推荐放在.bbapend中
diff --git a/meta-arago-distro/recipes-core/images/tisdk-base-image.bb b/meta-arago-distro/recipes-core/images/tisdk-base-image.bb
index 8698816d..15adad3c 100644
--- a/meta-arago-distro/recipes-core/images/tisdk-base-image.bb
+++ b/meta-arago-distro/recipes-core/images/tisdk-base-image.bb
@@ -14,6 +14,7 @@ IMAGE_INSTALL += "\
packagegroup-arago-base-tisdk \
${VIRTUAL-RUNTIME_initramfs} \
${@oe.utils.conditional('ARAGO_BRAND', 'mainline', 'ti-test', '', d)} \
+ packagegroup-core-x11-base \
"
export IMAGE_BASENAME = "tisdk-base-image"
修改后再次构建,至此java图形程序运行的基本环境搭建完成。
- 上述步骤成功后开始添加meta-java,增加openjdk-8工具, 首先在source目录下用git 获取meta-java,并需要切换到dunfell分支:
git clone https://git.yoctoproject.org/meta-java;git checkout dunfell
参考meta-java下的README对配置文件做如下几处修改:
# 在build/conf/bblayers.conf中加入meta-java层
BBLAYERS += " \
...
/home/jenkins/build/qiaoli/ti/sources/meta-java \
"
在build/conf/local.conf最后加入以下内容:
# Possible provider: cacao-initial-native and jamvm-initial-native
PREFERRED_PROVIDER_virtual/java-initial-native = "cacao-initial-native"
# Possible provider: cacao-native and jamvm-native
PREFERRED_PROVIDER_virtual/java-native = "jamvm-native"
# Optional since there is only one provider for now
PREFERRED_PROVIDER_virtual/javac-native = "ecj-bootstrap-native"
IMAGE_INSTALL_append = " openjdk-8"
最后需要在oe-core目录下对交叉编译选项做下面的修改以通过编译:
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index 91f003d6dd..228008a5a0 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -612,8 +612,7 @@ EXTRA_OEMAKE_prepend_task-install = "${PARALLEL_MAKEINST} "
# Optimization flags.
##################################################################
# Beware: applied last to first
-DEBUG_PREFIX_MAP ?= "-fmacro-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} \
- -fdebug-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} \
+DEBUG_PREFIX_MAP ?= " -fdebug-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} \
-fdebug-prefix-map=${STAGING_DIR_HOST}= \
-fdebug-prefix-map=${STAGING_DIR_NATIVE}= \
"
到此所有的修改已经完成,再次构建,等待完成。
- 构建完成后,参考create_SD_card, 用bmap-tools将镜像写入到SD卡,然后将板子上电, 验证此镜像是否能运行需要图形支持的jar包,步骤如下:
-
- 板子的HDMI口接入显示器,给板子上电,启动系统
-
- 在任意一个tty中运行下面命令启动X服务:
X -retro :0 &
- 在任意一个tty中运行下面命令启动X服务:
-
- 成功后可以发现显示屏变成灰色条纹状, 再运行下面命令测试jar包(JTattooDemo.jar)
export DISPLAY=:0; java -jar JTattooDemo.jar
- 成功后可以发现显示屏变成灰色条纹状, 再运行下面命令测试jar包(JTattooDemo.jar)
-
- 显示器出现图形界面则验证通过。
本文介绍如何为TI的am62xx-evm评估板构建支持X11服务的rootfs镜像,以运行带GUI的Java程序。主要内容包括在tisdk-base-image基础上添加X11支持的方法,解决构建过程中遇到的依赖问题,以及添加Java环境。

3821

被折叠的 条评论
为什么被折叠?



