Hello,
I own a Thinkpad X230t and I encountered Coreboot project on the Internet. I enjoy FOSS stuff, and also I would like to change my WWAN/WLAN cards in my computer so I decided to switch from proprietary Lenovo UEFI firmware to Coreboot. By the way I found that those Thinkpads are well supported by the project and it is favorable model to use with Coreboot firmware.
I use Windows 7 x64 in UEFI-CSM mode as my main OS. My disk is partitioned with GPT. By the way, unfortunately Windows 7 x64 only allows only these configurations: - BIOS or UEFI Legacy Mode firmware + MBR partition table and bootloader in MBR of the disk drive and/or VBR of the system partition - UEFI CSM (non-GOP, Int 10h) firmware + GPT partition table and bootloader in seperate EFI System Partition
So I cannot get for example BIOS/UEFI-Legacy + GPT partition table + bootloader in Protective MBR with Windows 7.
I started my experience with Coreboot building like 15 different image's using different parameters in 'make menuconfig' so I can find out what is well-suited for me. By the way I also bricked my laptop like 3 times, but that wasn't a problem because I have access to external programmer. All these builds I've made using SeaBIOS primary payload and like 1 with Tianocore. I used SeaBIOS at first because I recognized it simpler than Tianocore so first I can distinguish Coreboot features from primary payload features, and then switch to Tianocore. I got problems with libgfxinit on Xubuntu 20.04 LTS Installer (MBR SYSLINUX+grub) and also with Windows 7 x64 MBR installer, so I extracted VGA BIOS from proprietary Lenovo UEFI, included it as an Option ROM and it solved my problems.
However, with SeaBIOS I couldn't access my Windows 7 x64 UEFI-CSM Int 10h HDD installation. It got stuck on Booting from Hard Drive probably because there is like NOP loop in the Protective MBR of GPT-partitioned drive. I made 3 different MBR/BIOS images on thumbdrives in order to test the SeaBIOS: - Xubuntu 20.04 Installer+LiveCD with SYSLINUX+GRUB - installed Xubuntu 20.04 LTS with GRUB - Windows 7 x64 Installer in MBR mode
I got all of these running well, but I still have problem with my main OS on the HDD. Of course, with standard SeaBIOS I am not able to boot my Windows installation because it's GPT/ESP-enabled and it cannot boot from the MBR.
So I changed my primary payload to Tianocore and chose to boot up the BOOTX64.EFI from Windows 7 ESP partition and it resulted with black screen having some different artifacts like few color strips. I guess that's because Tianocore is only supporting UEFI Level 3 (UEFI non-CSM) and thus it doesn't initialize Int 10h vector and assumes that the operating system will initialize graphics using UEFI GOP, which is not the case with Windows 7. In my earlier experiments, I had exactly the same artifacts when I tried to switch UEFI-CSM to UEFI-non CSM on Desktop Gigabyte motherboard with stock proprietary firmware and I gave it up, because I found out that it's impossible to have Windows 7 support UEFI Level 3 with GOP initialization.
Before I found out about Coreboot I didn't even realize that BIOS/UEFI firmware can be split in 2 stages like it is in Coreboot + SeaBIOS/Tianocore. I'm looking for a solution so I can boot up my UEFI-CSM Int 10h Windows 7 x64 installation. I don't know what architecture should I be looking for: - run SeaBIOS as primary payload so it properly initializes the Int 10h along with Intel HD Graphics Option ROM, then run some sort of UEFI secondary payload - run Tianocore as primary load and force it to initialize the Int 10h using some hidden flags during compilation, or just run SeaBIOS somehow as an secondary payload By the way, how it's solved in usual proprietary UEFI-CSM firmware?
Regarding first option, I found something such as DuetPkg from Tianocore/EDK-II project which allows to boot this stuff using BIOS from MBR thumbdrive/disk or even as secondary payload of SeaBIOS. Unfortunately I found out that this project was abandoned by Tianocore community like 2 years ago. I also found out patched version of Duet for Coreboot on https://www.notabs.org/coreboot/duet-payload/ , but it hasn't been maintained since 2014 and I don't know if I can trust these patches. I guess that would be the case for me, but since it hasn't been maintained for few years, maybe there's a more modern solution for my problem? As I understand Tianocore is something more than DuetPkg so I cannot use it as SeaBIOS secondary payload because some parts of it would double their responsibility with SeaBIOS routines?
Regarding second option, I found on the Internet information that SeaBIOS can be compiled with option to be the CSM payload of something what is called OVMF which I understand to be Tianocore firmware for virtual machines such as qemu.
Could some more experienced users (perhaps developers) give me a hint which solution I should be looking for, and maybe give some more advise about particular packages and tools which I could solve my problem by?
Best regards, geekyTPuser
TianoCore has a small video shim that handles W7 INT 10h requeriments without needing SeaBIOS or anything else. Check here the Video Driver section about QemuVideoDxe: https://www.linux-kvm.org/downloads/lersek/ovmf-whitepaper-c770f8c.txt That is used by OVMF (TianoCore for Virtual Machines), thus Windows 7 works in pure UEFI VMs out-of-the-box without SeaBIOS as CSM or anything else.
I don't know whenever the video shim is used by default in TianoCore or not, but it should be able to get a Windows 7 in UEFI mode working. Some people even forked that shim to use in computers with pure UEFI Firmwares that doesn't have CSM, but you shouldn't need those. So I would begin by asking about whenever the shim is in current TianoCore payloads, and whenever you need to do something Windows side to migrate from UEFI with CSM to pure UEFI modes.