From 22c1f88e473ee44f22cb3ce2022648b7cd86fad4 Mon Sep 17 00:00:00 2001 From: Daniel Maslowski Date: Tue, 14 Dec 2021 03:06:14 +0100 Subject: [PATCH 1/3] WIP intelana Signed-off-by: Daniel Maslowski --- cmds/intelana/main.go | 61 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 cmds/intelana/main.go diff --git a/cmds/intelana/main.go b/cmds/intelana/main.go new file mode 100644 index 00000000..45b4c2b7 --- /dev/null +++ b/cmds/intelana/main.go @@ -0,0 +1,61 @@ +package main + +import ( + "encoding/json" + "flag" + "fmt" + "io/ioutil" + "log" + + fit "github.com/linuxboot/fiano/pkg/intel/metadata/fit" + "github.com/linuxboot/fiano/pkg/uefi" +) + +func main() { + flag.Parse() + args := flag.Args() + + if len(args) > 0 { + path := args[0] + data, err := ioutil.ReadFile(path) + if err != nil { + log.Fatal(err) + } + + fmt.Printf("\n== IFD ==\n") + regions := [...]uefi.FlashRegionType{ + uefi.RegionTypeBIOS, + uefi.RegionTypeME, + uefi.RegionTypeGBE, + uefi.RegionTypePTT, + uefi.RegionTypeEC, + uefi.RegionTypeMicrocode, + } + + fi, err := uefi.NewFlashImage(data) + if fi != nil { + for _, r := range regions { + if fi.IFD.Region.FlashRegions[r].Valid() { + offset := fi.IFD.Region.FlashRegions[r].BaseOffset() + size := fi.IFD.Region.FlashRegions[r].EndOffset() - offset + fmt.Printf("%-9s offset %x size %x\n", r, offset, size) + } else { + fmt.Printf("%-9s region not found/invalid\n", r) + } + } + } + + fmt.Printf("\n== FIT ==\n") + table, err := fit.GetTable(data) + doJson := false + if doJson { + j, err := json.MarshalIndent(table, "", " ") + if err != nil { + log.Fatal(err) + } + fmt.Printf(string(j)) + } else { + fmt.Printf("\n%s", table) + } + } +} From f59ec6e50fd8113137a4482e303da2c7907e074f Mon Sep 17 00:00:00 2001 From: Daniel Maslowski Date: Tue, 14 Dec 2021 03:06:46 +0100 Subject: [PATCH 2/3] WIP amdana Signed-off-by: Daniel Maslowski --- cmds/amdana/main.go | 60 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 cmds/amdana/main.go diff --git a/cmds/amdana/main.go b/cmds/amdana/main.go new file mode 100644 index 00000000..4562c313 --- /dev/null +++ b/cmds/amdana/main.go @@ -0,0 +1,60 @@ +package main + +import ( + "encoding/json" + "flag" + "fmt" + "io/ioutil" + "log" + + amd "github.com/linuxboot/fiano/pkg/amd/manifest" +) + +const ( + // This needed a look at the image; how can we fully automate it? + mapping = 0xff000000 +) + +// this is only for Go - would be 5 lines inline in JS, thanks... +type image []byte + +func (f image) ImageBytes() []byte { + return []byte(f) +} + +func (f image) PhysAddrToOffset(physAddr uint64) uint64 { + return physAddr - mapping +} + +func (f image) OffsetToPhysAddr(offset uint64) uint64 { + return offset + mapping +} + +func main() { + flag.Parse() + args := flag.Args() + + var path string + + if len(args) > 0 { + path = args[0] + data, err := ioutil.ReadFile(path) + if err != nil { + log.Fatal(err) + } + // We could also use this, but its mapping wouldn't work with some images + // FIXME: figure out those mappings + // var amdfw amd.FirmwareImage = data + var amdfw image = data + fw, err := amd.NewAMDFirmware(amdfw) + if err != nil { + log.Fatal(err) + } + a := fw.PSPFirmware() + j, err := json.MarshalIndent(a, "", " ") + if err != nil { + log.Fatal(err) + } + fmt.Printf(string(j)) + } +} From 4da704f1f74590cbd0f3230f141f77f0bab125e8 Mon Sep 17 00:00:00 2001 From: Daniel Maslowski Date: Tue, 17 Sep 2024 00:17:44 +0200 Subject: [PATCH 3/3] WIP: debug FV assembly Signed-off-by: Daniel Maslowski --- pkg/uefi/firmwarevolume.go | 6 +++++- pkg/visitors/assemble.go | 3 ++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/pkg/uefi/firmwarevolume.go b/pkg/uefi/firmwarevolume.go index d6ed046a..a91fe875 100644 --- a/pkg/uefi/firmwarevolume.go +++ b/pkg/uefi/firmwarevolume.go @@ -165,7 +165,11 @@ func (fv *FirmwareVolume) InsertFile(alignedOffset uint64, fBuf []byte) error { // Check size fLen := uint64(len(fBuf)) if fLen == 0 { - return errors.New("trying to insert empty file") + if true { + return nil + } else { + return errors.New("trying to insert empty file") + } } // Overwrite old data in the firmware volume. fv.buf = append(fv.buf, fBuf...) diff --git a/pkg/visitors/assemble.go b/pkg/visitors/assemble.go index 3ca15eb8..61b4b822 100644 --- a/pkg/visitors/assemble.go +++ b/pkg/visitors/assemble.go @@ -80,8 +80,9 @@ func (v *Assemble) Visit(f uefi.Firmware) error { for _, file := range f.Files { fileBuf := file.Buf() fileLen := uint64(len(fileBuf)) + log.Warnf("adding %v ", file.Header.GUID) if fileLen == 0 { - log.Fatalf("%v", file.Header.GUID) + log.Warnf("%v empty?", file.Header.GUID) } // Pad to the 8 byte alignments.