flash-aminpa-V1.5.yml / Hardware flashing - Amin Pardaz Asia v1.5 (push) Successful in 8m8s
107 خطوط
6.3 KiB
Markdown
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` ذخیره و حتی در شکست تست بهصورت آرتیفکت بارگذاری میشود.
|