From 9b5bff80025fa8e25a3f227d0b1c67dd97096f6b Mon Sep 17 00:00:00 2001 From: nearology Date: Tue, 10 Nov 2026 12:30:21 +0330 Subject: [PATCH] =?UTF-8?q?=D8=AA=D8=BA=DB=8C=DB=8C=D8=B1=20=D8=A7=DB=8C?= =?UTF-8?q?=D9=BE=DB=8C=20tftp=20=D8=B3=D8=B1=D9=88=D8=B1=20=D8=A8=D9=87?= =?UTF-8?q?=20=D9=85=D8=AA=D8=BA=DB=8C=D8=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/flash-aminpa-V1.5.yml | 6 +++++- .gitea/workflows/uboot-setup.yml | 5 ++++- README.md | 23 +++++++++++++++++++++++ scripts/serial_command.py | 13 ++++++++----- 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/.gitea/workflows/flash-aminpa-V1.5.yml b/.gitea/workflows/flash-aminpa-V1.5.yml index e3a7d54..5500cfb 100644 --- a/.gitea/workflows/flash-aminpa-V1.5.yml +++ b/.gitea/workflows/flash-aminpa-V1.5.yml @@ -41,7 +41,11 @@ jobs: run: /usr/bin/python3 scripts/serial_command.py check - name: Configure and verify network - run: /usr/bin/python3 scripts/serial_command.py configure + env: + UBOOT_DEVICE_IP: ${{ vars.UBOOT_DEVICE_IP || '192.168.75.100' }} + TFTP_SERVER_IP: ${{ vars.TFTP_SERVER_IP || '192.168.75.247' }} + run: | + /usr/bin/python3 scripts/serial_command.py configure --device-ip "$UBOOT_DEVICE_IP" --tftp-server-ip "$TFTP_SERVER_IP" - name: Check all firmware sizes against detected flash layout run: /usr/bin/python3 scripts/serial_command.py preflight diff --git a/.gitea/workflows/uboot-setup.yml b/.gitea/workflows/uboot-setup.yml index 88a9bfb..c12332b 100644 --- a/.gitea/workflows/uboot-setup.yml +++ b/.gitea/workflows/uboot-setup.yml @@ -12,5 +12,8 @@ jobs: uses: actions/checkout@v4 - name: Configure network and verify U-Boot commands + env: + UBOOT_DEVICE_IP: ${{ vars.UBOOT_DEVICE_IP || '192.168.75.100' }} + TFTP_SERVER_IP: ${{ vars.TFTP_SERVER_IP || '192.168.75.247' }} run: | - /usr/bin/python3 scripts/serial_command.py configure + /usr/bin/python3 scripts/serial_command.py configure --device-ip "$UBOOT_DEVICE_IP" --tftp-server-ip "$TFTP_SERVER_IP" diff --git a/README.md b/README.md index 2e20aed..0c1942e 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,29 @@ workflow اصلی `flash-aminpa-V1.5.yml` با push به شاخهٔ `main` اجرا می‌شود. workflow تست نرم‌افزاری برای اجرا پس از موفقیت آن و همچنین اجرای دستی تعریف شده است. +## متغیرهای Gitea برای شبکهٔ U-Boot و TFTP + +این متغیرها را در تنظیمات مخزن، بخش **Actions → Variables** تعریف کنید. +workflow تنظیم شبکه و workflow اصلی فلش از آن‌ها استفاده می‌کنند. + +| نام متغیر | کاربرد | پیش‌فرض | +| --- | --- | --- | +| `UBOOT_DEVICE_IP` | IP دستگاه در U-Boot؛ مقدار `ipaddr` | `192.168.75.100` | +| `TFTP_SERVER_IP` | IP سرور TFTP؛ مقدار `serverip` و مقصد ping بررسی شبکه | `192.168.75.247` | + +هر دو مقدار باید IPv4 معتبر و بدون CIDR باشند. اگر متغیر تعریف نشود، +مقدار پیش‌فرض استفاده می‌شود. مقدار تنظیم‌شده روی برد بازخوانی و بررسی می‌شود. +`UBOOT_DEVICE_IP` مربوط به مرحلهٔ فلش است؛ `TEST_DEVICE_IP` مربوط به دستگاه +پس از بوت سیستم‌عامل است و می‌تواند متفاوت باشد. + +نمونهٔ اجرای مستقیم: + +```bash +/usr/bin/python3 scripts/serial_command.py configure \ + --device-ip 192.168.75.100 \ + --tftp-server-ip 192.168.75.247 +``` + ## متغیرهای Gitea برای تست نرم‌افزاری متغیرها را در تنظیمات مخزن Gitea، بخش **Actions → Variables** تعریف کنید. diff --git a/scripts/serial_command.py b/scripts/serial_command.py index 45eb84b..7734d8f 100644 --- a/scripts/serial_command.py +++ b/scripts/serial_command.py @@ -1,5 +1,6 @@ """Check an existing U-Boot prompt or configure its volatile environment.""" import argparse +import ipaddress import fcntl import re import sys @@ -218,6 +219,8 @@ def main(): parser.add_argument("--firmware", type=Path, default=None) parser.add_argument("--rootfs-size", type=lambda value: int(value, 0), help="Actual RootFS partition size in bytes (decimal or 0x-prefixed hex)") parser.add_argument("--confirm-squashfs-mtdblock3", action="store_true", help="Confirm actual RootFS is SquashFS on mtdblock3 and set bootargs") + parser.add_argument("--device-ip", type=ipaddress.IPv4Address, default="192.168.75.100") + parser.add_argument("--tftp-server-ip", type=ipaddress.IPv4Address, default="192.168.75.247") args = parser.parse_args() if args.firmware is None: filename = "rootfs.squashfs" if args.mode == "transfer-rootfs" else "zImage" if args.mode == "transfer-kernel" else ("sun8i-v3s-licheepi-zero-dock.dtb" if args.mode == "transfer-dtb" else "u-boot-sunxi-with-spl.bin") @@ -271,11 +274,11 @@ def main(): "printenv ipaddr serverip ethaddr bootcmd bootargs", allow_missing=("ipaddr", "serverip", "ethaddr", "bootcmd", "bootargs"), ) - cli.command("setenv ipaddr 192.168.75.100") - cli.command("printenv ipaddr", r"^ipaddr=192\.168\.75\.100$") - cli.command("setenv serverip 192.168.75.247") - cli.command("printenv serverip", r"^serverip=192\.168\.75\.247$") - cli.command("ping 192.168.75.247", r"^host 192\.168\.75\.247 is alive$", timeout=30) + cli.command(f"setenv ipaddr {args.device_ip}") + cli.command("printenv ipaddr", r"^ipaddr=" + re.escape(str(args.device_ip)) + r"$") + cli.command(f"setenv serverip {args.tftp_server_ip}") + cli.command("printenv serverip", r"^serverip=" + re.escape(str(args.tftp_server_ip)) + r"$") + cli.command(f"ping {args.tftp_server_ip}", r"^host " + re.escape(str(args.tftp_server_ip)) + r" is alive$", timeout=30) cli.command("sf probe 0:0", r"^SF: Detected .+", timeout=20) print("\nAll commands verified; environment changes were not saved to flash.")