github.com/mvdan/u-root-coreutils@v0.0.0-20230122170626-c2eef2898555/cmds/exp/uefiboot/main.go (about) 1 // Copyright 2021 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // uefiboot loads the firmware generated by EDK2's UefiPayLoadPkg to boot a UEFI based OS 6 // 7 // Synopsis: 8 // uefiboot [ARGS] payload 9 // 10 // Options: 11 // -d: print debug output 12 // -i n: Address where to load the payload image 13 // -serial_addr n: serial IO port address 14 // -serial_width n: serial port register width 15 // -serial_hertz n: serial port input hertz 16 // -serial_baud n: serial port baud rate 17 18 package main 19 20 import ( 21 "flag" 22 "log" 23 "math" 24 25 "github.com/mvdan/u-root-coreutils/pkg/boot" 26 "github.com/mvdan/u-root-coreutils/pkg/boot/uefi" 27 ) 28 29 var ( 30 debug = flag.Bool("d", false, "Print debug output") 31 imageBase = flag.Uint64("i", 0x800000, "Where to load payload image") 32 serialAddr = flag.Uint("serial_addr", 0x3f8, "Serial IO port address") 33 serialWidth = flag.Uint("serial_width", 1, "Serial port reg width") 34 serialHertz = flag.Uint("serial_hertz", 1843200, "Serial port input hertz") 35 serialBaud = flag.Uint("serial_baud", 115200, "Serial port baud rate") 36 ) 37 38 var v = func(string, ...interface{}) {} 39 40 func main() { 41 flag.Parse() 42 if len(flag.Args()) != 1 { 43 log.Fatal("Usage: uefiboot <payload>") 44 } 45 fv, err := uefi.New(flag.Args()[0]) 46 if err != nil { 47 log.Fatal(err) 48 } 49 if *serialAddr > math.MaxUint32 { 50 log.Fatal("Unsupported: serial_addr is greater than uint32.") 51 } 52 fv.ImageBase, fv.SerialConfig = uintptr(*imageBase), uefi.SerialPortConfig{ 53 Type: uefi.SerialPortTypeIO, 54 BaseAddr: uint32(*serialAddr), 55 RegWidth: uint32(*serialWidth), 56 InputHertz: uint32(*serialHertz), 57 Baud: uint32(*serialBaud), 58 } 59 60 if err := fv.Load(*debug); err != nil { 61 log.Fatal(err) 62 } 63 64 if err := boot.Execute(); err != nil { 65 log.Fatal(err) 66 } 67 }