Hi,
Good to know, I actually at one point did the same (extract working Tianocore from coreboot binary), so maybe that's how it worked.

Did you figure out why it works when you extract it, but not if you just add the built blob?

Rafael

On Mon, Mar 23, 2020 at 11:44 PM Dalao <dalao@tutanota.com> wrote:
> I did have some trouble getting this to work correctly. I believe you must add it to cbfs with "add-payload" and not just as a regular file.
> If that doesn't work let us know, I'll take a look at what exactly I did.

Thank you, with the help of people on irc, now I have been able to make it work. At first I used the UEFIPAYLOAD.fd in tianocore's build output folder, it does not work. Then I extracted it from coreboot.rom, and it works. I will document the process for maybe someone will find this useful in the future:

Firstly I follow this guide to build seabios (https://github.com/librecore-org/librecore/wiki/Chainloading-SeaBIOS-from-a-GRUB-payload). But I just use the bios.bin.elf I did not use that vgabios.bin that display is not good on T420.

Next I build coreboot and select tianocore as payload, and then extract it.
cbfstool ./build/coreboot.rom extract -m x86 -n fallback/payload -f ./GrubPayloads/tianocore

Then I build coreboot again and select GRUB as payload with high-resulotion framebuffer, and add SeaBIOS, Tianocore and grub.cfg
cbfstool ./build/coreboot.rom add -n elf/seabios.elf -f ./GrubPayloads/bios.bin.elf -t raw
cbfstool ./build/coreboot.rom add-payload -n img/tianocore -f ./GrubPayloads/tianocore
cbfstool ./build/coreboot.rom add -n etc/grub.cfg -f ./GrubPayloads/grub.cfg -t raw

This will work, but without VBG BIOS, the DP output does not work on T420. So I add the VGA BIOS blob.
cbfstool ./build/coreboot.rom add -f pci8086,0166.rom -n pci8086,0166.rom -t optionrom



2020年3月24日 02:05 来自 flyingfishfinger@gmail.com:
Hi,
I did have some trouble getting this to work correctly. I believe you must add it to cbfs with "add-payload" and not just as a regular file.
If that doesn't work let us know, I'll take a look at what exactly I did.

Good luck,
R

On Sat, Mar 21, 2020 at 6:08 AM Dalao <dalao@tutanota.com> wrote:
> FWIW I use Grub to load either SeaBIOS or Tianocore at boot, defaulting to Tianocore for this exact problem. Hope that's of some help :)

Cool! This is what I want. I have followed this tutorial (https://github.com/librecore-org/librecore/wiki/Chainloading-SeaBIOS-from-a-GRUB-payload) and now I'm able to use Grub to chainload SeaBIOS. But in order to load Tianocore, it appears there is no tutorial online. I tried to use the above method to chainload the Tianocore's build output file UEFIPAYLOAD.fd, but it can't load. So how you achieved this?


Mar 21, 2020, 5:55 AM by flyingfishfinger@gmail.com:
FWIW I use Grub to load either SeaBIOS or Tianocore at boot, defaulting to Tianocore for this exact problem. Hope that's of some help :)

R

On Fri, Mar 20, 2020 at 1:35 PM Dalao via coreboot <coreboot@coreboot.org> wrote:
> The Tianocore package which ran on top of SeaBIOS, DuetPkg, was remove long ago, so that's not a viable approach (and it was buggy AF anyway). You'd need to build SeaBIOS as a CSM, package it with Tianocore, and add the appropriate hooks. Then debug from there

It appears building SeaBIOS as CSM for Tianocore is quite hard and I have searched around there is no guide. Could we build two roms and use something like coreboot's fallback mechanism feature to achieve the hybrid boot goal? Like default to boot in Tianocore image but with an option to reboot to SeaBIOS image...


Mar 15, 2020, 15:45 by matt.devillier@gmail.com:


On Sat, Mar 14, 2020, 11:02 PM Dalao <dalao@tutanota.com> wrote:
> SeaBIOS is a legacy BIOS implementation, so no it can't boot UEFI boot media. Likewise, Tianocore is a pure UEFI implementation, and doesn't boot legacy boot media / legacy installed OSes. There should be a way to use SeaBIOS as a CSM for Tianocore, but currently it's not working / not implemented (I tried briefly awhile back but didn't have any luck).

I tried to follow the steps to build tianocore for SeaBIOS https://www.coreboot.org/TianoCore But I get these errors. It says it can't found nmake.exe... Is this should be build on Windows? How to setup the environment?


The Tianocore package which ran on top of SeaBIOS, DuetPkg, was remove long ago, so that's not a viable approach (and it was buggy AF anyway). You'd need to build SeaBIOS as a CSM, package it with Tianocore, and add the appropriate hooks. Then debug from there 


[dalao@pc tianocore2018]$ git clone --branch UDK2018 https://github.com/tianocore/edk2                  
Cloning into 'edk2'...
remote: Enumerating objects: 66, done.
remote: Counting objects: 100% (66/66), done.
remote: Compressing objects: 100% (43/43), done.
remote: Total 342725 (delta 35), reused 31 (delta 23), pack-reused 342659
Receiving objects: 100% (342725/342725), 286.48 MiB | 436.00 KiB/s, done.
Resolving deltas: 100% (247240/247240), done.
Updating files: 100% (15636/15636), done.
[dalao@pc tianocore2018]$ cd edk2/
[dalao@pc edk2]$ cd BaseTools
[dalao@pc BaseTools]$ export EDK_TOOLS_PATH=$(pwd)
[dalao@pc BaseTools]$ cd ../
[dalao@pc edk2]$ . ./edksetup.sh BaseTools
WORKSPACE: /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2
EDK_TOOLS_PATH: /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/BaseTools
CONF_PATH: /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/Conf
Copying $EDK_TOOLS_PATH/Conf/build_rule.template
     to /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/Conf/build_rule.txt
Copying $EDK_TOOLS_PATH/Conf/tools_def.template
     to /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/Conf/tools_def.txt
Copying $EDK_TOOLS_PATH/Conf/target.template
     to /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/Conf/target.txt
[dalao@pc edk2]$ build -p DuetPkg/DuetPkgIa32.dsc
Build environment: Linux-5.4.22-1-MANJARO-x86_64-with-glibc2.2.5
Build start time: 11:48:18, Mar.15 2020

WORKSPACE        = /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2
ECP_SOURCE       = /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/EdkCompatibilityPkg
EDK_SOURCE       = /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/EdkCompatibilityPkg
EFI_SOURCE       = /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/EdkCompatibilityPkg
EDK_TOOLS_PATH   = /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/BaseTools
CONF_PATH        = /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/Conf
POSTBUILD        = /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/DuetPkg/PostBuild.bat -p DuetPkg/DuetPkgIa32.dsc -b DEBUG -a IA32 -t MYTOOLS --conf=/home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/Conf all


Architecture(s)  = IA32
Build target     = DEBUG
Toolchain        = MYTOOLS

Active Platform          = /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/DuetPkg/DuetPkgIa32.dsc
Flash Image Definition   = /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/DuetPkg/DuetPkg.fdf

Processing meta-data ......... done!
Building ... /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf [IA32]
Building ... /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull.inf [IA32]
Building ... /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/MdePkg/Library/BaseMemoryLib/BaseMemoryLib.inf [IA32]
/bin/sh: Vcbinnmake.exe: command not found


build.py...
: error 7000: Failed to execute command
        Vc\bin\nmake.exe /nologo tbuild [/home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/Build/DuetPkgIA32/DEBUG_MYTOOLS/IA32/MdePkg/Library/BasePcdLibNull/BasePcdLibNull]


build.py...
: error 7000: Failed to execute command
        Vc\bin\nmake.exe /nologo tbuild [/home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/Build/DuetPkgIA32/DEBUG_MYTOOLS/IA32/MdePkg/Library/BaseDebugLibNull/BaseDebugLibNull]


build.py...
: error 7000: Failed to execute command
        Vc\bin\nmake.exe /nologo tbuild [/home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/Build/DuetPkgIA32/DEBUG_MYTOOLS/IA32/MdePkg/Library/BaseMemoryLib/BaseMemoryLib]


build.py...
: error F002: Failed to build module
        /home/dalao/T440pCorebooting/tianocoreAsSeabiosPayload/tianocore2018/edk2/MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf [IA32, MYTOOLS, DEBUG]

- Failed -
Build end time: 11:48:28, Mar.15 2020
Build total time: 00:00:10

[dalao@pc edk2]$

> Personally, given that it's 2020, I'd not bother with legacy-installed OSes (or SeaBIOS) outside of use with emulation or if a special use case demands it. Esp given that it's easy enough to migrate Windows from legacy to UEFI.

I tried the tianocore payload by selecting it and using all default settings. But I can't see anything like the SeaBIOS for me to select the boot media. But it does boot the archlinux in UEFI mode. I'm wondering is this the problem with my display (I have tried both "Use libgfxinit" and "Run VGA Option ROMs" with tianocore) or the tianocore has nothing to display to select boot media?

Mar 15, 2020, 10:08 by matt.devillier@gmail.com:
On Sat, Mar 14, 2020 at 8:33 PM Dalao via coreboot


I have just corebooted T440p. Then I noticed some graphic display problems...

Firstly I "Use libgfxinit" with "Legacy VGA text mode", insert a usb disk with archlinux's latest install image iso. I can see a text mode of archlinux's start screen.


But when I hit enter, it shows some log till "Triggering uevents" and then there is no display...


Then I tried "Use libgfxinit" with "Linear "high-resolution" framebuffer". I can see the graphic mode of archlinux's start screen, but again after I hit enter and see some logs, there is no display... Also, the display is not ideal, just at the top left corner not full screen.


Also, under this setting, the nvramcui's display becomes bad.


unfortunately, many legacy bootloaders seem to assume a full array of
VESA video modes will be available, and fail less than gracefully when
that's not the case. With libgfxinit there is no ability to change
video modes -- all that's available is either the native panel
resolution (high resolution framebuffer) or VGA text mode.
Next I included pci8086,0416.rom vbios and tried "Run VGA Option ROMs" with "Legacy VGA text mode". This time, I can't see the archlinux start screen as shown above, there is no display at the beginning. But I can hit the enter blindly. Then after a while I can see archlinux is booting and the first line I can see is "Probing EDD (edd=off to disable)...ok" the archlinux starts ok.

Lastly I also tried "Run VGA Option ROMs" with "Set framebuffer graphics resolution" with the default "framebuffer graphics resolution (1024x768 16.8M-color (8:8:8))" (although my T440p's resolution is 1920x1080). Also the Framebuffer mode is changed to "VESA framebuffer". I still can't see archlinux's start screen...


How to make everything work like the vendor BIOS? i.e., I can see both the archlinux's start screen and it's booting.

add the VGA BIOS. set the PCI IDs correctly. Set coreboot display init
to none, and let SeaBIOS run the VBIOS.
How to fix the nvramcui under "high-resolution" framebuffer"?

will work properly with above settings
Also, as for now it appears seabios can't boot UEFI media. Tianocore by default can't boot Linux/Windows installed by legacy method (installed when using seabios). my goal is to add UEFI support through tianocore as seabios payload (or through tianocore's CSM compatibility support module? ). So that it can boot both UEFI installed Windows or legacy installed Windows like the vendor bios can do. How to achieve this?

SeaBIOS is a legacy BIOS implementation, so no it can't boot UEFI boot
media. Likewise, Tianocore is a pure UEFI implementation, and doesn't
boot legacy boot media / legacy installed OSes. There should be a way
to use SeaBIOS as a CSM for Tianocore, but currently it's not working
/ not implemented (I tried briefly awhile back but didn't have any
luck).

Personally, given that it's 2020, I'd not bother with legacy-installed
OSes (or SeaBIOS) outside of use with emulation or if a special use
case demands it. Esp given that it's easy enough to migrate Windows
from legacy to UEFI.

_______________________________________________
coreboot mailing list -- coreboot@coreboot.org
To unsubscribe send an email to coreboot-leave@coreboot.org
_______________________________________________
coreboot mailing list -- coreboot@coreboot.org
To unsubscribe send an email to coreboot-leave@coreboot.org


_______________________________________________
coreboot mailing list -- coreboot@coreboot.org
To unsubscribe send an email to coreboot-leave@coreboot.org