
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
p4c是P4编程语言的参考编译器,支持P4-14和P4-16两个版本。P4是一种用于定义数据平面行为的编程语言,更多信息可参考P4官方网站及语言规范。p4c的前端、中端代码及p4c-graphs后端已被用作至少一种商业支持的P4编译器基础,体现了其代码质量和完整性。
p4c采用模块化设计,提供标准的前端和中端,可与特定目标后端结合形成完整编译器,旨在简化新后端的添加过程。
simple_switch(https://github.com/p4lang/behavioral-model%EF%BC%89编译P4-16/P4-14程序到BMv2目标
成功编译后将生成:
.p4i文件:预处理输出.json文件:BMv2行为模型simple_switch所需的JSON格式文件bash# 编译P4-16程序 p4c --target bmv2 --arch v1model my-p4-16-prog.p4 # 编译P4-14程序(需指定--std p4-14) p4c --target bmv2 --arch v1model --std p4-14 my-p4-14-prog.p4
生成P4Info文件
添加--p4runtime-files选项可生成P4Info文本文件,描述控制平面API:
bash# 为P4-16程序生成P4Info p4c --target bmv2 --arch v1model --p4runtime-files my-p4-16-prog.p4info.txt my-p4-16-prog.p4 # 为P4-14程序生成P4Info p4c --target bmv2 --arch v1model --p4runtime-files my-p4-14-prog.p4info.txt --std p4-14 my-p4-14-prog.p4
查看帮助信息
bash# 查看所有命令行选项 p4c --help # 查看支持的"target, arch"组合 p4c --target-help
将P4-14代码自动转换为P4-16代码:
bashp4test --std p4-14 my-p4-14-prog.p4 --pp auto-translated-p4-16-prog.p4
检查P4代码语法正确性,无输出(仅错误/警告信息):
bash# 检查P4-16代码 p4test my-p4-16-prog.p4 # 检查P4-14代码 p4test --std p4-14 my-p4-14-prog.p4
生成P4程序解析器和控制流的GraphViz .dot文件:
bash# 为P4-16程序生成图表 p4c-graphs my-p4-16-prog.p4 # 为P4-14程序生成图表 p4c-graphs --std p4-14 my-p4-14-prog.p4
将.dot文件转换为PDF(需安装GraphViz):
bashdot -Tpdf ParserImpl.dot > ParserImpl.pdf
构建镜像
通过Dockerfile生成包含p4c的镜像:
bashdocker build -t p4c .
注意事项
从源码构建时,可通过cmake命令的可选参数自定义构建:
| 参数 | 说明 | 默认值 |
|---|---|---|
| `-DCMAKE_BUILD_TYPE=RELEASE | DEBUG` | 构建类型(RELEASE带优化/DEBUG带调试符号) |
-DCMAKE_INSTALL_PREFIX=<path> | 安装目录 | /usr/local |
| `-DENABLE_BMV2=ON | OFF` | 启用BMv2后端 |
| `-DENABLE_EBPF=ON | OFF` | 启用eBPF后端 |
| `-DENABLE_UBPF=ON | OFF` | 启用ubpf后端 |
| `-DENABLE_DPDK=ON | OFF` | 启用DPDK后端 |
| `-DENABLE_P4C_GRAPHS=ON | OFF` | 启用p4c-graphs后端 |
| `-DENABLE_P4TEST=ON | OFF` | 启用p4test后端 |
| `-DENABLE_DOCS=ON | OFF` | 构建文档 |
| `-DENABLE_GC=ON | OFF` | 启用垃圾回收库 |
| `-DENABLE_GTESTS=ON | OFF` | 构建并运行GTest单元测试 |
| `-DENABLE_PROTOBUF_STATIC=ON | OFF` | 使用静态protobuf库 |
| `-DENABLE_MULTITHREAD=ON | OFF` | 启用多线程 |
| `-DENABLE_GMP=ON | OFF` | 使用GMP库 |
项目也可通过Bazel构建:
bashbazel build //...
提供p4_library规则用于第三方Bazel项目中调用p4c,示例见bazel/example。
更多问题可在https://github.com/p4lang/p4c/issues%E6%9F%A5%E7%9C%8B%E6%88%96%E6%8F%90%E4%BA%A4%E3%80%82
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。






来自真实用户的反馈,见证轩辕镜像的优质服务