How can I set smbios in Orin NX Ubuntu system in mass production?

Hi Nvidia,

I follow nvidia uefi wiki document to modify smbios type 1/2/3.
https://github.com/NVIDIA/edk2-nvidia/wiki/Smbios

I can set the smbios value and get them by dmidecode.

How can I set smbios in Orin NX Ubuntu system?
Does nvidia have any tool to set dmi information?
We want to set the serial number of product in mass production.
But we can’t modify uefi release file for every device.

Please help us.

Hi Wilson_Lin,

Are you using the devkit or custom board for Orin NX?
What’s your Jetpack version in use?

Serial number comes from EEPROM and UEFI adds that to SMBIOS.
It seems no change is needed here.

You could refer to Jetson EEPROM Layout for serial number.

Hi Kevin,

I’m using our custom board.
I know the EEPROM has the SN of Orin NX module.

But we product the all system include custom board, chassis, and system image.
We want to add our SN for the full system product.
It’s convenience for us to mantain and record the system product.

Have you tried to add custom information in EEPROM of “Customer-overwritable section.”?

Hi Kevin,

I can set the value of EEPROM byte 221-235.
But how can I let the SMBIOS SN read the byte 221-235?

Please check how SMBIOS read byte 74–88.

Hi Kevin,

I let the SMBIOS read byte 221-235.
But this way seems that is not following the uefi and smbios spec.

I have some questiions.
In x86, the SMBIOS info is saved in the nvram.
And we can change the SMBIOS info in the Ubuntu OS system in anytime by some tools of the BIOS vender.

In the Orin NX, where is the SMBIOS saved? Is it just only modify by uefi source code?
Or we can change the settings or info by some tools in the Ubuntu system by anytime?

SMBIOS tables are created from info from chip and platform.
UEFI generates info at boot time and passes that to OS.

Hi Kevin,

So We can’t modify the SMBIOS by the Ubuntu command line or tools?

Which table would you like to update for SMBIOS?

Hi Kevin,

We want to set the type 1/2/3 at least.
Because we want to sell the system to the custmer.
They can set the smbios of their company and sell the system to the end user.

In x86, we can do this way easily.

Can you dump dmidecode from OS and share with us?

Hi Kevin,

# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 3.6.0 present.
# SMBIOS implementations newer than version 3.2.0 are not
# fully supported by this version of dmidecode.
Table at 0x469B50000.

Handle 0x0000, DMI type 0, 26 bytes
BIOS Information
	Vendor: EDK II
	Version: 202401.0-d8a952cf-dirty
	Release Date: 01/18/2024
	ROM Size: 0 MB
	Characteristics:
		PCI is supported
		PNP is supported
		BIOS is upgradeable
		BIOS shadowing is allowed
		Boot from CD is supported
		Selectable boot is supported
		ACPI is supported
		Targeted content distribution is supported
		UEFI is supported
	BIOS Revision: 0.0
	Firmware Revision: 0.0

Handle 0x0001, DMI type 1, 27 bytes
System Information
	Manufacturer: TestMF
	Product Name: Product1
	Version: Not Specified
	Serial Number: 1234567890abc
	UUID: Not Settable
	Wake-up Type: Power Switch
	SKU Number: SKU
	Family: Family

Handle 0x0002, DMI type 3, 25 bytes
Chassis Information
	Manufacturer: TestMF
	Type: Other
	Lock: Not Present
	Version: Ver333
	Serial Number: 333333
	Asset Tag: 699-13767-0000-300 G.3
	Boot-up State: Unknown
	Power Supply State: Unknown
	Thermal State: Unknown
	Security Status: Unknown
	OEM Information: 0x00000000
	Height: 1 U
	Number Of Power Cords: 1
	Contained Elements: 0
	SKU Number: 3SKU

Handle 0x0003, DMI type 2, 17 bytes
Base Board Information
	Manufacturer: TestMF
	Product Name: Product1
	Version: Not Specified
	Serial Number: 1234567890abc
	Asset Tag: 699-13767-0000-300 G.3
	Features:
		Board is a hosting board
		Board is replaceable
	Location In Chassis: CL
	Chassis Handle: 0x0002
	Type: Motherboard
	Contained Object Handles: 0

Handle 0x0004, DMI type 13, 22 bytes
BIOS Language Information
	Language Description Format: Long
	Installable Languages: 1
		en|US|iso8859-1
	Currently Installed Language: en|US|iso8859-1

Handle 0x0005, DMI type 32, 11 bytes
System Boot Information
	Status: No errors detected

Handle 0x0006, DMI type 7, 27 bytes
Cache Information
	Socket Designation: L1 Instruction Cache
	Configuration: Enabled, Not Socketed, Level 1
	Operational Mode: Unknown
	Location: Unknown
	Installed Size: 512 kB
	Maximum Size: 512 kB
	Supported SRAM Types:
		Unknown
	Installed SRAM Type: Unknown
	Speed: Unknown
	Error Correction Type: Unknown
	System Type: Instruction
	Associativity: 4-way Set-associative

Handle 0x0007, DMI type 7, 27 bytes
Cache Information
	Socket Designation: L1 Data Cache
	Configuration: Enabled, Not Socketed, Level 1
	Operational Mode: Unknown
	Location: Unknown
	Installed Size: 512 kB
	Maximum Size: 512 kB
	Supported SRAM Types:
		Unknown
	Installed SRAM Type: Unknown
	Speed: Unknown
	Error Correction Type: Unknown
	System Type: Data
	Associativity: 4-way Set-associative

Handle 0x0008, DMI type 7, 27 bytes
Cache Information
	Socket Designation: L2 Cache
	Configuration: Enabled, Not Socketed, Level 2
	Operational Mode: Unknown
	Location: Unknown
	Installed Size: 2048 kB
	Maximum Size: 2048 kB
	Supported SRAM Types:
		Unknown
	Installed SRAM Type: Unknown
	Speed: Unknown
	Error Correction Type: Unknown
	System Type: Unified
	Associativity: 8-way Set-associative

Handle 0x0009, DMI type 7, 27 bytes
Cache Information
	Socket Designation: L3 Cache
	Configuration: Enabled, Not Socketed, Level 3
	Operational Mode: Unknown
	Location: Unknown
	Installed Size: 16384 kB
	Maximum Size: 16384 kB
	Supported SRAM Types:
		Unknown
	Installed SRAM Type: Unknown
	Speed: Unknown
	Error Correction Type: Unknown
	System Type: Unified
	Associativity: 16-way Set-associative

Handle 0x000A, DMI type 4, 50 bytes
Processor Information
	Socket Designation: Not Specified
	Type: Central Processor
	Family: ARMv8
	Manufacturer: NVIDIA
	ID: 23 00 6B 03 01 04 00 00
	Signature: Implementor 0x03, Variant 0x6, Architecture 11, Part 0x002, Revision 3
	Version: Not Specified
	Voltage: Unknown
	External Clock: 31 MHz
	Max Speed: Unknown
	Current Speed: Unknown
	Status: Populated, Enabled
	Upgrade: Unknown
	L1 Cache Handle: 0x0007
	L2 Cache Handle: 0x0008
	L3 Cache Handle: 0x0009
	Serial Number: Not Specified
	Asset Tag: Not Specified
	Part Number: Not Specified
	Core Count: 8
	Core Enabled: 8
	Thread Count: 8
	Characteristics:
		64-bit capable
		Execute Protection

Handle 0x000B, DMI type 16, 23 bytes
Physical Memory Array
	Location: System Board Or Motherboard
	Use: System Memory
	Error Correction Type: Single-bit ECC
	Maximum Capacity: 16 GB
	Error Information Handle: Not Provided
	Number Of Devices: 1

Handle 0x000C, DMI type 19, 31 bytes
Memory Array Mapped Address
	Starting Address: 0x00080000000
	Ending Address: 0x0046EA6FFFF
	Range Size: 16106 MB
	Physical Array Handle: 0x000B
	Partition Width: 1

Handle 0x000D, DMI type 19, 31 bytes
Memory Array Mapped Address
	Starting Address: 0x00472000000
	Ending Address: 0x00473FFFFFF
	Range Size: 32 MB
	Physical Array Handle: 0x000B
	Partition Width: 1

Handle 0xFEFF, DMI type 127, 4 bytes
End Of Table

Hi Kevin,

Do you have any idea of this question?

Sorry for the late reply, I’m still checking this issue with internal and will update to you next week.

I too would like to know how I can set DMI/SMBIOS information. It seems like our carrier board can be thought of as a motherboard, so I would like to set baseboard-manufacturer and baseboard-product-name at the very least.

Any updates on this @KevinFFF ?

Hi alex76,

What’s your Jetpack version in use?

Do you mean that you want to change the SMBIOS table of Type 1?

Jetpack 6.1 / L4T 36.4.0

I am unfamiliar with the details of SMBIOS, but I think so(?). baseboard-manufacturer and baseboard-product-name are the terms I see used in dmidecode documentation.

Currently I see the following output when flashed with my customized BSP for our carrier. This seems like it would be confusing to my end users because it looks like this is an NVIDIA developer kit, not a custom carrier board.

$ sudo dmidecode -t 2

# dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 3.6.0 present.
# SMBIOS implementations newer than version 3.5.0 are not
# fully supported by this version of dmidecode.

Handle 0x0003, DMI type 2, 17 bytes
Base Board Information
	Manufacturer: NVIDIA
	Product Name: Jetson
	Version: Not Specified
	Serial Number: 1420123013698
	Asset Tag: 699-13767-0000-300 G.3
	Features:
		Board is a hosting board
		Board is replaceable
	Location In Chassis: Unknown
	Chassis Handle: 0x0002
	Type: Motherboard
	Contained Object Handles: 0

If I am asking for something that doesn’t make sense, just let me know. I am not yet familiar with the details of UEFI, SMBIOS, or DMI. I just wanted my end users to be able to run a tool like dmidecode remotely and see that the NVIDIA SoM is in a carrier by my company.

Thanks!

Does the current sudo dmidecode -t 2 meet your requirement?
Your end user can use ssh to access the board and run that command to get those detail information.

Okay, it seems you want to add some your custom info there.

Do you use the custom board config to flash your custom carrier board?
If so, then $ cat /etc/nv_boot_control.conf would also show your custom board config info.

You can refer to OemUpdateSmbiosInfo() in edk2-nvidia/Silicon/NVIDIA/Library/OemMiscLib/OemMiscLib.c at r36.4.0-updates · NVIDIA/edk2-nvidia · GitHub where we update SMBIOS table.

You can simply modify PCDs in NVIDIA.common.dsc.inc to customize for your use case.