dmidecode -t memory是唯一能直接解析bios/uefi中smbios表获取内存型号(part number)、厂商(manufacturer)、序列号(serial number)等硬件级字段的命令,其他工具如/proc/meminfo、lshw或strings均缺失关键字段或无法保证准确性。

只能用 dmidecode -t memory 查,其他命令要么缺字段,要么根本没型号信息。
为什么 dmidecode -t memory 是唯一靠谱的命令
内存条的型号(Part Number)、厂商(Manufacturer)、序列号(Serial Number)这些硬件级字段,只存在于 BIOS/UEFI 固件写入的 SMBIOS 表里。dmidecode 是唯一能直接解析这个表的工具。其他常见命令全不满足要求:
-
/proc/meminfo只有总量和使用量,压根不存物理条信息 -
lshw -class memory可能显示bank:和clock:,但Part Number经常为空或写成NO DIMM -
strings /sys/firmware/dmi/tables/DMI能绕过权限问题,但输出是扁平字符串流,Part Number容易被上下文污染或漏匹配
dmidecode -t memory 输出里哪些字段真有用
不是所有字段都稳定可靠,不同主板 BIOS 填写习惯差异大。重点关注这六个:
-
Size:—— 必须是[0-9]+ [MG]B,不是No Module Installed -
Locator:或Bank Locator:—— 插槽物理标识,如DIMM_A1、BANK 0 -
Type:—— DDR4 / DDR5 / LPDDR4 等,注意不是Type Detail: -
Speed:—— 单位通常是MT/s(如3200 MT/s),不是 MHz -
Manufacturer:—— 常见值:Samsung、Micron、SK Hynix,有些 OEM 写成十六进制字符串(如7F7F7F7F7F510000) -
Part Number:—— 型号编码,如M378A2K43CB2-CTD,这是查 datasheet 的唯一依据
Serial Number: 大概率为空或 Not Specified,这不是命令问题,是很多 DIMM 本身没烧录或 BIOS 没填。
怎么过滤出真实插着的内存条,避开空槽和错行
直接 grep Part Number: 会把 A 槽的 Part Number: 和 B 槽的 Speed: 拼在一起——这是最常踩的坑。必须按每个内存设备块(即每个 Handle)切分处理:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
推荐这条实操命令(2026 年主流发行版已验证):
sudo dmidecode -t memory | awk '/^Handle / {if (size && part) print slot, size, part, speed, manufacturer; slot=""; size=""; speed=""; part=""; manufacturer=""} /Slot:/ {slot=$0} /Locator:/ {slot=$0} /Size: [0-9]+ [MG]B$/ {size=$0} /Part Number:/ {part=$0} /Speed:/ {speed=$0} /Manufacturer:/ {manufacturer=$0} END {if (size && part) print slot, size, part, speed, manufacturer}' | grep -v "No Module Installed"
它做了三件事:
- 用
^Handle识别每个内存设备边界,确保所有字段来自同一根条 - 跳过
Size: No Module Installed的空插槽,不污染结果 - 只在同时捕获到
Size:和Part Number:时才输出,避免字段错位
遇到 Permission denied 或全是 Not Specified 怎么办
如果 sudo dmidecode -t memory 报错或输出大量 Not Specified,说明当前环境受限或固件未填全:
- 先确认是否真有 root 权限:
sudo -l | grep dmidecode,有些安全加固系统禁用了/dev/mem访问 - 虚拟机里基本无效 —— 大多数 hypervisor 不透传 SPD 数据,
dmidecode只能返回模拟值 - 笔记本或老旧主板常见 BIOS 未填写 SPD 字段,此时
Speed:和Part Number:就是空的,换工具也没用 - 可临时用
sudo lshw -class memory | grep -A5 "bank:"看插槽数和description:,但别信它的product:字段 —— 那是内核猜的,不是真实型号
真正难搞的不是命令不会用,而是 BIOS 没写、SPD 芯片没响应、或者你正坐在一台连 SMBIOS 表都懒得填的白牌服务器上。










