0x00 前言
华为擎云L410是华为商用终端信创产品线的一台笔记本电脑,采用麒麟990处理器,Mali-G76作为GPU,广泛应用于国企、政府、事业单位等有国产化要求的单位。华为擎云L410目前官方提供两种操作系统,分别是统信UOS和银河麒麟。本文主要针对在银河麒麟上运行较高版本的Electron(大于v20)应用程序出现的 undefined symbol: gbm_bo_map 问题提供临时解决方案。经测试,本方法对 Visual Studio Code、Typora、GitHub Desktop、Clash For Windows 等Electron应用程序均有效,接下来以安装Github Desktop后解决 gbm_bo_map 问题为例,介绍解决方案。
0x01 安装GitHub Desktop
打开终端,通过apt可直接从银河麒麟软件源安装 GitHub Desktop
sudo apt install github-desktop -y
安装后在终端输入
github-desktop
尝试启动,发现终端返回:github-desktop: symbol lookup error: github-desktop: undefined symbol: gbm_bo_map 错误
此问题来自于新版本的Electron调用了一个gbm特性,华为的旧版本Mali驱动中没有编译该特性,而统信UOS最新版使用的1.4.2版本的驱动中已经增加了 gbm_bo_map 符号,因此只需将相应的动态链接库挪过来即可(文件将在文末给出)
0x02 解决问题
首先,在终端输入
which github-desktop
查询app可执行文件位置,得到返回值:/usr/bin/github-desktop
随后通过file命令确认具体文件位置
file /usr/bin/github-desktop
得到返回值:/usr/bin/github-desktop: symbolic link to /usr/lib/github-desktop/github-desktop,可知/usr/bin/github-desktop是一个符号链接。再继续通过file寻找可执行文件:
file /usr/lib/github-desktop/github-desktop
得到返回值:/usr/lib/github-desktop/github-desktop: ELF64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=37bbe6c35dc3c9b5f3c4af284d91aa40e094931c, not stripped;可知/usr/lib/github-desktop/github-desktop就是我们在寻找的二进制可执行文件位置。
执行ls查看目录情况(注意 是查看可执行文件所在目录):
ls /usr/lib/github-desktop/
出现如上图所示的目录结构,则可知此文件夹就是一个标准的Electron应用程序结构(包括chrome_100_percent.pak、chrome-sandbox)等。接下来我们需要把高版本的Mali动态链接库拷贝到这个文件夹。在终端打开我提供的新版本GPU驱动文件夹:
文件夹内有:libgbm.so.1 libmali.so.0 libwayland-client.so.0 三个动态链接库。我们需要把它们复制到需要动态链接库的Electron应用的文件夹内
sudo cp ./libgbm.so.1 /usr/lib/github-desktop/ sudo cp ./libwayland-client.so.0 /usr/lib/github-desktop/ sudo cp ./libmali.so.0 /usr/lib/github-desktop/
复制完成后,应用程序即可正常打开和启动:
0x03 附件及注意事项
下载文中提到的Mali驱动:
通过百度网盘下载:Mali驱动.zip 提取码: y2dh
您不应该将本文所附的任何动态链接库直接放置在系统lib路径(如/lib或/lib64)内,以免影响系统图形界面的稳定性;在复制前做好必要的文件备份,以免出错,本文中所有指令都仅供参考,请您依据实际情况适时地修改。
本方法在搭载中标麒麟V7(工程机系统)、银河麒麟V10 SP1 2203和银河麒麟V10 SP1 2303的华为擎云L410上测试均未发现任何问题,在统信UOS或华为擎云W515(亦搭载麒麟990芯片)上未测试过,理论上也可以用。