--- title: Build OpenWrt từ nguồn date: 2015-07-14 07:03:04.769883 UTC --- Trước kia tôi đã có [bài giới thiệu](/blog/2014/9/7/thay-the-firmware-cho-router-wifi-bang-openwrt) 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. Gõ ``` make menuconfig ``` Ta sẽ nhận được màn hình như thế này ![menuconfig 1](http://i.imgur.com/uVzOHMw.png) Mục _Target System_ và _Target 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](http://i.imgur.com/j38gKYj.png) 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](http://i.imgur.com/k8NKYTx.png) Vào trong _LuCI_ > _1. Collections_ và chọn `luci` ![menuconfig luci no ssl](http://i.imgur.com/SGDDuPv.png) Sau đó ta bấm _Exit_, _Exit_ mãi đến khi nào tới màn hình này: ![menuconfig save](http://i.imgur.com/lTpCkrA.png) 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](http://www.thepowerbase.com/2012/01/openwrt-build-guide-start-to-finish/) (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](/blog/2018/6/61-dat-san-cau-hinh-cho-firmware-openwrt-tu-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](https://www.facebook.com/groups/linux.embedded.vietnam/) trên Facebook.