Build OpenWrt từ nguồn

Trước kia tôi đã có bài giới thiệu về OpenWrt. Hôm nay tôi sẽ hướng dẫn cách build một bản OpenWrt từ mã nguồn. Bởi vì tôi dùng Ubuntu trong công việc hàng ngày nên các dòng lệnh, minh họa dưới đây là áp dụng với Ubuntu. Bạn vẫn có thể áp dụng tương tự với các bản Linux khác.

Ta có thể tìm các dòng lệnh để lấy mã nguồn OpenWrt ở trang này: https://dev.openwrt.org/wiki/GetSource

Nhưng trước đó, hãy cài đặt các phần mềm công cụ cần thiết cho việc build cái đã.

sudo apt-get install subversion build-essential libncurses5-dev zlib1g-dev gawk flex quilt git-core

Ở đây tôi muốn lấy phiên bản mới nhất, đang còn trong giai đoạn phát triển (chưa phát hành) của OpenWrt, thường gọi là nhánh "trunk"

git clone git://git.openwrt.org/openwrt.git trunk

Chuyển vào thư mục mã nguồn vừa copy

cd trunk

Sửa file feeds.conf.default, tìm dòng

#src-git oldpackages http://git.openwrt.org/packages.git

Xóa dấu # ở đầu, thành:

src-git oldpackages http://git.openwrt.org/packages.git

và lưu lại.

Cập nhật danh sách nguồn các phần mềm bổ sung:

scripts/feeds update -a

Thêm các phần mềm này vào chỉ mục các gói phần mềm có thể được cài vào OpenWrt

scripts/feeds install -a

Lưu ý, lệnh này chỉ "điểm mặt" những phần mềm nào có thể được cài, chứ không làm cho nó cài sẵn vào OpenWrt. Để làm điều này, ta tiến hành ở bước sau.

Bây giờ ta mở màn hình cấu hình, để chọn lựa loại router và chọn những phần mềm nào ta muốn bao gồm trong OpenWrt thành phẩm.

make menuconfig

Ta sẽ nhận được màn hình như thế này

menuconfig 1

Mục Target SystemTarget Profile là để ta chọn dòng và loại router mà ta sẽ build OpenWrt cho. Ở đây tôi muốn build OpenWrt cho TP-Link WR841ND v8.2 (các router TP-Link rẻ tiền và cho phép thay thế firmware dễ dàng). Tham khảo trong http://wiki.openwrt.org/toh/tp-link/tl-wr841nd, tôi thấy router này sử dụng chip AR9341. Như vậy, Target System sẽ là Atheros AR7xxx/AR9xxx. Khi đã đặt Target System, ta vào Target Profile để chọn tiếp TP-LINK TL-WR841N/ND.

menuconfig tplink

Tiếp theo ta sẽ cài LuCI, là gói phần mềm cho giao diện Admin của OpenWrt. Kéo xuống phía dưới của màn hình OpenWrt Configuration ta sẽ thấy mục LuCI:

menuconfig LuCI

Vào trong LuCI > 1. Collections và chọn luci

menuconfig luci no ssl

Sau đó ta bấm Exit, Exit mãi đến khi nào tới màn hình này:

menuconfig save

thì ta bấm chọn Yes để lưu lại các lựa chọn vừa rồi.

Bạn cũng có thể chọn thêm các phần mềm khác, cách làm tương tự khi chọn luci.

OpenWrt cần một số công cụ riêng, chạy trên vi xử lý này (x86) mà lại nhắm build phần mềm chạy trên vi xử lý khác (MIPS) nên ta dùng lệnh sau để cài đặt:

make tools/install V=99
make toolchain/install V=99

Bây giờ ta gõ

make V=99

để bắt đầu quá trình build. Nếu làm lần đầu tiên, quá trình này có thể mất cả giờ đồng hồ, cho nên bạn có thể bỏ nó đó đi giặt đồ được rồi.

Sau khi build xong, cái file firmware thành phẩm sẽ nằm trong thư mục bin. Chẳng hạn firmware cho TP-Link WR841ND sẽ là các file:

$ ls bin/ar71xx/*wr841n*
bin/ar71xx/openwrt-ar71xx-generic-tl-wr841nd-v3-squashfs-factory.bin
bin/ar71xx/openwrt-ar71xx-generic-tl-wr841nd-v3-squashfs-sysupgrade.bin
bin/ar71xx/openwrt-ar71xx-generic-tl-wr841nd-v5-squashfs-factory.bin
bin/ar71xx/openwrt-ar71xx-generic-tl-wr841nd-v5-squashfs-sysupgrade.bin
bin/ar71xx/openwrt-ar71xx-generic-tl-wr841nd-v7-squashfs-factory.bin
bin/ar71xx/openwrt-ar71xx-generic-tl-wr841nd-v7-squashfs-sysupgrade.bin
bin/ar71xx/openwrt-ar71xx-generic-tl-wr841n-v8-squashfs-factory.bin
bin/ar71xx/openwrt-ar71xx-generic-tl-wr841n-v8-squashfs-sysupgrade.bin
bin/ar71xx/openwrt-ar71xx-generic-tl-wr841n-v9-squashfs-factory.bin
bin/ar71xx/openwrt-ar71xx-generic-tl-wr841n-v9-squashfs-sysupgrade.bin

Trong đó, file sysupgrade là để dùng thông qua giao diện web admin, file factory được dùng khi muốn cài firmware thông qua cáp serial.

Bạn còn có thể đọc bài chi tiết hơn ở đây (tiếng Anh, minh họa với OpenWrt bản cũ).

Để build OpenWrt với một số cấu hình tùy biến sẵn, hãy đọc bài Đặt sẵn cấu hình cho firmware OpenWrt từ khi build.

Các bạn cần trao đổi về OpenWrt, vui lòng tham gia nhóm Linux cho hệ thống nhúng trên Facebook.