Bản draft để review: SDK và toolchain có thể tạo package không tương thích nếu khác branch, target hoặc ABI. Luôn dùng công cụ tương ứng với firmware đích.
SDK, toolchain và build system là gì?
Ba khái niệm này liên quan nhưng không giống nhau:
- Build system: toàn bộ hệ thống build OpenWrt, có thể tạo toolchain, kernel, root filesystem, package và firmware image.
- Toolchain: bộ compiler và công cụ cross-compilation dùng để biên dịch cho kiến trúc đích, ví dụ ARM hoặc MIPS thay vì CPU của máy build.
- SDK: bộ công cụ rút gọn, thường dùng để biên dịch package bên ngoài dựa trên một firmware target đã xác định.[14][16]
SDK phù hợp khi bạn muốn build package riêng mà không cần build lại toàn bộ firmware.
Khi nào dùng công cụ nào?
| Nhu cầu | Công cụ phù hợp |
|---|---|
| Tạo firmware tùy biến từ package có sẵn | ImageBuilder |
| Build package riêng cho target | SDK |
| Sửa package source/patch | SDK hoặc build system |
| Sửa kernel, driver, target | Build system |
| Tạo toolchain từ đầu | Build system |
| Tạo toàn bộ firmware | Build system |
Tải SDK đúng target
SDK cần khớp tối thiểu với:
- Phiên bản/branch OpenWrt.
- Target và subtarget.
- Kiến trúc CPU.
- ABI và toolchain.
SDK được phát hành cùng hệ thống image tương ứng. Hãy bắt đầu từ:
| |
Không dùng SDK của target khác chỉ vì package của bạn có vẻ đơn giản. Lỗi ABI có thể chỉ xuất hiện khi cài hoặc chạy package trên router.
Chuẩn bị source package
Có thể lấy package từ source OpenWrt:
| |
Nếu dùng SDK archive đã tải sẵn, giải nén rồi chuyển vào thư mục SDK:
| |
Cấu trúc thư mục có thể thay đổi theo phiên bản. Hãy kiểm tra xem có Makefile, include/ và thư mục package hay không.
Cập nhật feeds trong SDK
Một số package cần feeds:
| |
Nếu package nằm trong source checkout, kiểm tra đường dẫn package trước khi build. Không nên copy package từ branch khác vào SDK mà không kiểm tra dependency và API.
Chọn target trong SDK
Mở cấu hình:
| |
Trong SDK, mục tiêu quan trọng là chọn đúng target/kiến trúc và các lựa chọn cần thiết cho package. Nếu SDK đã được phát hành cho một target cố định, vẫn đọc thông tin cấu hình để tránh chọn nhầm biến thể.
Có thể tạo cấu hình mặc định:
| |
Build một package
Ví dụ package nằm trong package/aiot/hello/:
| |
Một số tree dùng tên package khác. Có thể tìm Makefile package rồi thay đường dẫn cho phù hợp.
Build toàn bộ package đã chọn:
| |
Package .ipk thường được tạo trong thư mục bin/packages/ hoặc thư mục output tương ứng.
Cài thử package trên router
Trước khi cài, kiểm tra kiến trúc và dependency:
| |
Trên router:
| |
Chỉ dùng package trên router có target/ABI tương thích. Nếu opkg báo thiếu dependency, không nên ép cài bằng cách bỏ qua kiểm tra trừ khi bạn hiểu rõ hậu quả.
Toolchain nằm ở đâu?
Khi build OpenWrt từ source, toolchain được tạo trong tree build và được dùng để biên dịch các thành phần cho target. Người mới thường không cần tự gọi compiler bằng tay; hãy để Makefile của OpenWrt thiết lập biến môi trường và cờ biên dịch.
Nếu cần xem thông tin môi trường build:
| |
Log verbose giúp nhìn thấy compiler, sysroot, CFLAGS và đường dẫn staging. Không nên lấy một compiler hệ thống bất kỳ thay cho toolchain của OpenWrt.
Lỗi thường gặp
Exec format error
Thường do package được build cho sai kiến trúc CPU.
cannot find -l...
Thường do thiếu dependency hoặc package development tương ứng trong staging directory.
Kernel too old hoặc lỗi symbol
Có thể package được build cho branch/kernel khác với firmware đang chạy.
Package cài được nhưng không chạy
Kiểm tra ABI, dynamic linker, quyền thực thi, dependency runtime và log service trên router.
Checklist tương thích
Trước khi phân phối package:
- Branch OpenWrt giống firmware đích.
- Target/subtarget đúng.
- Kiến trúc và ABI đúng.
- Dependency đã khai báo trong Makefile.
- Đã test trên router hoặc image tương ứng.
- Không chứa secret, token hoặc đường dẫn máy build.
Nguồn chính thức
- OpenWrt — Using the SDK
- OpenWrt — Build system essentials
- OpenWrt — Using build environments
- OpenWrt source repository
Bài này được AIoT.IO.VN biên soạn lại bằng tiếng Việt, có bổ sung giải thích cho người mới.


Góp Ý / Bình Luận / Đánh giá