Покрокова інструкція без помилок.
Підготовка
|
1 2 |
BUILDROOT=~/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6 |
⚠ Встановлюй цю змінну на початку кожної сесії терміналу — вона не зберігається між сесіями.
Крок 1. Структура пакету
|
1 2 |
mkdir -p $BUILDROOT/package/go-dashboard/src |
Має вийти:
|
1 2 3 4 5 6 7 |
package/go-dashboard/ ├── Config.in ├── go-dashboard.mk └── src/ ├── main.go └── go.mod |
Крок 2. Config.in
|
1 2 3 4 5 6 7 8 |
cat > $BUILDROOT/package/go-dashboard/Config.in << 'EOF' config BR2_PACKAGE_GO_DASHBOARD bool "go-dashboard" help Simple HTTP dashboard for Luckfox Pico. Exposes system stats via JSON API on port 8080. EOF |
⚠ Buildroot Config.in вимагає таби, не пробіли. Перевір:
cat -A Config.in— має показати^Iна початку рядків. ⚠ Не додавайdepends on BR2_PACKAGE_HOST_GO_TARGET_ARCH_SUPPORTS— це приховує пакет з меню якщо Go toolchain не налаштований.
Крок 3. go-dashboard.mk
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
cat > $BUILDROOT/package/go-dashboard/go-dashboard.mk << 'EOF' ################################################################################ # # go-dashboard # ################################################################################ GO_DASHBOARD_VERSION = 1.0.0 GO_DASHBOARD_SITE = $(TOPDIR)/package/go-dashboard/src GO_DASHBOARD_SITE_METHOD = local GO_DASHBOARD_LICENSE = MIT define GO_DASHBOARD_BUILD_CMDS cd $(@D) && \ GOOS=linux GOARCH=arm GOARM=7 \ CGO_ENABLED=0 \ go build -o go-dashboard main.go endef define GO_DASHBOARD_INSTALL_TARGET_CMDS $(INSTALL) -D -m 0755 $(@D)/go-dashboard $(TARGET_DIR)/usr/bin/go-dashboard endef $(eval $(generic-package)) EOF |
⚠ Шлях
$(TOPDIR)/package/go-dashboard/src— правильний для цього SDK.$(BR2_EXTERNAL_LUCKFOX_PATH)— не працює, бо BR2_EXTERNAL не налаштований.
Крок 4. main.go
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
cat > $BUILDROOT/package/go-dashboard/src/main.go << 'EOF' package main import ( "encoding/json" "fmt" "net/http" "os" "runtime" "time" ) type Stats struct { Hostname string `json:"hostname"` Arch string `json:"arch"` Uptime float64 `json:"uptime_seconds"` GoVersion string `json:"go_version"` Time string `json:"time"` } func statsHandler(w http.ResponseWriter, r *http.Request) { hostname, _ := os.Hostname() uptimeBytes, _ := os.ReadFile("/proc/uptime") var uptime float64 fmt.Sscanf(string(uptimeBytes), "%f", &uptime) stats := Stats{ Hostname: hostname, Arch: runtime.GOARCH, Uptime: uptime, GoVersion: runtime.Version(), Time: time.Now().Format("2006-01-02 15:04:05"), } w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(stats) } func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Luckfox Dashboard\nEndpoints:\n /api/stats") }) http.HandleFunc("/api/stats", statsHandler) fmt.Println("Listening on :8080") http.ListenAndServe(":8080", nil) } EOF |
Крок 5. go.mod
|
1 2 3 4 5 6 |
cat > $BUILDROOT/package/go-dashboard/src/go.mod << 'EOF' module go-dashboard go 1.21 EOF |
Крок 6. Підключення до Buildroot
Знаходимо номер рядка з vim:
|
1 2 |
grep -n "vim/Config.in" $BUILDROOT/package/Config.in |
Вставляємо після цього рядка (замінити 2748 на реальний номер):
|
1 2 |
sed -i '2748a\\tsource "package/go-dashboard/Config.in"' $BUILDROOT/package/Config.in |
Перевіряємо що структура правильна — go-dashboard має бути всередині menu, перед endmenu:
|
1 2 |
sed -n '2746,2753p' $BUILDROOT/package/Config.in |
Очікуваний результат:
|
1 2 3 4 5 |
source "package/vim/Config.in" source "package/go-dashboard/Config.in" endmenu endmenu |
Крок 7. Вмикаємо в menuconfig
|
1 2 3 |
cd ~/luckfox-pico ./build.sh buildrootconfig |
В меню натисни / і введи go-dashboard → Enter → відмітити [*] → зберегти.
Крок 8. Збірка
|
1 2 |
./build.sh all |
Крок 9. Прошивка і перевірка
Maskrom режим → прошити → підключитись по SSH:
|
1 2 3 4 |
which go-dashboard go-dashboard & curl http://172.32.0.93:8080/api/stats |
Якщо зламав Config.in
Відновити оригінал:
|
1 2 3 |
wget -O $BUILDROOT/package/Config.in \ https://github.com/buildroot/buildroot/raw/2023.02.6/package/Config.in |
Потім повторити Крок 6.
Luckfox Pico Pro · Buildroot 2023.02.6 · STM32 з нуля без HAL