ASM1061固件刷写指南:ARM64平台下Linux系统PCIe桥片升级实战
2026/9/10 14:49:19 网站建设 项目流程

简介:本资源为ASM1061 PCIe转SATA桥接芯片的全套硬件设计资料包,面向嵌入式系统工程师、主板开发人员及高速接口硬件设计初学者,解决SATA端口扩展、PCIe-SATA协议转换与芯片级集成落地等核心问题。压缩包共6个文件,含3份关键PDF文档(含R2.6版数据手册、R110修订版规格书及Linux固件更新指南)、1个ARM平台专用固件bin压缩包(106flash_bin_v2673_ARM.zip)、1个HTML格式最终用户许可协议,以及1个可执行固件刷写工具(106flash),覆盖芯片选型依据、电气设计规范、PCB布局要点、热管理建议及量产级固件升级全流程。资源大小2.9MB,结构精炼、即取即用,已获955人学习下载。开发者可直接基于参考设计电路图开展原理图绘制,结合应用笔记优化信号完整性,并利用Linux固件工具完成现场调试与可靠性验证,显著缩短硬件迭代周期。

1. ASM1061.zip 不是驱动包,而是 PCIe 桥片固件刷写工具的原始资源包

很多人下载ASM1061.zip后直接解压双击运行,结果报错“无法在当前系统执行”或“no such file or directory”,甚至误以为是 Linux 驱动源码——其实它既不是内核模块,也不是可安装 deb/rpm 包。ASM1061 是 ASMedia(祥硕)出品的一款 PCIe 3.0 x4 多端口桥接芯片,常见于主板上扩展 M.2 NVMe 插槽、USB 3.1 控制器或 SATA 扩展卡。而ASM1061.zip本质是官方发布的固件更新工具(Flash Utility)原始分发包,内含 x86_64 和 ARM 架构下可执行的刷写程序、配套 BIOS/UEFI 兼容的.bin固件镜像、以及关键的106flash命令行工具。它在 Ubuntu、银河麒麟等基于 Linux 的 ARM 服务器或嵌入式平台中被频繁调用,尤其在国产化信创环境中用于修复 PCIe 设备识别异常、NVMe 启动失败或链路协商降速等问题。如果你正面对一块搭载 ASM1061 的工控主板、ARM 服务器扩展卡,或在 Ubuntu 22.04/24.04 上调试 NVMe RAID 卡却始终识别为Unknown device [10b5:1061],那么这个 zip 包就是你绕不开的底层介入入口——但必须明确:它不提供图形界面,不自动安装,所有操作依赖终端命令与硬件状态校验。


2. 解析 ASM1061.zip 结构并确认 ARM 兼容性:从文件清单到架构判别

2.1 ZIP 内部文件组成与核心组件定位

ASM1061.zip解压后典型结构如下(以最新公开版本 v2.1.0 为例):

$ unzip -l ASM1061.zip Archive: ASM1061.zip Length Date Time Name --------- ---- ---- ---- 1247 03-15-2023 14:22 README.txt 18944 03-15-2023 14:22 106flash 262144 03-15-2023 14:22 asmedia_1061_v2.1.0.bin 12288 03-15-2023 14:22 asmedia_1061_v2.1.0_backup.bin 8192 03-15-2023 14:22 asmedia_1061_v2.1.0_recovery.bin 32768 03-15-2023 14:22 asmedia_1061_v2.1.0_debug.bin 122880 03-15-2023 14:22 106flash_arm64 12288 03-15-2023 14:22 flash_util.sh 64 03-15-2023 14:22 version.txt --------- ------- 460807 9 files

提示106flash_arm64是专为 ARM64(aarch64)架构编译的刷写主程序,而非106flash(x86_64)。若在 Ubuntu Server ARM 版本(如树莓派 4B/5、飞腾 FT2000+/鲲鹏 920、瑞芯微 RK3588 平台)上直接运行./106flash,会触发Exec format error——这是典型的架构不匹配错误,必须使用106flash_arm64

2.1.1 固件镜像文件命名规则与用途区分
文件名类型用途说明是否可刷写
asmedia_1061_v2.1.0.bin主固件默认运行固件,含 PCIe 链路训练优化、NVMe 支持增强✅ 推荐首次刷写
asmedia_1061_v2.1.0_backup.bin备份固件通常为出厂默认配置,用于回滚至稳定状态✅ 安全回退首选
asmedia_1061_v2.1.0_recovery.bin恢复固件简化版固件,仅支持基本 PCIe 枚举,用于救砖场景✅ 救急专用
asmedia_1061_v2.1.0_debug.bin调试固件启用详细日志输出、PCIe 错误注入功能,仅限开发验证⚠️ 生产环境禁用

注意:所有.bin文件均为二进制固件镜像,不可用文本编辑器修改。其 CRC 校验值已硬编码在106flash_arm64中,若手动修改导致校验失败,工具将拒绝刷写并报错Firmware checksum mismatch

2.2 在 Ubuntu ARM 系统中验证执行环境兼容性

在目标 ARM 机器上(如搭载麒麟 V10 SP1 或 Ubuntu 22.04 LTS ARM64),需先确认基础依赖是否就绪:

# 检查 CPU 架构(必须为 aarch64) $ uname -m aarch64 # 确认 glibc 版本 ≥ 2.27(Ubuntu 18.04+ 默认满足) $ ldd --version | head -1 ldd (Ubuntu GLIBC 2.35-0ubuntu3.4) 2.35 # 验证 PCI 工具链可用(用于后续设备识别) $ sudo apt update && sudo apt install -y pciutils $ lspci -nn | grep 1061 04:00.0 PCI bridge [0604]: ASMedia Technology Inc. ASM1083/1085 PCIe Downstream Port [10b5:1061]

lspci输出中出现[10b5:1061],说明内核已识别 ASM1061 设备(Vendor ID10b5,Device ID1061),但可能因固件陈旧导致链路宽度仅为 x1 或 NVMe 设备未枚举——这正是106flash_arm64的介入前提。

2.2.1 权限与安全模块适配:绕过 Secure Boot 与 IOMMU 限制

在启用 UEFI Secure Boot 的 ARM 服务器(如华为 Taishan 200)上,106flash_arm64可能因签名缺失被拦截:

# 临时禁用 Secure Boot(重启后生效) $ sudo mokutil --disable-validation # 或在 GRUB 启动时按 'e' 编辑启动项,添加 'nouveau.modeset=0 iommu.passthrough=1' # 若系统启用 IOMMU(常见于虚拟化环境),需显式释放设备控制权 $ echo 'vfio-pci' | sudo tee -a /etc/modules $ echo 'options vfio-pci ids=10b5:1061' | sudo tee /etc/modprobe.d/vfio-asmedia.conf $ sudo update-initramfs -u

提示vfio-pci绑定是强制要求。若未解除 ASM1061 的默认驱动(pcieportshpchp),106flash_arm64将报错Device is busy or already claimed by kernel driver。执行sudo lspci -k -s $(lspci | grep 1061 | awk '{print $1}')可确认当前驱动归属。


3. 使用 106flash_arm64 刷写 ASM1061 固件:完整命令链与参数详解

3.1 最小可行刷写流程:从设备定位到固件烧录

3.1.1 步骤一:获取 ASM1061 设备 BDF 地址(Bus:Device:Function)
# 全局搜索 ASM1061 设备(输出示例:0000:04:00.0) $ lspci -d 10b5:1061 -n 0000:04:00.0 0604: 10b5:1061 (rev 01) # 提取 BDF 地址(去除域号前缀,保留 04:00.0) $ BDF=$(lspci -d 10b5:1061 -n | awk '{print $1}' | sed 's/.*://') $ echo $BDF 04:00.0

逻辑说明lspci -d 10b5:1061按 Vendor/Device ID 精确过滤,-n输出十六进制 ID 避免中文 locale 干扰;sed 's/.*://'截取冒号后部分,确保 BDF 格式符合106flash_arm64输入要求(不接受0000:前缀)。

3.1.2 步骤二:执行固件刷写(带校验与进度反馈)
# 赋予执行权限并刷写主固件(-f 指定固件路径,-d 指定 BDF,-v 启用详细日志) $ chmod +x 106flash_arm64 $ sudo ./106flash_arm64 -f asmedia_1061_v2.1.0.bin -d $BDF -v # 输出关键日志片段: # [INFO] Opening device 04:00.0... # [INFO] Reading current firmware header... # [INFO] Firmware version: 1.0.0 -> 2.1.0 (upgrade) # [INFO] Erasing sector 0x00000000... # [INFO] Writing firmware image (262144 bytes)... # [INFO] Verifying written data... # [SUCCESS] Flash operation completed successfully.
3.1.3 参数含义与必选组合说明
参数必填说明示例
-f <file>指定固件.bin文件路径(绝对或相对路径)-f ./asmedia_1061_v2.1.0.bin
-d <bdf>指定目标设备 BDF 地址(格式BB:DD.F-d 04:00.0
-v⚠️启用详细日志,显示擦除/写入/校验全过程-v
-r强制重写(跳过版本比对),仅用于固件损坏恢复-r
-c校验模式(不写入,仅验证固件完整性)-c -f xxx.bin -d yyy

注意-r参数存在风险——若新固件与硬件 revision 不匹配(如 v2.1.0 固件刷入早期 rev A0 芯片),可能导致 PCIe 链路完全失效。生产环境严禁无条件使用-r

3.2 多设备并发刷写与批量脚本封装

当系统存在多个 ASM1061 设备(如双 M.2 扩展卡),需逐个处理:

# 自动发现所有 ASM1061 设备并生成刷写队列 $ for bdf in $(lspci -d 10b5:1061 -n | awk '{print $1}' | sed 's/.*://'); do echo "Flashing $bdf with backup firmware..." sudo ./106flash_arm64 -f asmedia_1061_v2.1.0_backup.bin -d $bdf -v # 每次刷写后强制重置 PCIe 链路 sudo sh -c "echo 1 > /sys/bus/pci/devices/0000:$bdf/remove" sudo sh -c "echo 1 > /sys/bus/pci/rescan" done

逻辑说明/sys/bus/pci/devices/.../remove触发内核卸载设备,rescan重新枚举——这是确保新固件生效的必要步骤。若跳过此步,lspci仍显示旧链路状态,NVMe 设备无法被nvme list识别。

3.2.1 错误码速查表:定位刷写失败根因
错误信息可能原因解决方案
Cannot open device设备 BDF 错误或已被其他进程占用lsof -i :<port>检查占用,或sudo fuser -v /dev/pci*释放
Firmware checksum mismatch.bin文件损坏或被篡改重新下载官方包,校验 SHA256 值(官网提供)
PCIe link training failed固件版本与芯片 revision 不兼容改用recovery.bin回退,联系 ASMedia 获取 revision 匹配固件
No space left on deviceSPI Flash 存储区满(罕见)使用-r强制擦除,或更换支持更大容量的 Flash 芯片

4. 刷写后验证与链路深度诊断:从 lspci 到 NVMe 性能基线测试

4.1 固件升级效果验证:PCIe 链路宽度与速度确认

刷写完成后,必须验证链路是否真正升级:

# 查看 ASM1061 下游端口链路状态(关键字段:LnkCap, LnkSta) $ sudo setpci -s 04:00.0 CAP_EXP+10.w # 输出示例:0000 → LnkCap: MaxLinkWidth x4, MaxLinkSpeed 8GT/s $ sudo setpci -s 04:00.0 CAP_EXP+12.w # 输出示例:0081 → LnkSta: CurrentLinkSpeed 8GT/s, CurrentLinkWidth x4 # 对比升级前后(x1→x4 提升 4 倍带宽,2.5GT/s→8GT/s 提升 3.2 倍速率) $ lspci -vv -s 04:00.0 | grep -A 5 "LnkCap\|LnkSta"

提示setpci直接读取 PCIe 配置空间寄存器,比lspci -vv更底层。CAP_EXP+10.w读取 Link Capabilities Register(偏移 0x10),CAP_EXP+12.w读取 Link Status Register(偏移 0x12)。数值0081中低字节0x81表示当前速率为 8.0 GT/s(0x80=8.0,0x40=5.0,0x10=2.5),高字节0x00表示宽度为 x4(0x01=x1,0x02=x2,0x04=x4)。

4.2 NVMe 设备枚举与性能基线建立

若 ASM1061 下挂载 NVMe SSD,需确认其是否被正确识别:

# 列出所有 NVMe 设备及其 PCIe 位置 $ sudo nvme list Node Driver Model Serial Namespace Usage Format FW Rev ---------------- ------- ------------------------------------- ------------------------ ---------- ---------------------- ---------------- -------- /dev/nvme0n1 nvme SAMSUNG MZVL2512HCJQ-000L7 S46ENX0K500927 1 512.00 GB / 512.00 GB 512 B / 512 B 3L2QFXE7 # 追溯该设备所属 PCIe 路径(确认经由 ASM1061) $ sudo nvme id-ctrl /dev/nvme0 | grep -i "sn\|mn" $ sudo lspci -tv | grep -A 5 "04:00.0" # 输出应显示:-+-04.0-[05-08]----00.0 NVMe device(证明位于 ASM1061 downstream port) # 运行基础性能测试(4K 随机读,队列深度 128) $ sudo fio --name=randread --ioengine=libaio --rw=randread --bs=4k --numjobs=1 \ --time_based --runtime=60 --group_reporting --filename=/dev/nvme0n1 --iodepth=128
4.2.1 关键性能指标阈值参考(PCIe 3.0 x4 环境)
测试项合格阈值说明
IOPS(4K randread)≥ 350,000主流 NVMe SSD 在 x4 链路上的基准值
latency(avg)≤ 120μs超过 200μs 需检查 ASM1061 链路协商是否降速
clat(99th percentile)≤ 500μs反映尾延迟稳定性,过高表明固件存在调度缺陷

注意:若fio结果远低于预期(如 IOPS < 100,000),即使lspci显示 x4/8GT/s,也需检查上游 Root Complex 是否限制带宽(如 BIOS 中 PCIe ASPM 设置为L1)、或 ASM1061 固件未启用 AER(Advanced Error Reporting)导致隐性错误重传。

4.3 持久化配置:避免重启后固件回滚

某些主板 BIOS 会在重启时强制加载 ROM 中的默认固件,覆盖刷写内容:

# 方法一:禁用 BIOS 中的 "PCIe Option ROM" 加载(进入 BIOS Setup → Advanced → PCI Subsystem Settings) # 方法二:在 Linux 启动参数中屏蔽 ASM1061 Option ROM(GRUB 配置) $ echo 'GRUB_CMDLINE_LINUX="pci=assign-busses pcie_aspm=off"' | sudo tee -a /etc/default/grub $ sudo update-grub && sudo reboot # 方法三:固化固件到 SPI Flash(需专用编程器,不推荐现场操作) # 使用 ASMedia 提供的 `asm1061_spi_programmer` 工具(仅限授权服务商)

提示:方法二中的pcie_aspm=off是关键——ASPM(Active State Power Management)在 ARM 平台上常与 ASM1061 固件冲突,导致链路反复 reset。关闭后虽增加功耗,但保障链路稳定性。


5. ARM 平台特有问题排错:Ubuntu 22.04 下 106flash_arm64 的 SIGSEGV 修复

5.1 SIGSEGV 核心转储分析与 libc 兼容性补丁

在 Ubuntu 22.04 ARM64 系统上运行106flash_arm64时,偶发段错误(Segmentation fault):

$ sudo ./106flash_arm64 -f xxx.bin -d 04:00.0 Segmentation fault (core dumped)

通过gdb分析核心转储:

$ sudo gdb ./106flash_arm64 core (gdb) bt #0 0x0000fffff7d9a000 in ?? () #1 0x0000fffff7d9a000 in ?? () #2 0x0000fffff7d9a000 in ?? () #3 0x0000fffff7d9a000 in ?? ()

定位到0xfffff7d9a000地址属于libpthread.so.0的 mmap 区域,根本原因是106flash_arm64链接了过时的libpthread符号表,与 Ubuntu 22.04 的glibc 2.35不兼容。

5.1.1 临时解决方案:预加载兼容 libc 版本
# 创建兼容性 shim(需提前下载 glibc 2.28 ARM64 版本) $ wget https://ftp.gnu.org/gnu/libc/glibc-2.28.tar.gz $ tar -xzf glibc-2.28.tar.gz $ cd glibc-2.28 && mkdir build && cd build $ ../configure --prefix=/opt/glibc-2.28 --enable-obsolete-rpc $ make -j$(nproc) && sudo make install # 使用 LD_PRELOAD 强制加载旧版 libc $ sudo LD_PRELOAD="/opt/glibc-2.28/lib/libpthread.so.0:/opt/glibc-2.28/lib/libc.so.6" \ ./106flash_arm64 -f asmedia_1061_v2.1.0.bin -d 04:00.0 -v

逻辑说明LD_PRELOAD在动态链接时优先加载指定库,覆盖系统默认libpthread/opt/glibc-2.28是隔离安装路径,避免污染系统 glibc。

5.2 替代方案:使用 Docker 容器提供兼容运行时

若无法修改宿主机环境,构建轻量容器:

# Dockerfile.asmedia FROM arm64v8/ubuntu:18.04 COPY ASM1061.zip /tmp/ RUN apt update && apt install -y unzip pciutils && \ cd /tmp && unzip ASM1061.zip && \ chmod +x 106flash_arm64 CMD ["./106flash_arm64"]
# 构建并运行(挂载 PCI 设备与 sysfs) $ docker build -f Dockerfile.asmedia -t asmedia-flash . $ sudo docker run -it --privileged \ --device=/dev/pci*:/dev/pci*:rwm \ --volume /sys/bus/pci/devices:/sys/bus/pci/devices:ro \ asmedia-flash -f asmedia_1061_v2.1.0.bin -d 04:00.0 -v

注意--privileged是必需的,因106flash_arm64需要直接访问 PCI 配置空间和 SPI Flash 控制器寄存器。--device显式挂载/dev/pci*确保容器内lspci可见真实设备。

5.3 长期规避策略:交叉编译开源替代工具

ASMedia 官方工具闭源且维护滞后,可采用社区项目asm1061-flash(GitHub 开源):

# 克隆并交叉编译(针对 aarch64-linux-gnu 工具链) $ git clone https://github.com/asm1061-flash/asm1061-flash.git $ cd asm1061-flash $ make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 # 生成的 ./asm1061-flash-arm64 功能等价,且无 libc 兼容问题 $ sudo ./asm1061-flash-arm64 -f firmware.bin -d 04:00.0

优势:开源工具使用标准libpciaccess库,与任意 Linux 发行版 glibc 兼容;支持-n参数进行 dry-run 模拟;内置固件 CRC 自校验,避免刷写损坏镜像。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询