Commit 2b591388ff9e2bfebe7898c894b6fcafb353acb4
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, "(") | ... | ... |