Initial Deployment
Initial deployment of Dasharo firmware on MSI PRO Z690-A and PRO Z790-P can be done:
- using DTS,
- manually.
Initial deployment using DTS
To ensure a smooth deployment process, it is recommended to use the latest version of DTS available from the releases page. Once you have obtained it, you can then proceed with following the Dasharo zero-touch initial deployment section procedure. This will help you set up Dasharo effectively and without manual intervention.
Initial deployment manually
Flashing coreboot can be done from Linux using flashrom with the internal programmer. This document describes the process of building, installing and running flashrom on Ubuntu 22.04.
Build flashrom
Please follow generic guide for Dasharo flashrom fork.
Flashing
All flash operations require UEFI Secure Boot to be disabled. You may download
the binary using scp
(need to install openssh-server package) or wget
command. The binaries can be found on the
Reading flash contents
Always prepare a backup of the current firmware image. To read the original
firmware from the flash and save it to a file (dump.rom
), execute the
following command:
sudo flashrom -p internal -r dump.rom
IMPORTANT! You will need a second USB storage to keep the dumped firmware backup or alternatively upload it to some cloud or network drive (Ubuntu live has a Firefox browser installed). Ubuntu live image is volatile and has no persistent storage. All changes made in the live image will be lost after reboot.
Migrating SMBIOS unique data
To migrate the SMBIOS system UUID and board serial number follow the Linux instructions below before attempting to flash the binary. The procedure is supported on Dasharo version v1.0.0 and later and requires cbfstool built from coreboot tree. Follow the Building Manual using the Z690-A v1.0.0/Z790-P v0.9.0 version or newer and then:
echo -n `sudo dmidecode -s system-uuid` > system_uuid.txt
echo -n `sudo dmidecode -s baseboard-serial-number` > serial_number.txt
# assuming in coreboot root directory
./build/cbfstool build/coreboot.rom expand -r FW_MAIN_A
./build/cbfstool build/coreboot.rom expand -r FW_MAIN_B
./build/cbfstool build/coreboot.rom add \
-f serial_number.txt -n serial_number -t raw -r FW_MAIN_A
./build/cbfstool build/coreboot.rom add \
-f serial_number.txt -n serial_number -t raw -r FW_MAIN_B
./build/cbfstool build/coreboot.rom add \
-f serial_number.txt -n serial_number -t raw -r COREBOOT
./build/cbfstool build/coreboot.rom add \
-f system_uuid.txt -n system_uuid -t raw -r FW_MAIN_A
./build/cbfstool build/coreboot.rom add \
-f system_uuid.txt -n system_uuid -t raw -r FW_MAIN_B
./build/cbfstool build/coreboot.rom add \
-f system_uuid.txt -n system_uuid -t raw -r COREBOOT
./build/cbfstool build/coreboot.rom truncate -r FW_MAIN_A
./build/cbfstool build/coreboot.rom truncate -r FW_MAIN_B
One may use msi_ms7d25_v1.1.1_ddr4.rom
(or newer) binary directly and
simply build the cbfstool only from coreboot repository:
git clone https://github.com/Dasharo/coreboot -b msi_ms7d25/release
cd coreboot
make -C util/cbfstool
echo -n `sudo dmidecode -s system-uuid` > system_uuid.txt
echo -n `sudo dmidecode -s baseboard-serial-number` > serial_number.txt
# assuming in coreboot root directory
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr4.rom expand -r FW_MAIN_A
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr4.rom expand -r FW_MAIN_B
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr4.rom add \
-f serial_number.txt -n serial_number -t raw -r FW_MAIN_A
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr4.rom add \
-f serial_number.txt -n serial_number -t raw -r FW_MAIN_B
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr4.rom add \
-f serial_number.txt -n serial_number -t raw -r COREBOOT
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr4.rom add \
-f system_uuid.txt -n system_uuid -t raw -r FW_MAIN_A
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr4.rom add \
-f system_uuid.txt -n system_uuid -t raw -r FW_MAIN_B
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr4.rom add \
-f system_uuid.txt -n system_uuid -t raw -r COREBOOT
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr4.rom truncate -r FW_MAIN_A
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr4.rom truncate -r FW_MAIN_B
One may use msi_ms7d25_v1.1.1_ddr5.rom
(or newer) binary directly and
simply build the cbfstool only from coreboot repository:
git clone https://github.com/Dasharo/coreboot -b msi_ms7d25/release
cd coreboot
make -C util/cbfstool
echo -n `sudo dmidecode -s system-uuid` > system_uuid.txt
echo -n `sudo dmidecode -s baseboard-serial-number` > serial_number.txt
# assuming in coreboot root directory
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr5.rom expand -r FW_MAIN_A
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr5.rom expand -r FW_MAIN_B
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr5.rom add \
-f serial_number.txt -n serial_number -t raw -r FW_MAIN_A
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr5.rom add \
-f serial_number.txt -n serial_number -t raw -r FW_MAIN_B
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr5.rom add \
-f serial_number.txt -n serial_number -t raw -r COREBOOT
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr5.rom add \
-f system_uuid.txt -n system_uuid -t raw -r FW_MAIN_A
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr5.rom add \
-f system_uuid.txt -n system_uuid -t raw -r FW_MAIN_B
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr5.rom add \
-f system_uuid.txt -n system_uuid -t raw -r COREBOOT
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr5.rom truncate -r FW_MAIN_A
./util/cbfstool/cbfstool /path/to/msi_ms7d25_v1.1.1_ddr5.rom truncate -r FW_MAIN_B
One may use msi_ms7e06_v0.9.0_ddr4.rom
(or newer) binary directly and
simply build the cbfstool only from coreboot repository:
git clone https://github.com/Dasharo/coreboot -b msi_ms7d25/release
cd coreboot
make -C util/cbfstool
echo -n `sudo dmidecode -s system-uuid` > system_uuid.txt
echo -n `sudo dmidecode -s baseboard-serial-number` > serial_number.txt
# assuming in coreboot root directory
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr4.rom expand -r FW_MAIN_A
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr4.rom expand -r FW_MAIN_B
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr4.rom add \
-f serial_number.txt -n serial_number -t raw -r FW_MAIN_A
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr4.rom add \
-f serial_number.txt -n serial_number -t raw -r FW_MAIN_B
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr4.rom add \
-f serial_number.txt -n serial_number -t raw -r COREBOOT
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr4.rom add \
-f system_uuid.txt -n system_uuid -t raw -r FW_MAIN_A
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr4.rom add \
-f system_uuid.txt -n system_uuid -t raw -r FW_MAIN_B
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr4.rom add \
-f system_uuid.txt -n system_uuid -t raw -r COREBOOT
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr4.rom truncate -r FW_MAIN_A
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr4.rom truncate -r FW_MAIN_B
One may use msi_ms7e06_v0.9.0_ddr5.rom
(or newer) binary directly and
simply build the cbfstool only from coreboot repository:
git clone https://github.com/Dasharo/coreboot -b msi_ms7d25/release
cd coreboot
make -C util/cbfstool
echo -n `sudo dmidecode -s system-uuid` > system_uuid.txt
echo -n `sudo dmidecode -s baseboard-serial-number` > serial_number.txt
# assuming in coreboot root directory
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr5.rom expand -r FW_MAIN_A
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr5.rom expand -r FW_MAIN_B
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr5.rom add \
-f serial_number.txt -n serial_number -t raw -r FW_MAIN_A
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr5.rom add \
-f serial_number.txt -n serial_number -t raw -r FW_MAIN_B
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr5.rom add \
-f serial_number.txt -n serial_number -t raw -r COREBOOT
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr5.rom add \
-f system_uuid.txt -n system_uuid -t raw -r FW_MAIN_A
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr5.rom add \
-f system_uuid.txt -n system_uuid -t raw -r FW_MAIN_B
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr5.rom add \
-f system_uuid.txt -n system_uuid -t raw -r COREBOOT
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr5.rom truncate -r FW_MAIN_A
./util/cbfstool/cbfstool /path/to/msi_ms7e06_v0.9.0_ddr5.rom truncate -r FW_MAIN_B
Note you will need to resign the binary after adding the SMBIOS data. Please check Vboot documentation how to resign the data. It is the machine owner's responsibility to generate and use own keys during updates.
Flashing Dasharo
WARNING: If you use an external/discrete GPU and migrate to Dasharo, be sure to unplug the dGPU first (when the machine is powered off before proceeding with flashing), as Dasharo firmware does not support all GPU cards properly yet (as of version v1.0.0). There is a high risk for the graphical output to break in the firmware when dGPU is connected. Effectively it leaves the only option to boot in blind into a previously installed OS (if the platform does not brick and if an OS is present on a disk). The first boot may take up to 2 minutes to fully train the memory, so be patient and wait for the Dasharo logo to appear, subsequent boots will take only seconds. MSI EZ debug leds are not supported by Dasharo and you may notice a red led to be lit. If the platform boots with an integrated GPU, you may try to plug the external GPU back and boot again.
To flash Dasharo on the platform, execute the following command:
Replace the
VERSION
in firmware file name with the version you want to flash. For example:msi_ms7d25_v1.1.1_ddr4.rom
.
sudo flashrom -p internal -w msi_ms7d25_vVERSION_ddr4.rom --ifd -i bios
Replace the
VERSION
in firmware file name with the version you want to flash. For example:msi_ms7d25_v1.1.1_ddr5.rom
.
sudo flashrom -p internal -w msi_ms7d25_vVERSION_ddr5.rom --ifd -i bios
Replace the
VERSION
in firmware file name with the version you want to flash. For example:msi_ms7e06_v0.9.0_ddr4.rom
.
sudo flashrom -p internal -w msi_ms7e06_vVERSION_ddr4.rom --ifd -i bios
Replace the
VERSION
in firmware file name with the version you want to flash. For example:msi_ms7e06_v0.9.0_ddr5.rom
.
sudo flashrom -p internal -w msi_ms7e06_vVERSION_ddr5.rom --ifd -i bios
IMPORTANT! After the command succeeds, invoke sudo reboot
or click the
reboot/restart in the GUI to reboot the board. Press ENTER
when prompted on
the screen to remove the installation media (if Ubuntu live is used). DO NOT
POWEROFF THE BOARD as SMI handlers of original MSI firmware may overwrite flash
contents and cause a brick.
After migration from MSI firmware to Dasharo and reboot, the firmware will fail the memory training. After reboot wait approximately 30 seconds and then power the board off by holding the power button pushed for 5 seconds. Dasharo v1.1.0 or newer will signal the memory training failure with PC speaker beeps and blinking SATA LED. When it happens use the power button to power the board off (no need to wait 30 seconds in such case). Power on the board back. Now the memory training should not fail and after approximately 1 minute (can be nearly 2 minutes for DDR5 memory), you should get a Dasharo splash screen on the monitor. Subsequent boots will take only a few seconds.
Flashing back vendor firmware
sudo flashrom -p internal -w dump.rom --ifd -i bios
NOTE: Dasharo version v0.1.0 will not have a network connection. Use a different USB storage or a USB to Ethernet/USB WiFi adapter to move the binary to the live system.
coreboot + Heads
The supported method is to follow initial deployment, and then the Transition from Dasharo UEFI to Heads variant.