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
You can download the bios firmwares from the official lenovo servers:
Those files can be extracted with
$ 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  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
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.
# 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.
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.
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.