diff options
author | Vladimir Serbinenko <phcoder@gmail.com> | 2014-11-23 16:19:48 +0100 |
---|---|---|
committer | Vladimir Serbinenko <phcoder@gmail.com> | 2014-11-26 23:18:58 +0100 |
commit | 8251e9070c6f4168654b75a4d0fd1f756d128ebd (patch) | |
tree | 9b5d911b1e9f1c01a171b1b691fb4bb75465c6aa /util/board_status/go/src/main | |
parent | 6ead253fbd39ef8f4a09795d8d921960e2498a7e (diff) |
Rewrite board_status in go.
This allows easy creation of redistribuable binary.
Change-Id: I12a82d509cd4bd46baeb4f4066e509c69301ab95
Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-on: http://review.coreboot.org/7565
Tested-by: build bot (Jenkins)
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'util/board_status/go/src/main')
-rw-r--r-- | util/board_status/go/src/main/board_status.go | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/util/board_status/go/src/main/board_status.go b/util/board_status/go/src/main/board_status.go new file mode 100644 index 0000000000..c52b60f8f7 --- /dev/null +++ b/util/board_status/go/src/main/board_status.go @@ -0,0 +1,134 @@ +package main + +import ( + "cbfs" + "cbtables" + "flag" + "fmt" + "io/ioutil" + "kconfig" + "log" + "os" + "os/exec" +) + +var ClobberDir = flag.Bool("clobber", false, "Clobber temporary output when finished. Useful for debugging.") + +func RunAndSave(output string, name string, arg ...string) { + cmd := exec.Command(name, arg...) + + f, err := os.Create(output) + if err != nil { + log.Fatal(err) + } + + cmd.Stdout = f + cmd.Stderr = f + + err = cmd.Start() + if err != nil { + log.Fatal(err) + } + cmd.Wait() +} + +/* Missing features: serial, upload, ssh */ + +func main() { + flag.Parse() + + cb, err := cbfs.OpenROM() + if err != nil { + log.Fatal(err) + } + config, err := cb.GetFile("config") + if err != nil { + log.Fatal(err) + } + revision, err := cb.GetFile("revision") + if err != nil { + log.Fatal(err) + } + + parsedConfig := kconfig.ParseKConfig(config) + mainboardDir := kconfig.UnQuote(parsedConfig["CONFIG_MAINBOARD_DIR"]) + + tempDir, err := ioutil.TempDir("", "coreboot_board_status") + if err != nil { + log.Fatal(err) + } + + tbl, err := cbtables.Open() + if err != nil { + log.Fatal(err) + } + + taggedVersion, err := tbl.GetVersion() + if err != nil { + log.Fatal(err) + } + versionTimestamp, err := tbl.GetVersionTimestamp() + if err != nil { + log.Fatal(err) + } + timestampFormated := versionTimestamp.UTC().Format("2006-01-02T15:04:05Z") + outputDir := tempDir + "/" + mainboardDir + "/" + taggedVersion + "/" + timestampFormated + os.MkdirAll(outputDir, 0755) + fmt.Printf("Temporarily placing output in %s\n", outputDir) + cf, err := os.Create(outputDir + "/cbfs.txt") + if err != nil { + log.Fatal(err) + } + defer cf.Close() + fmt.Fprintf(cf, "%v", cb) + + cf, err = os.Create(outputDir + "/config.txt") + if err != nil { + log.Fatal(err) + } + defer cf.Close() + cf.Write(config) + + cf, err = os.Create(outputDir + "/revision.txt") + if err != nil { + log.Fatal(err) + } + defer cf.Close() + cf.Write(revision) + + RunAndSave(outputDir+"/kernel_log.txt", "dmesg") + + cons, lost, err := tbl.GetConsole() + if err != nil { + log.Fatal(err) + } + + cf, err = os.Create(outputDir + "/coreboot_console.txt") + if err != nil { + log.Fatal(err) + } + defer cf.Close() + cf.Write(cons) + switch lost { + case 0: + case 1: + fmt.Fprintf(cf, "\none byte lost\n") + default: + fmt.Fprintf(cf, "\n%d bytes lost\n", lost) + } + timest, err := tbl.GetTimestamps() + if err != nil { + log.Fatal(err) + } + + ts, err := os.Create(outputDir + "/coreboot_timestamps.txt") + if err != nil { + log.Fatal(err) + } + defer ts.Close() + fmt.Fprintf(ts, "%v", timest) + + if *ClobberDir { + os.RemoveAll(tempDir) + } +} |