首页/新闻资讯/正文详情

Skia 基础设施指南:为 x86_64 Chromebook 制作 EGL/GLES GPU 编译资产(chromebook_x86_64_gles)

发布时间:2026/9/25 2:02:00 来源:云帆数科 栏目:资讯中心
Skia 基础设施指南:为 x86_64 Chromebook 制作 EGL/GLES GPU 编译资产(chromebook_x86_64_gles)
图形学图像处理【免费下载链接】skiaSkia is a complete 2D graphic library for drawing Text, Geometries, and Images.项目地址https://gitcode.com/gh_mirrors/skia1/skia点击查看免费下载这篇指南以 Skia 仓库中的infra/bots/assets/chromebook_x86_64_gles/资产为线索讲解 Skia 的 CI 自动化测试体系如何在 x86_64 架构 Chromebook如 Pixelbook上编译并链接 GPU 代码。文章覆盖该资产的用途、从 Chromebook 设备提取系统库、在开发机上打包上传的完整流程、底层create.py的实现细节以及 CI 构建配方recipe如何消费这套库与头文件来产出nanobench、dm测试产物。读完本文你可以独立复现一套 Chromebook GPU 测试资产的制作与更新流程并理解其在 Skia 构建矩阵中的定位。一、这个资产解决什么问题Skia 是跨平台的 2D 图形库其 CI 不仅要在桌面与移动平台跑测试还要覆盖真实设备上的 GPU 行为。Chromebook 搭载 ChromeOS其 GPU 能力通过 EGL 与 GLES 暴露给应用层。为了让 CI 构建出来的 Skia 测试程序如nanobench基准测试、dm测试驱动能在 x86_64 Chromebook 上运行开发机通常是 Linux在交叉编译时必须拿到两样东西目标设备的 GL 头文件EGL、KHR、GLES2、GLES3 的 API 声明目标设备的 GL 运行库libGL*、libEGL*、libdrm*等用于链接阶段解析符号。这份 README.md 明确写道该资产就是 the necessary includes and libs to compile/link the gpu code for x86_64 Chromebooks with gpu supports EGL and GLES即一套打包好的编译/链接 Chromebook GPU 代码所需的头文件与库。仓库中存在一对孪生资产本主题的 chromebook_x86_64_gles 针对 x86_64 设备如 Pixelbook而 chromebook_arm_gles 针对 ARM 设备如 Asus C100p。二者的 README 几乎同构仅设备库目录不同——x86_64 版本压缩的是设备的/usr/lib64ARM 版本压缩的是/usr/lib。二、资产的目录结构与版本管理在 Skia 的 bots 基础设施中每个资产都对应 infra/bots/assets 下的一个子目录遵循 infra/bots/assets/README.md 定义的统一规范资产以版本号命名存放在 Google Storage 中目录下包含VERSION当前版本号create.py可选负责生成资产的脚本由sk asset upload调用create_and_upload.py可选用户实现的便捷封装脚本内部再调用sk asset upload。chromebook_x86_64_gles目录完整实现了这套规范文件职责VERSION当前资产版本号内容为2create.py安装 Mesa GL 开发包、收集 Chromebook 系统库与头文件组装资产目录create_and_upload.py解析--lib_path参数通过环境变量传给create.py再调用sk asset upload上传__init__.pyPython 包标记文件使import create可用无业务逻辑版本号直接参与 CI 缓存失效判断构建配方会读取资产版本版本变化会触发任务重新拉取最新资产。三、从零制作资产设备侧与开发机侧3.1 第一步在 Chromebook 上导出系统库README 给出的操作路径很直接在任意一台 x86_64 ChromebookREADME 以 Pixelbook 为例上把/usr/lib64目录整体压缩打包# 在 Chromebook 上执行 zip -r lib64.zip /usr/lib64这个目录里包含 ChromeOS 预装的 Mesa/ANGLE 相关 GL 运行库libGL*、libEGL*、libdrm*等。把它拷贝到 Linux 开发机上解压得到一个本地目录下文记为[dir]作为制作资产的输入。3.2 第二步在开发机上执行 create_and_uploadREADME 给出的核心命令./infra/bots/assets/chromebook_x86_64_gles/create_and_upload.py --lib_path [dir]其中--lib_path简写-l就是上一步解压出的目录。该脚本会做两件事详见 create_and_upload.py把lib_path写入环境变量CHROMEBOOK_X86_64_GLES_LIB_PATH即create.py中定义的ENV_VAR供create.py读取定位仓库bin/sk工具并执行sk asset upload chromebook_x86_64_gles完成上传。值得注意的工程细节为什么用环境变量而不是命令行参数传递路径源码注释给出了答案——create.py是被sk工具间接调用的sk只负责在资产目录内执行创建脚本无法感知用户自定义参数因此create_and_upload.py选择通过进程环境变量搭桥。若找不到bin/sk脚本会抛出异常并提示 maybe you need to run bin/fetch-sk?。3.3 前置条件认证与平台限制根据 infra/bots/assets/README.md所有sk asset操作都要求拥有 google.com 账号已执行gcloud auth application-default login完成应用默认凭据认证。此外create.py与create_and_upload.py都在入口处做了平台检查if linux not in sys.platform直接报错退出因此该流程只能在 Linux 开发机上运行。四、create.py 源码级拆解资产到底装了些什么create.py 的create_asset(target_dir, gl_path)是核心逻辑分三步组装资产。4.1 安装 Mesa GL 开发包cmd [ sudo,apt-get,install, libgles2-mesa-dev, libegl1-mesa-dev ] subprocess.check_call(cmd)脚本通过sudo apt-get install安装两个包这与 README 中installs the following GL packages and then bundles them的描述一一对应libgles2-mesa-dev提供 GLES2/GLES3 的开发头文件GLES2、GLES3 目录libegl1-mesa-dev提供 EGL 平台开发头文件EGL 目录以及共享的 KHR 扩展头文件。需要注意sudo的存在该命令会请求管理员权限CI 或本地复现时应确保当前用户具备 sudo 权限。4.2 收集 Chromebook 的 GL 运行库lib_dir os.path.join(target_dir, lib) os.mkdir(lib_dir) to_copy glob.glob(os.path.join(gl_path,libGL*)) to_copy.extend(glob.glob(os.path.join(gl_path,libEGL*))) to_copy.extend(glob.glob(os.path.join(gl_path,libdrm*))) for f in to_copy: shutil.copy(f, lib_dir)脚本用glob从--lib_path指向的解压目录中匹配三类库文件统一复制到资产的lib/子目录libGL*GL 入口库含版本后缀的 so 文件libEGL*EGL 平台库libdrm*DRMDirect Rendering Manager内核接口库Chromebook 上 EGL/GLES 栈依赖它完成缓冲与模式设置。最终资产的lib/目录将承载这些设备原生二进制供链接器使用。4.3 收集 GL 头文件include_dir os.path.join(target_dir, include) os.mkdir(include_dir) shutil.copytree(/usr/include/EGL, os.path.join(include_dir, EGL)) shutil.copytree(/usr/include/KHR, os.path.join(include_dir, KHR)) shutil.copytree(/usr/include/GLES2, os.path.join(include_dir, GLES2)) shutil.copytree(/usr/include/GLES3, os.path.join(include_dir, GLES3))头文件来自开发机本地的/usr/include即上一步 apt 安装产出的 Mesa 开发头复制四个目录到资产的include/头文件目录内容EGLEGL API 声明egl.h、eglext.h、eglplatform.h等KHRKhronos 通用扩展类型定义khrplatform.hGLES2GLES2 核心与扩展 APIgl2.h、gl2ext.h等GLES3GLES3 新增 APIgl3.h、gl31.h、gl32.h等最终资产目录结构为chromebook_x86_64_gles/ ├── lib/ # 来自 Chromebook /usr/lib64 的 libGL*、libEGL*、libdrm* └── include/ # 来自开发机的 EGL/、KHR/、GLES2/、GLES3/五、CI 如何消费这份资产build/chromebook.py 剖析资产制作完成并上传后真正发挥价值的地方在 CI 构建配方。Skia 的 recipe 模块 infra/bots/recipe_modules/build/chromebook.py 中compile_fn根据target_arch分支处理 x86_64 与 ARM 两种 Chromebook 构建其中 x86_64 分支直接消费本资产。5.1 x86_64 分支的编译参数gl_dir os.path.join(top_level,chromebook_x86_64_gles) env {} args[extra_asmflags] [] args[extra_cflags] [ -DMESA_EGL_NO_X11_HEADERS, -I%s % os.path.join(gl_dir, include), ] args[extra_ldflags] [ -L%s % os.path.join(gl_dir, lib), -static-libstdc, -static-libgcc, -fuse-ldlld, ]关键参数逐项解读-DMESA_EGL_NO_X11_HEADERS告诉 Mesa 的 EGL 头文件不要依赖 X11 头Chromebook 无 X 环境避免头文件包含链断裂-I.../chromebook_x86_64_gles/include把资产中的 EGL/KHR/GLES2/GLES3 头目录加入头文件搜索路径-L.../chromebook_x86_64_gles/lib把资产中的设备 GL 库目录加入库搜索路径链接时解析libGL*/libEGL*/libdrm*符号-static-libstdc -static-libgcc静态链接 C 与 GCC 运行时避免目标设备上运行时库版本不匹配-fuse-ldlld使用 LLVM 的 lld 链接器与 Skia 默认的 clang 工具链配套。同时构建参数中设置了skia_use_egl: True即 Skia 的 GN 配置显式启用 EGL 后端让 GPU 代码路径GrContext/Ganesh 及测试程序走 EGLGLES 而非 OpenGL 桌面栈。作为对照ARM 分支在 chromebook.py 中还会额外携带armhf_sysroot、Mali GL 驱动链接参数与-marcharmv7-a等目标三元组参数而 x86_64 分支相对轻量仅靠本资产即可完成链接。5.2 产出与任务编排构建的最后一步通过ninja -C out_dir nanobench dm只编译两个核心测试目标nanobench性能基准与dm功能测试驱动随后由copy_build_products将产物收集上传供后续在 Chromebook 真机上执行的 flavor 步骤使用。从 infra/bots/tasks.json 与 gen_tasks_logic.go 的引用可以确认Chromebook_GLES是 Skia CI 任务矩阵中的固定构建配置例如Build-Debian10-Clang-x86_64-Debug-Chromebook_GLES它把本资产、clang_linux等一并纳入构建环境。六、更新资产的标准流程当 Chromebook 系统 GL 栈或 Skia 编译需求变化时需要升级资产。综合 infra/bots/assets/README.md 与create_and_upload.py的调用链完整更新流程为重新在 Chromebook 上打包最新/usr/lib64并在开发机解压修改create.py如需调整收集规则执行./infra/bots/assets/chromebook_x86_64_gles/create_and_upload.py --lib_path [dir]脚本会自动递增/更新VERSION并上传新版本到 Google Storage重新生成任务配置make -C infra/bots train依据 infra/bots/README.md 的说明这会将新版本号同步进tasks.json提交变更。从源码可以推断CI 在构建时依据tasks.json中记录的资产版本拉取对应快照因此先上传新版本、再 train 更新引用的顺序是保证任务可复现的关键。七、复现与排障要点平台限制create.py与create_and_upload.py均强制 Linux 平台macOS/Windows 上无法运行权限要求create.py内部执行sudo apt-get install需要交互式或预配置的 sudo 权限设备与开发机库的差异lib/来自 Chromebook 的/usr/lib64设备真实驱动/系统 Mesainclude/来自开发机 apt 安装的 Mesa 开发头仅需 API 声明一致二者来源不同是设计使然README 与create.py均明确体现认证上传步骤依赖gcloud auth application-default login与应用默认凭据未认证时sk asset upload会失败缺失sk工具若报sk not found按提示先执行bin/fetch-sk拉取该辅助工具在仓库根目录 bin/fetch-sk。八、小结chromebook_x86_64_gles是 Skia CI 体系中一个典型的设备依赖资产设备侧导出真实运行库/usr/lib64的 GL/EGL/DRM 库开发机侧补齐头文件Mesa GLES/EGL 开发头由create.py组装、create_and_upload.py上传、版本化存储在 Google Storage最终被 build/chromebook.py 以-I/-L参数注入构建产出可在 Pixelbook 等 x86_64 Chromebook 上运行的nanobench与dm。理解这套资产的制作与消费链路也就掌握了 Skia CI 在跨设备 GPU 测试场景下的核心工程手法把真实设备的二进制依赖抽成可版本化的构建资产让 CI 构建与真机运行解耦。赞分享图形学图像处理【免费下载链接】skiaSkia is a complete 2D graphic library for drawing Text, Geometries, and Images.项目地址https://gitcode.com/gh_mirrors/skia1/skia点击查看免费下载相关推荐Skia 跨平台编译资产指南chromebook_x86_64_glesx86_64 Chromebook 的 EGL/GLES 头文件与库打包方案Skia 跨平台编译资产指南chromebook_x86_64_glesx86_64 Chromebook 的 EGL/GLES 头文件与库打包方案 导读图形学Skia 构建资产指南为 ARM64 Chromebook 打包 EGL/GLES 头文件与库chromebook_arm64_glesSkia 构建资产指南为 ARM64 Chromebook 打包 EGL/GLES 头文件与库chromebook_arm64_gles 导读 infra图形学Skia ARM Chromebook GLES 交叉编译资产chromebook_arm_gles完整指南Skia ARM Chromebook GLES 交叉编译资产chromebook_arm_gles完整指南 本篇技术指南聚焦于 Skia 仓库中的基础设施图形学上一篇OBS Studio转场效果终极指南如何用专业转场提升直播和视频质量下一篇Zotero Citation插件提升Word文献引用效率的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

BullMQ v4 版本演进全解析:优先级重构、依赖关系、沙盒与性能优化实战指南
BullMQ v4 版本演进全解析:优先级重构、依赖关系、沙盒与性能优化实战指南

后端消息队列任务调度 【免费下载链接】bullmq BullMQ - Message Queue and Batch processing for NodeJS, Python, .NET, Elixir, Rust and PHP based on Redis or PostgreSQL 项目地址: https://gitcode.com/gh_mirrors/bu/bullmq 点击查看 免费下载 本篇技术指南… · 2026/9/25 2:02:00

STM32上C++实战:触摸屏项目中的类封装与零成本抽象
STM32上C++实战:触摸屏项目中的类封装与零成本抽象

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:01:54

ESP32-C3托管RP2040运维:SWD烧录+启动控制+日志镜像一体化方案
ESP32-C3托管RP2040运维:SWD烧录+启动控制+日志镜像一体化方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:01:54

Inoproshop指令库与库文件详解:从安装调用到封装避坑
Inoproshop指令库与库文件详解:从安装调用到封装避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:25:25

SpringBoot学生考勤管理系统源码实战:环境搭建、数据库导入与二次开发
SpringBoot学生考勤管理系统源码实战:环境搭建、数据库导入与二次开发

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:25:25

higgsfield项目深度解析:从强化学习原理到PyTorch实战
higgsfield项目深度解析:从强化学习原理到PyTorch实战

很多人第一眼看到“higgsfield”这个词,脑子里蹦出来的可能是物理课上那个给粒子赋予质量的希格斯场。我第一次在开源社区刷到这个项目名,也愣了一下,以为是某个理论物理方向的代码库。点进去才发现,这其实是一个聚焦强化学习和自… · 2026/9/25 4:25:19

汽车IMU原理与实战:从六轴感知到智能驾驶定位基石
汽车IMU原理与实战:从六轴感知到智能驾驶定位基石

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:25:13

ISO/SAE 21434网络安全合规落地:从风险评估到供应链治理
ISO/SAE 21434网络安全合规落地:从风险评估到供应链治理

简介:本资源为ISO/SAE DIS 21434:2020(E)《道路车辆—网络安全工程》国际标准草案官方英文原版PDF文档,面向汽车电子工程师、信息安全研究人员、整车及零部件企业合规与功能安全团队,以及参与智能网联汽车认证与开发的技术人员。该草案构建了… · 2026/9/25 4:25:13

Elsevier期刊排版全指南:Neurocomputing投稿格式与LaTeX模板实战
Elsevier期刊排版全指南:Neurocomputing投稿格式与LaTeX模板实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 4:25:07

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码