Bookmark

Hướng dẫn build OpenWrt từ source cho người mới

Bản draft để review: Bài này được biên soạn lại từ tài liệu chính thức OpenWrt, thêm giải thích dành cho người mới. Không nên dùng firmware build thành công trên model này để flash cho model khác nếu chưa kiểm tra target, profile và phương thức recovery.

Khi nào cần build OpenWrt từ source?

Build từ source phù hợp khi bạn muốn tùy biến kernel, package, patch, cấu hình mặc định hoặc tạo firmware cho một target cụ thể. Nếu chỉ cần thêm package vào firmware có sẵn, ImageBuilder thường nhanh và đơn giản hơn.

Hệ thống build của OpenWrt tự xây toolchain cross-compile, kernel, root filesystem và các thành phần image cần thiết cho target đã chọn.[14]

Chuẩn bị môi trường Linux

Nên dùng một máy Linux 64-bit có dung lượng đĩa và RAM đủ lớn. Trên Debian/Ubuntu, cài bộ công cụ build cơ bản:

1
2
3
4
sudo apt update
sudo apt install -y build-essential clang flex bison g++ gawk gcc-multilib \
  gettext git libncurses-dev libssl-dev python3 python3-distutils \
  python3-setuptools rsync unzip zlib1g-dev file wget

Tên package có thể khác giữa các bản phân phối. Nếu một package không tồn tại, hãy tra package tương đương của distro thay vì bỏ qua toàn bộ dependency.

Tải source OpenWrt

Tài liệu OpenWrt khuyến nghị lấy source từ repository chính thức/mirror của dự án. Có thể clone như sau:[13]

1
2
git clone https://github.com/openwrt/openwrt.git
cd openwrt

Không nên build trực tiếp trong thư mục hệ thống. Dùng một thư mục riêng, ví dụ ~/src/openwrt, để dễ giữ nhiều branch và dọn build cache.

Chọn branch hoặc tag

Nếu muốn thử nghiệm mới nhất, có thể dùng branch main. Với firmware dùng thật, nên chọn branch/tag ổn định phù hợp với thiết bị và đọc release notes trước khi build.

1
2
3
git fetch --all --tags
git branch -a
git checkout <branch-hoac-tag-phu-hop>

Thay <branch-hoac-tag-phu-hop> bằng phiên bản đã kiểm tra cho router của bạn. Không copy nguyên lệnh này rồi flash ngay.

Cập nhật feeds

Feeds là nguồn package được OpenWrt sử dụng trong quá trình build:

1
2
./scripts/feeds update -a
./scripts/feeds install -a

Nếu feed bị lỗi, đọc URL và nguyên nhân trong terminal trước khi chạy build tiếp. Không nên xóa .config để chữa lỗi một cách mù quáng vì bạn có thể mất toàn bộ lựa chọn target.

Cấu hình target bằng menuconfig

Mở giao diện chọn cấu hình:

1
make menuconfig

Các mục quan trọng:

  • Target System: dòng SoC/nền tảng.
  • Subtarget: nhánh phần cứng bên dưới target.
  • Target Profile: model cụ thể của router.
  • LuCI: giao diện web, nếu cần.
  • Base systemNetwork: package nền tảng.

Hãy đối chiếu model với danh sách thiết bị được hỗ trợ và image profile. Chọn sai target có thể tạo image không boot hoặc không thể flash.

Lưu cấu hình, sau đó có thể tạo config mặc định:

1
make defconfig

Nên sao lưu .config:

1
cp .config configs/my-router.config

Tải source package trước khi build

Để phát hiện lỗi download sớm:

1
make download -j$(nproc)

Một số mạng hoặc mirror có thể chậm. Khi download lỗi, kiểm tra lại URL, proxy, DNS và thử lại trước khi bắt đầu compile.

Build firmware

Build thông thường:

1
make -j$(nproc)

Nếu máy có ít RAM hoặc build bị lỗi khó hiểu, giảm mức song song:

1
make -j2

Khi cần log chi tiết cho một lỗi:

1
make V=s -j1

Firmware và package thường nằm trong thư mục bin/targets/. Tên file phụ thuộc vào target, subtarget, profile và lựa chọn trong .config.

Kiểm tra trước khi sử dụng

Trước khi flash:

  1. Kiểm tra tên target/profile trong đường dẫn bin/targets/.
  2. Đọc checksum nếu có.
  3. Sao lưu firmware và cấu hình gốc.
  4. Chuẩn bị phương án recovery qua UART/TFTP/web recovery.
  5. Đảm bảo nguồn điện ổn định.
  6. Đọc hướng dẫn riêng của đúng model router.

Tóm tắt lựa chọn công cụ

Nhu cầuCông cụ
Tùy biến sâu kernel/package/patchBuild system từ source
Thêm package và file cấu hình vào image có sẵnImageBuilder
Biên dịch package riêngSDK
Tự phát triển toàn bộ firmwareBuild system + toolchain

Nguồn chính thức

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 và cảnh báo cho người mới.


0 Bình luận

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