Commit 2b591388ff9e2bfebe7898c894b6fcafb353acb4

Authored by 김태훈
1 parent 9937fc682a
Exists in master

라즈베리 파이 3 부트로더 정보 추가

Showing 1 changed file with 113 additions and 0 deletions   Show diff stats
go/src/fullcycle/analog-kernel/parser/parse.go
... ... @@ -30,6 +30,10 @@ var parseFuncList = []func(chan string, chan jsonObject){
30 30 parseBootloaderBoard,
31 31 parseBootloaderRstStat,
32 32 parseBootloaderNet,
  33 + parseBootloaderBootcode,
  34 + parseBootloaderRead,
  35 + parseBootloaderCommandLine,
  36 + parseBootloaderLoad,
33 37 }
34 38  
35 39 var reTimestamp = regexp.MustCompile(`^\[[[:blank:]]*[[:digit:]]+\.[[:digit:]]+[[:blank:]]*\]`)
... ... @@ -731,6 +735,115 @@ func parseBootloaderNet(lines chan string, chanOutput chan jsonObject) {
731 735 chanOutput <- m
732 736 }
733 737  
  738 +func parseBootloaderBootcode(lines chan string, chanOutput chan jsonObject) {
  739 + m := make(jsonObject)
  740 + m["type"] = "bootloader_bootcode"
  741 + m["value"] = ""
  742 +
  743 + rLine := regexp.MustCompile(`^Raspberry Pi Bootcode`)
  744 + for line := range lines {
  745 + if rLine.MatchString(line) {
  746 + m["value"] = line
  747 + break
  748 + }
  749 + }
  750 +
  751 + chanOutput <- m
  752 +}
  753 +
  754 +func parseBootloaderRead(lines chan string, chanOutput chan jsonObject) {
  755 + const (
  756 + FIND_NAME = iota
  757 + FIND_SIZE
  758 + )
  759 +
  760 + state := FIND_NAME
  761 + elements := make(map[string]string)
  762 + name := ""
  763 +
  764 + rLine := regexp.MustCompile(`brfs: File read: ([[:print:]]+)`)
  765 + for line := range lines {
  766 + if rLine.MatchString(line) {
  767 + if sub := rLine.FindStringSubmatch(line); len(sub) > 1 {
  768 + switch state {
  769 + case FIND_NAME:
  770 + name = sub[1]
  771 + state = FIND_SIZE
  772 + case FIND_SIZE:
  773 + elements[name] = sub[1]
  774 + state = FIND_NAME
  775 + }
  776 + }
  777 + }
  778 + }
  779 +
  780 + list := make([]jsonObject, 0)
  781 + for name, size := range elements {
  782 + list = append(list, jsonObject{"name": name, "size": size})
  783 + }
  784 +
  785 + m := make(jsonObject)
  786 + m["type"] = "bootloader_read"
  787 + m["list"] = list
  788 +
  789 + chanOutput <- m
  790 +}
  791 +
  792 +func parseBootloaderCommandLine(lines chan string, chanOutput chan jsonObject) {
  793 + m := make(jsonObject)
  794 + m["type"] = "bootloader_command_line"
  795 + m["value"] = ""
  796 +
  797 + const (
  798 + FIND_HEADER = iota
  799 + FIND_LINE
  800 + DONE
  801 + )
  802 +
  803 + state := FIND_HEADER
  804 +
  805 + rLine := regexp.MustCompile(`Read command line from file`)
  806 + rValue := regexp.MustCompile(`[[:graph:]]+ ([[:print:]]+)`)
  807 + for line := range lines {
  808 + switch state {
  809 + case FIND_HEADER:
  810 + if rLine.MatchString(line) {
  811 + state = FIND_LINE
  812 + }
  813 + case FIND_LINE:
  814 + if sub := rValue.FindStringSubmatch(line); len(sub) > 1 {
  815 + m["value"] = sub[1]
  816 + state = DONE
  817 + }
  818 + }
  819 +
  820 + if state == DONE {
  821 + break
  822 + }
  823 + }
  824 +
  825 + chanOutput <- m
  826 +}
  827 +
  828 +func parseBootloaderLoad(lines chan string, chanOutput chan jsonObject) {
  829 + list := make([]jsonObject, 0)
  830 +
  831 + rLine := regexp.MustCompile(`Loading '([[:print:]]+)' to (0x[[:xdigit:]]+) size (0x[[:xdigit:]]+)`)
  832 + for line := range lines {
  833 + if rLine.MatchString(line) {
  834 + if sub := rLine.FindStringSubmatch(line); len(sub) > 3 {
  835 + list = append(list, jsonObject{"name": sub[1], "address": sub[2], "size": sub[3]})
  836 + }
  837 + }
  838 + }
  839 +
  840 + m := make(jsonObject)
  841 + m["type"] = "bootloader_load"
  842 + m["list"] = list
  843 +
  844 + chanOutput <- m
  845 +}
  846 +
734 847 func removeBrackets(s string) string {
735 848 for strings.HasPrefix(s, "(") && strings.HasSuffix(s, ")") {
736 849 openCount := strings.Count(s, "(")
... ...