Files
nearology 5be306ad1f
flash-aminpa-V1.5.yml / Hardware flashing - Amin Pardaz Asia v1.5 (push) Successful in 8m8s
اصلاح فریمور
2026-11-10 15:29:48 +03:30

107 خطوط
6.3 KiB
Markdown

# فلش و تست دستگاه Amin Pardaz Asia v1.5
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 deployment/serial/serial_command.py configure \
--device-ip 192.168.75.100 \
--tftp-server-ip 192.168.75.247
```
## متغیرهای Gitea برای تست نرم‌افزاری
متغیرها را در تنظیمات مخزن Gitea، بخش **Actions → Variables** تعریف کنید.
نام متغیرها باید دقیقاً مطابق جدول باشد.
| نام متغیر | کاربرد | پیش‌فرض | الزامی |
| --- | --- | --- | --- |
| `TEST_INTERFACE` | نام کارت شبکهٔ میزبان runner برای تست | `eno1` | خیر |
| `TEST_HOST_IP` | آدرس IPv4 میزبان runner روی کارت شبکهٔ تست | `192.168.75.15` | خیر |
| `TEST_DEVICE_IP` | آدرس IPv4 دستگاه فلش‌شده که باید به ping پاسخ دهد | ندارد | بله |
`TEST_HOST_IP` آدرس میزبان است، نه دستگاه هدف. مقدار `TEST_DEVICE_IP` باید
با آن متفاوت باشد و با IP دستگاه پس از بوت سیستم‌عامل مطابقت داشته باشد؛
این مقدار لزوماً همان `ipaddr` موقت در U-Boot نیست.
IP میزبان باید از قبل روی کارت شبکهٔ انتخاب‌شده تنظیم شده باشد و مسیر رسیدن
به دستگاه از همان کارت شبکه عبور کند. اسکریپت تنظیمات شبکهٔ میزبان را تغییر نمی‌دهد.
مقادیر IP به‌صورت آدرس IPv4 وارد می‌شوند، نه رنج یا CIDR.
اسکریپت با پایتون سیستم و ابزارهای سیستم `ip` و `ping` اجرا می‌شود.
پس از بررسی تنظیمات میزبان، حداکثر ۱۸۰ ثانیه منتظر پاسخ ping دستگاه می‌ماند؛
اولین پاسخ موفق نتیجهٔ `PASS` دارد. نبود پاسخ تا پایان مهلت یا خطای تنظیمات
باعث `FAIL` و شکست workflow می‌شود.
نمونهٔ اجرای دستی روی runner با جایگزین‌کردن IP واقعی دستگاه:
```bash
/usr/bin/python3 deployment/serial/software_test.py \
--interface eno1 \
--host-ip 192.168.75.15 \
--device-ip <DEVICE_IP>
```
برای محل فایل‌های firmware و نقشهٔ فلش، [راهنمای firmware](firmware/README.md) را ببینید.
## ساختار استقرار
اسکریپت‌های اجرایی در `deployment/serial/` قرار دارند:
- `serial_command.py`: کنترل U-Boot، فلش و راه‌اندازی برد از طریق سریال.
- `software_test.py`: بررسی پاسخ ping دستگاه پس از بوت.
workflowهای اصلی امین‌پرداز و ورودی‌های workflowهای کمکی در
`.gitea/workflows/` باقی می‌مانند و اسکریپت‌ها را از مسیر جدید اجرا می‌کنند.
فایل‌های باینری همچنان در پوشهٔ `firmware/` ریشهٔ مخزن قرار می‌گیرند.
## تست ترتیب بوت از طریق Serial
workflow دستی `init test` از فایل `.gitea/workflows/init-test.yml` اجرا می‌شود.
رمز دستگاه را با نام `RUTBS_PASSWORD` در **Actions → Secrets** مخزن تعریف کنید؛
رمز در سورس یا متغیرهای عمومی قرار نمی‌گیرد. رانر به `pyserial` و دسترسی
به پورت `/dev/ttyUSB0` نیاز دارد.
برای اجرای مستقیم، رمز را بدون نمایش در ترمینال دریافت کنید:
```bash
read -rs -p 'RUTBS password: ' RUTBS_PASSWORD
export RUTBS_PASSWORD
python3 deployment/serial/init_test.py
unset RUTBS_PASSWORD
```
برای پورت دیگر، گزینهٔ `--port /dev/ttyUSB1` را اضافه کنید.
برای مشاهدهٔ زندهٔ خروجی Serial با حذف رمز، گزینهٔ `--verbose` یا `-v` را اضافه کنید:
```bash
python3 deployment/serial/init_test.py --verbose
```
هنگام اجرای تست، برد باید در پرامپت U-Boot یعنی `=>` باشد.
اسکریپت ابتدا با ارسال Enter پرامپت را تازه می‌کند و پس از تشخیص آن،
دستور `res` را برای ریبوت می‌فرستد؛ سپس مراحل بوت را به‌ترتیب بررسی می‌کند.
این تست باید پیام‌های انتخاب سطح دیباگ و فعال‌سازی کنسول را ببیند و
با workflow دیگری که همان پورت Serial را استفاده می‌کند هم‌زمان اجرا نشود.
از شروع تست، مهلت مشترک مراحل ۱۸۰ ثانیه است. تنها پس از ورود و دریافت
خروجی دقیق `Linux` از `uname -s`، پیام `BOOT TEST: PASS` و کد خروج صفر
برگردانده می‌شود. خطا کد خروج غیرصفر دارد. لاگ Serial با حذف رمز در
`artifacts/boot.log` ذخیره و حتی در شکست تست به‌صورت آرتیفکت بارگذاری می‌شود.