Files
Mira_Firmware_Loader/docs/update_fw_docs.md

4.5 KiB

Tài liệu Kỹ thuật: Cập Nhật Firmware (Update FW)

Quy trình Update FW là phương thức tối ưu hóa để nâng cấp Firmware mới vào các thiết bị OpenWrt Live (đã và đang chạy sẵn Firmware của hệ sinh thái MiraV3). Cơ chế này dùng chính giao thức SSH thông qua core/ssh_flasher.py nhưng lược bỏ hoàn toàn các bước dò tìm và thiết lập mật khẩu thừa thãi.

1. Sơ đồ Luồng Hoạt Động (Operational Flow)

graph TD
    A[Bắt đầu Update FW] --> B{Kiểm tra danh sách IP}
    B -- Có IP lạ != 192.168.11.102 --> C[Bật MessageBox cảnh báo]
    C -- Người dùng No --> Z[HỦY BỎ]
    C -- Người dùng Yes --> D
    B -- Chỉ có 192.168.11.102 --> D

    D[Truyền tham số cấu hình tĩnh] --> E[ssh_user: root<br>ssh_password: admin123a<br>set_passwd: False]

    E -->|Jitter Delay 0.1s - 1.5s| F[Kết nối thẳng SSH Port 22]

    F -- Thành công --> G[Push Firmware SCP vào /tmp/]
    F -- Lỗi / Sai Pass --> Y[DỪNG LẠI - Báo Lỗi]

    G -->|Tối đa 3 lần Retry| H[Xác minh File `test -f`]
    H --> I[Đồng bộ bộ nhớ `sync`]
    I --> J[Gọi Sysupgrade: `sysupgrade -F -v -n /tmp/...`]
    J --> K{Kết nối bị đứt?}
    K -- Có --> L[Khởi động lại thành công - Báo DONE]
    K -- Không --> M[Báo lỗi Sysupgrade]

2. Phân Tích Logic Cốt Lõi

2.1 Cơ Chế Bỏ Qua Telnet (Skip Set Password)

Điểm khác biệt lớn nhất của luồng Update FW so với Nạp Mới:

  • Thông qua UI Chế độ Flash > Update Firmware, hệ thống hiểu rằng thiết bị đích đã từng được cài đặt hệ sinh thái MiraV3 và chắc chắn đã sở hữu lớp bảo mật SSH cơ bản (root/admin123a).
  • Module main.py tự động kích hoạt cờ tuỳ chọn ngầm set_passwd = False khi gọi FlashThread.
  • Bỏ Bầu Trời Khởi Động: Hệ thống ngay lập tức rẽ ngang vào luồng SSH trên Port 22. Tool bỏ qua hoàn toàn quy trình truy vấn cổng Telnet (23) chậm chạp cũng như các lệnh Set Password (vốn mất thêm từ 3-5 giây chờ đợi). Tốc độ tổng thể tăng tốc cực đáng kể, phục vụ trực tiếp cho quá trình Mass-Update.

2.2 Ràng Buộc An Toàn (Safety Checks)

Được kiểm soát từ tầng UI (main.py) để chống Flash nhầm hàng hoạt:

  • Khi người dùng chọn chế độ Update, script quét qua danh sách MAC/IP đang tích chọn. Chỉ duy nhất thiết bị có IP cấu hình cứng 192.168.11.102 mới được âm thầm qua cửa (được xem là IP mặc định an toàn cho việc test Firmware).
  • Nếu phát hiện Bất kỳ IP lạ nào (ví dụ: 192.168.1.5, 192.168.11.9), hệ thống lập tức chặn quy trình Flasher lại và bật MessageBox cảnh báo màu đỏ hỏi kỹ thuật viên xác nhận lại.

2.3 Quá Trình Sysupgrade (Hủy diệt và Tái sinh)

Cũng giống như luồng nạp mới, quá trình xả file dùng chung tệp lệnh: sysupgrade -F -v -n /tmp/<tên_file>

  • Cờ -n: Clean Flash sạch trơn, không giữ Configuration rác của bản cũ.
  • Cờ -F (Force): Ép hệ điều hành OpenWrt bỏ qua bước kiểm tra Image Metadata tại Local. Tuỳ chọn này sống còn đối với các tệp tin Firmware trần trụi (như build Raw tim_uImage) để tránh việc sysupgrade từ chối file, văng lỗi "Image metadata not present" và ngắt ngang tiến trình.
  • Kịch bản hoàn hảo nhất của quá trình này lại chính là bị đứt kết nối mạng đột ngột. Script đã bẫy một khoảng thời gian chờ (time.sleep) để canh việc Server SSH sập nguồn. Đứt mạng nghĩa là Kernel chuẩn bị Reboot nạp File, và hệ thống sẽ bắt Catch đánh giá là Thành Công (DONE). Ngược lại, nếu Sysupgrade thất bại, nó sẽ phun ra Log và giữ nguyên kết nối, lúc đó Script sẽ chụp lại Error Code và in ra UI.

3. Trình Gỡ Lỗi Nhanh (Debugging Update flow)

Lưu ý: Bạn đã xóa các file script debug đơn lẻ khỏi thư mục gốc (debug_ssh.py). Hiện tại luồng Update FW nên được gỡ lỗi trực tiếp bằng cách in Print/Log ra terminal của lệnh ./run.sh lúc chạy App UI. Mọi tiến độ như "Đang kết nối SSH", "Đồng bộ file" được hiển thị minh bạch tại cột Status trên giao diện chính.