cd /Users/akibadi111/project/nanhu-linux-ddr
make check-env
make workspace-final
make verify-workspace-final
构建完成后,主输出在:
output/workspace-final/
把它拷到 runtime 服务器后,在服务器上重新 load:
scp -r output/workspace-final \
hjuser@172.38.9.112:/home/hjuser/Desktop/NH_260803/test/
cd /home/hjuser/Desktop/NH_260803
make uv_run0 layout=/home/hjuser/Desktop/NH_260803/test/workspace-final/ddr-load.plan
进入板上 Linux 后,最小验证命令是:
dmesg | grep -i e6
ls -lh /dev/e6npu0
/workspace/bin/e6-iface-test all
Nanhu Linux DDR / E6 一页复现指南
这个仓库的目标很单一:生成南湖 FPGA 上板用的 Linux DDR 加载包,并把 E6 driver、workspace、smoke payload 和验证脚本串成一条可复现的链路。
如果你只想先跑通一次,直接看“快速开始”。如果你想知道每个目录负责什么,看“分层模块图”。如果你想确认结果是否可信,看“验证矩阵”。
0. 快速开始
构建完成后,主输出在:
把它拷到 runtime 服务器后,在服务器上重新 load:
进入板上 Linux 后,最小验证命令是:
预期结果:
1. 分层模块图
1.1 Board / boot 层
board/build-14m7456.shbuild-phase1.shbuild-workspace-final.sh1.2 DDR layout 层
layout/scripts/generate_ddr_bundle.pymodule_table.bin、ddr-load.plan、DTS 片段和 header1.3 Rootfs / workspace 层
rootfs-overlay/workspace-root//workspace的种子目录software-workspace-sdk//workspace的 SDKworkspace-root/startup.sh是故意不阻塞的;它只打印建议命令,不会拦住 Linux 进入 shell。1.4 Experiments / validation 层
experiments/e6-iface-test/experiments/e6-mmap-runner/experiments/e6-firmware/experiments/e6-firmware-rv64/experiments/four-segment-smoke/1.5 Automation / verification 层
scripts/module-tools/1.6 Source / vendor 层
src/linux-6.12/src/busybox-1.36.1/src/opensbi-1.3-qemu/configs/third_party/userland/2. 构建模式
2.1 全量复现:Linux + E6 driver + workspace
这是默认推荐路径。它会重新生成:
/workspaceext4 镜像module_table.bin和ddr-load.planoutput/workspace-final/命令:
2.2 只重打包
/workspace如果只改了
/workspace里的软件、脚本、输入数据、模型或库,不需要重编 Linux / E6 driver:这里的
software-root必须是板上/workspace的根目录。2.3 Smoke bundles
两个独立的 smoke 路径:
2.4 SDK / bundle 复现
如果只想验证 workspace SDK 发布物:
3. 可复现步骤
步骤 1:检查主机依赖
需要的核心工具包括:
make、dtc、python3、mkfs.ext4、e2fsck、debugfs和 RISC-V 工具链。步骤 2:生成完整 bundle
主输出目录:
关键文件:
步骤 3:静态验证
这个目标是最终 bundle 的合同检查,覆盖 ext4 镜像、load plan、workspace tree、DTS、kernel config 和 sparse extents。
步骤 4:上传到 runtime 服务器
注意:不要直接上传
build-workspace-final/software_workspace.ext4,它是内部构建产物。真正需要 load 的是output/workspace-final/ddr-load.plan和同目录下的 bundle 文件。步骤 5:在 runtime 服务器上 load
如果只 scp、不重新 load,板上的
/workspace仍然可能是旧镜像。步骤 6:在板上确认 E6 driver
预期:
4. 验证矩阵
make verify-workspace-finalscripts/verify_workspace_final.sh;最终 bundle 的静态合同make verify-four-segment-smokescripts/verify_four_segment_smoke.sh;four-segment smoke 输出make verify-high-address-smokescripts/verify_high_address_smoke.sh;高地址 smoke 输出make verify-workspace-sdkscripts/verify_workspace_sdk_release.sh;SDK 发布物一致性make verify-package-workspacesoftware-workspace-sdk/verify-sdk.sh ./output/workspace-final;软件-only bundle 一致性4.1 workspace-final 的参考合同
scripts/verify_workspace_final.sh会检查:output/workspace-final/下的 checksumWORKSPACE_TREE.txtworkspace-extents/ddr-load.plan和module_table.bin/workspace/bin/e6-iface-test/workspace/bin/e6-mmap-runner/workspace/e6/e6-smoke.bin/workspace/e6/e6-smoke-rv64.bin5. 清理建议
5.1 可以删除的生成物
下面这些通常只是本地构建缓存或实验产物:
build-busybox-dynamic/build-busybox-scalar/build-e6-compile-test/build-workspace-final/(删除后需重新make workspace-final,再运行make verify-workspace-final)output/e6-transfer/output/e6-transfer-scalar-baseline/output/e6-transfer-scalar-host/scripts/__pycache__/src/build-e6-compile-testsrc/linux-6.12/build-e6-compile-testexperiments/*/build/5.2 先保留的内容
以下内容属于文档化流程或已验证的参考输入,默认不要删:
board/configs/layout/rootfs-overlay/scripts/software-workspace-sdk/module-tools/workspace-root/third_party/userland/src/output/workspace-final/output/four-segment-smoke/output/high-address-smoke/output/phase1/历史诊断输入如果还要保留,只把它们当作 archive,不要把它们当成默认主流程的一部分:
build-14m7456-pathtrace.shboard/opensbi-1.3-nanhu-pathtrace.patchboard/nanhu-fpga-singlecore.dts5.3 清理原则
不要删除任何被
make verify-*、software-workspace-sdk/verify-sdk.sh或scripts/verify_workspace_final.sh明确消费的文件,除非你同时更新了验证合同。6. 常见问题
/dev/e6npu0不存在先检查:
linux_base.bin启动CONFIG_NANHU_E6=y是否生效/workspace/bin/e6-iface-test不存在通常是以下原因之一:
make workspace-finalddr-load.plan重新 loade6-mmap-runner全 0这表示 E6 执行路径仍需继续排查。Linux driver 的基础接口先以
e6-iface-test all为准。7. 关键源码位置