Lenovo Yoga Slim 7
CPU: AMD Ryzen 7 4800U - Renoir (Zen 2)
8x1.8GHz (max. 4.2GHz) - 16 Threads
4MB L2-Cache
8MB L3-Cache
10-25W cTDP
GPU: AMD Radeon RX Vega 8 (integrated)
8x1.75GHz
RAM: 16GB LPDDR4X
Display: 14" IPS (1920x1080px)
300 Nits
Camera: HD infrared
Wifi: Intel Corporation Wi-Fi 6 AX200
802.11ax
Battery: 1mAh (Li-Polymer 60.7Wh)
up to 17.5 hours
Weight: 1.4kg
Boot interrupt keys
| Key | Description |
| --- | ------------ |
| F2 | Enter BIOS |
| F12 | Boot-Manager |
Journey to BIOS
Official Download
You can download the bios firmwares from the official lenovo servers:
Those files can be extracted with innoextract
$ innoextract dmcn32ww.exe
Extracting "Lenovo BIOS Update Utility" - setup data version 5.5.7 (unicode)
- "code$GetExtractPath/Win64.bat"
- "code$GetExtractPath/WIN64.exe"
Done.
# cd code\$GetExtractPath
# 7z x WIN64.exe -o bios
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,16 CPUs AMD Ryzen 7 2700X Eight-Core Processor (800F82),ASM,AES-NI)
Scanning the drive for archives:
1 file, 6429646 bytes (6279 KiB)
Extracting archive: WIN64.exe
WARNING:
WIN64.exe
Can not open the file as [PE] archive
The file is open as [7z] archive
--
Path = WIN64.exe
Open WARNING: Can not open the file as [PE] archive
Type = 7z
Offset = 590965
Physical Size = 5838681
Headers Size = 508
Method = LZMA:24 BCJ
Solid = +
Blocks = 2
Everything is Ok
Archives with Warnings: 1
Files: 15
Size: 23024732
Compressed: 6429646
Reverse engineering
We need to discover what kind of BIOS is in place for our Yoga device.
Linux kernel provides a DMI interface in sysfs that shows some manufacturer specific strings.
Let's check /sys/class/dmi/id/bios_*
# cat /sys/class/dmi/id/bios_date
07/14/2020
# cat /sys/class/dmi/id/bios_release
1.32
# cat /sys/class/dmi/id/bios_vendor
LENOVO
# cat /sys/class/dmi/id/bios_version
DMCN32WW
So kernel says it's from lenovo itself. Maybe we're lucky and Lenovo changed the vendor string while customizing a well known BIOS firmware.
Extract BIOS
It seems like the downloaded BIOS archive is full of unknown stuff but it shows files called H2OFFT-Wx64.exe
- the Flash Firmware Tool of Insyde Software.
Wait, didn't I saw an insyde-tools
directory in coreboot/bios_extract? Yarp but narp.
That repo wasn't updated for a long time and ironically the necessary insyde-tools
are depending on old, outdated, orphaned and long time replaced lzma utils.
Fix lzma-utils dependency
# cd bios_extract/insyde-tools
# python2 main.py master
Traceback (most recent call last):
File "main.py", line 35, in <module>
from lzma import get_lzma_chunks
File "/tmp/bios_extract/insyde-tools/lzma.py", line 89, in <module>
"Couldn't find `liblzmadec.so`. Please install lzma_utils.\n"
AssertionError: Couldn't find `liblzmadec.so`. Please install lzma_utils.
I prepared a PKGBUILD to package the last version in this arch package
pacman -U lzma-utils-4.32.7-1-x86_64.pkg.tar.zst
A lot more issues
# python2 main.py
Reading BIOS data..
[ --------------------------------------------------------------------------> ]
Saving BIOS to 'data/original_bios_backup1.fd' md5:fa2fe61392c18d19ec8407fc642394ea
Operating on BIOS data/original_bios_backup1.fd size = 0x200000
Loading compressed sections
.. found 0 compressed sections
Locating Firmware Volumes
.. found 2 FirmwareVolumes (0 compressed)
Traceback (most recent call last):
File "main.py", line 473, in <module>
main()
File "main.py", line 468, in main
bios = BIOS()
File "main.py", line 259, in __init__
setup_utility = self.locate_setup_utility(vol_compr)
File "main.py", line 408, in locate_setup_utility
raise RuntimeError("Shouldn't get here, seems we couldn't "
RuntimeError: Shouldn't get here, seems we couldn't find the SetupUtility :/
OK, accepted - as for now. Tools are quiet old and things changed - probably the fact that laptops are badly supported in all bios related things will be a point here as well.
The journey ends here with a dumped bios file that looks good but needs further investigation and understanding of the file format.