Sau một thời gian xài cái modem kèm wifi lởm lởm của nhà mạng VNPT khi mà sóng quá yếu, đi xa một xíu là tạch hết. Quyết định sẽ kiếm một cái router wifi thay thế. Yêu cầu với thiết bị mới là:

  • Rẻ, tầm vài trăm ngìn vì nhà cũng chỉ có hơn 60m2 nên không có nhu cầu dùng Mesh.
  • Nhưng ông nào có điều kiện thì cứ xài Mesh nhé, xài mấy con sóng khoẻ, xuyên tường, xuyên gạch quá ko tốt cho 🦜
  • Nghịch được, có thể cài firmware (ví dụ OpenWrt) hoặc tuỳ chỉnh các chức năng như chặn quảng cáo (AdGuard, Pi-hole) hoặc các chức năng VPN.
  • An toàn, không chứa em bé, bọ, gián gì nhé 🪲🪳🕷.

1. Lựa chọn thiết bị

Sau một hồi lượn lờ VoZ thấy mấy em Mi Router có vẻ ngon về cấu hình dù là hàng nội địa Trung Quốc, nên quyết định order một em MI4 trên Shopee về nghịch, giá chỉ tầm 350k, anh em tự search nhé. Cấu hình như sau:

  • CPU: MT7621A MIPS Dual core 880MHz
  • ROM: 128MB SLC Nand Flash
  • RAM: 128MB DDR3-1200
  • 2.4G Wifi: 2 X 2 (IEEE 802.11N protocol supported, up to 300Mbps) (5dBi)
  • 5G Wifi: 2 X 2 (IEEE 802.11AC protocol supported, up to 867Mbps) (6dBi)
  • Network Protocols: IEEE 802.11a/b/g/n/ac, IEEE 802.3/3u/3ab
  • LAN: 2 port x 10/100/1000M
  • WAN: 1 x 10/1000M
  • OS: MiWifi Rom tiếng Trung based OpenWRT

Hình em nó đây, nhìn cũng đẹp phết.

miwifi4

Bản tui mua trên Shopee là đồ cũ, đã sử dụng rồi và được bạn bán cung cấp 2 phiên bản:

  • Phiên bản ROM gốc, tiếng Trung và xài U-Boot bootloader
  • Phiên bản Padavan tiếng Việt và tui dự là bạn í xài BREED bootloader

Tui đã mua bản Padavan Tiếng Việt vì quá lười tự mò để cài firmware, nhưng load vô giao diện quản trị thấy bạn í để lại copyright nên cũng hơi nghi ngại, một phần liên quan đến bootloader (sẽ nói sau) nên quyết định thử build lại firmware sẵn nghiên cứu luôn.

2. Firmware

Trên VoZ rất nhiều anh em xài Padavan, lướt sơ sơ thấy firmware này có vẻ ổn và có hỗ trợ cả tiếng Việt nên quyết định cũng sẽ xài tiếp firmware này luôn. Padavan là firmware mở được “xào” bởi Andy Padavan một lập trình viên người Nga. Repo gốc đặt tại bitbucket và mirror github, last commit là vào 05/11/2018. Đây xem như là Padavan gốc vì sau này sẽ có rất nhiều các bản chế lại dựa trên bản gốc này.

Ví dụ một phiên bản Trung do mấy bạn Trung xào lại https://github.com/hanwckf/rt-n56u, phiên bản này có một số khác biệt so với bản gốc như sau:

Do bản tiếng Trung này có hỗ trợ MI-4 nên tui cũng sẽ xài bản này luôn, nhưng do đây là bản tiếng Trung nên cần load từ điển tiếng Việt để xài, may mắn thay đã có một bạn làm sẵn bộ từ điển tiếng Việt cho Padavan. Việc bây giờ là tìm hiểu cách build firmware, tuỳ chỉnh các package để xài thử.

3. Chuẩn bị môi trường build

Dựa chủ yếu vào README của bản tiếng Trung có tham khảo WIKI Pandava gốc. Tui sẽ dùng Ubuntu 16.04 LTS i386, tránh nhầm x86_64 (hoặc amd64) nhé. Để đỡ mất công cài đặt thì sử dụng luôn Vagrant cho tiện, Vagrantfile như sau (cấp RAM/CPU nhiều để build cho lẹ, đỡ mất thời gian chờ):

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure('2') do |config|
  config.vm.box = 'ubuntu/xenial32'
  config.vm.box_url = 'ubuntu/xenial32'
  config.vm.hostname = 'padavan-box'
  config.vm.provider 'virtualbox' do |vb|
    vb.gui = false
    vb.memory = 2048
    vb.cpus = 4
  end
end

Sau đó tạo và cấu hình machine dựa trên Vagrantfile phía trên

> vagrant up

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/xenial32'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/xenial32' version '20211001.0.0' is up to date...
==> default: Setting the name of the VM: vargrant_default_1636614238976_86823
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default:
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!

> vagrant status
Current machine states:

default	running (virtualbox)

SSH vào máy ảo và kiểm tra một số thông tin:

> vagrant ssh

> cat /etc/issue
Ubuntu 16.04.7 LTS \n \l

> uname -a
Linux padavan-box 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:00 UTC 2021 i686 i686 i686 GNU/Linux

Cài đặt các gói cần thiết để biên dịch:

> apt update
> apt install automake autopoint bison build-essential cmake cpio curl fakeroot flex gawk gettext git gperf \
			  help2man kmod libc-dev-bin libgmp3-dev libltdl-dev libmpc-dev libmpfr-dev libncurses5-dev libtool-bin \
		      nano pkg-config python3-docutils texinfo unzip wget zlib1g-dev --no-install-recommends -y

Tải mã nguồn:

> mkdir -pv /build
> cd /build
> git clone https://github.com/hanwckf/rt-n56u.git

Và do cần giao diện tiếng Việt, nên nhớ tải bộ từ điển tiếng Việt:

> cd rt-n56u
> ls -l trunk/user/www/dict/*.dict
> wget -O trunk/user/www/dict/VN.dict https://raw.githubusercontent.com/daivietpda/PDVN-LANG/master/VN.dict

Lưu ý sau khi có bộ từ điển tiếng Việt, cần phải chỉnh 2 chỗ nữa là trong config mà Makefile

# trunk/configs/templates/MI-4.config
CONFIG_FIRMWARE_INCLUDE_LANG_VN

# trunk/user/www/Makefile
ifeq ($(CONFIG_FIRMWARE_INCLUDE_LANG_VN),y)
        echo "LANG_VN=Tiếng Việt" >> $(ROMFS_DIR)/www/EN.header
        cp dict/VN.dict $(ROMFS_DIR)/www
        sed $(BOARD_PATTERN) -i $(ROMFS_DIR)/www/VN.dict
        sed $(COPYR_PATTERN) -i $(ROMFS_DIR)/www/VN.dict
        sed $(DWURL_PATTERN) -i $(ROMFS_DIR)/www/VN.dict
        sed $(DWURL_MOD_PATTERN) -i $(ROMFS_DIR)/www/VN.dict
endif

Sau một hồi test thử bản tiếng Việt mãi không được, tui hơi bị lười debug nên thôi bỏ qua vụ tiếng Việt nhé =))) fen nào muốn tự xử thì các bước cũng tựa như trên, debug thêm nhé, chứ tiếng Anh tiếng Việt cũng ko vấn đề gì lắm.

Xong xuôi các bước trên là đã chuẩn bị đủ, bây giờ tui sẽ build toolchain (cross-compiler and tools for building) trước, để có cái tí build firmware. Trong bản Padavan của thím hanwckf có sẵn phiên bản pre-build của toolchain, fen nào thích thì tải về hoặc chạy script dl_toolchain.sh sẽ tự tải về nhé, link ở đây mipsel-linux-uclibc.tar.xz. Còn tui lỡ build rồi thì build hết luôn, ngại ngần chi nữa.

> cd /build/rt-n56u/toolchain-mipsel
> ulimit -n 4096
> ./clean_toolchain
> ./build_toolchain

...
[INFO ]  Finishing installation (may take a few seconds)...
[37:34] / ====================All IS DONE!========================

3. Build firmware

Tool tiếc xong cả rồi, bây giờ sẽ cần cập nhật template config tương ứng với model router cần build và build firmware:

> cd /build/rt-n56u/trunk
> grep -v '^#' configs/templates/MI-4.config  | grep -v "^$" | grep -v "=n"
CONFIG_VENDOR=Ralink
CONFIG_PRODUCT=MT7621
CONFIG_FIRMWARE_PRODUCT_ID="MI-4"
CONFIG_LINUXDIR=linux-3.4.x
CONFIG_FIRMWARE_WIFI2_DRIVER=4.1
CONFIG_FIRMWARE_WIFI5_DRIVER=3.0
CONFIG_FIRMWARE_ENABLE_IPV6=y
CONFIG_FIRMWARE_INCLUDE_IPSET=y
CONFIG_FIRMWARE_INCLUDE_LANG_EN=y
CONFIG_FIRMWARE_INCLUDE_TCPDUMP=y
CONFIG_FIRMWARE_INCLUDE_EAP_PEAP=y
CONFIG_FIRMWARE_INCLUDE_SFTP=y
CONFIG_FIRMWARE_INCLUDE_OPENSSH=y
CONFIG_FIRMWARE_INCLUDE_OPENSSL_EC=y
CONFIG_FIRMWARE_INCLUDE_OPENSSL_EXE=y
CONFIG_FIRMWARE_INCLUDE_CURL=y
CONFIG_FIRMWARE_INCLUDE_MINIEAP=y
CONFIG_FIRMWARE_INCLUDE_HTOP=y
CONFIG_FIRMWARE_INCLUDE_NANO=y
CONFIG_FIRMWARE_INCLUDE_IPERF3=y
CONFIG_FIRMWARE_INCLUDE_MTR=y
CONFIG_FIRMWARE_INCLUDE_SOCAT=y
CONFIG_FIRMWARE_INCLUDE_SRELAY=y
CONFIG_FIRMWARE_INCLUDE_WIREGUARD=y

Bỏ hết các tính năng không cần thiết hoặc chưa có như cầu sử dụng như:

 ### using samba3.6 instead of samba3
-CONFIG_FIRMWARE_INCLUDE_SMBD36=y
+CONFIG_FIRMWARE_INCLUDE_SMBD36=n

 ### Include WINS server only. ~0.4MB
 CONFIG_FIRMWARE_INCLUDE_WINS=n
@@ -174,7 +175,7 @@ CONFIG_FIRMWARE_INCLUDE_DROPBEAR_FAST_CODE=n
 CONFIG_FIRMWARE_INCLUDE_OPENSSH=y

 ### Include OpenVPN. IPv6 required. openssl ~1.2MB, openvpn ~0.4MB
-CONFIG_FIRMWARE_INCLUDE_OPENVPN=y
+CONFIG_FIRMWARE_INCLUDE_OPENVPN=n

 ### Include StrongSwan. XFRM modules ~0.2MB, strongswan ~0.7MB
 CONFIG_FIRMWARE_INCLUDE_SSWAN=n
@@ -186,7 +187,7 @@ CONFIG_FIRMWARE_INCLUDE_OPENSSL_EC=y
 CONFIG_FIRMWARE_INCLUDE_OPENSSL_EXE=y

 ### Include xUPNPd IPTV mediaserver. ~0.3MB
-CONFIG_FIRMWARE_INCLUDE_XUPNPD=y
+CONFIG_FIRMWARE_INCLUDE_XUPNPD=n

 ### Include Minidlna UPnP mediaserver. ~1.6MB
 CONFIG_FIRMWARE_INCLUDE_MINIDLNA=n
@@ -195,7 +196,7 @@ CONFIG_FIRMWARE_INCLUDE_MINIDLNA=n
 CONFIG_FIRMWARE_INCLUDE_FIREFLY=n

 ### Include ffmpeg 0.11.x instead of 0.6.x for Minidlna and Firefly. ~0.1MB
-CONFIG_FIRMWARE_INCLUDE_FFMPEG_NEW=y
+CONFIG_FIRMWARE_INCLUDE_FFMPEG_NEW=n

 ### Include Transmission torrent. openssl ~1.2MB, transmission ~1.5MB
 CONFIG_FIRMWARE_INCLUDE_TRANSMISSION=n
@@ -215,13 +216,13 @@ CONFIG_FIRMWARE_INCLUDE_SCUTCLIENT=n

 CONFIG_FIRMWARE_INCLUDE_GDUT_DRCOM=n

-CONFIG_FIRMWARE_INCLUDE_DOGCOM=y
+CONFIG_FIRMWARE_INCLUDE_DOGCOM=n

 CONFIG_FIRMWARE_INCLUDE_MINIEAP=y

-CONFIG_FIRMWARE_INCLUDE_NJIT_CLIENT=y
+CONFIG_FIRMWARE_INCLUDE_NJIT_CLIENT=n

-CONFIG_FIRMWARE_INCLUDE_NAPT66=y
+CONFIG_FIRMWARE_INCLUDE_NAPT66=n

-CONFIG_FIRMWARE_INCLUDE_VLMCSD=y
+CONFIG_FIRMWARE_INCLUDE_VLMCSD=n

-CONFIG_FIRMWARE_INCLUDE_TTYD=y
+CONFIG_FIRMWARE_INCLUDE_TTYD=n

-CONFIG_FIRMWARE_INCLUDE_LRZSZ=y
+CONFIG_FIRMWARE_INCLUDE_LRZSZ=n

 CONFIG_FIRMWARE_INCLUDE_HTOP=y

@@ -259,4 +260,4 @@ CONFIG_FIRMWARE_INCLUDE_FRPS=n

 CONFIG_FIRMWARE_INCLUDE_TUNSAFE=n

-CONFIG_FIRMWARE_INCLUDE_WIREGUARD=n
+CONFIG_FIRMWARE_INCLUDE_WIREGUARD=y
  • OpenVPN thì thường nếu xài VPN service như đám NordVPN nó sẽ cấp ovpn config, lúc đó sẽ tận dụng được một tài khoản NordVPN dùng cho cả nhà. Nhưng OpenVPN thì hơi chậm, mà tui cũng ko xài nên tui bỏ.
  • Wireguard thì nhanh hơn OpenVPN, nhưng hình như đám VPN service chưa hỗ trợ, còn muốn xài thì phải tự build 1 cái VPS chạy wireguard để tự dùng nhé.

Fen nào thích sửa cái dòng COPYRIGHT thì sửa trong file này Makefile, sau khi biên dịch, load UI thì ở dưới footer sẽ thấy dòng chữ kiểu kiểu vầy nhé:

© 2011-2021 Padavan & N56U project community 
			Compiled by xluffy

Sau đó bắt đầu biên dịch firmware, nhớ $1 là tên của model, dùng để render config build từ cái file config template phía trên nhé, nó sẽ chép template phía trên ra .config.

> cd /build/rt-n56u/trunk && fakeroot ./build_firmware_modify MI-4

Sau khi biên dịch xong, custom firmware sẽ được đặt tại thư mục rt-n56u/trunk/images

> ls -larht rt-n56u/trunk/images

total 27M
drwxr-xr-x 14 root root 4.0K Nov 11 08:38 ..
-rw-r--r--  1 root root 7.0M Nov 11 08:50 ramdisk
-rwxr-xr-x  1 root root 3.6M Nov 11 08:50 zImage
-rw-r--r--  1 root root 8.2M Nov 11 08:50 zImage.lzma
drwxr-xr-x  2 root root 4.0K Nov 11 08:50 .
-rw-r--r--  1 root root 8.2M Nov 11 08:50 MI-4_3.4.3.9-099.trx

> sha256 rt-n56u/trunk/images/MI-4_3.4.3.9-099.trx
7988f80e1ddddc348469c61971e45a224f921e69347d9cf400160795fcc450ef  MI-4_3.4.3.9-099.trx

Ở đây ta sẽ chỉ cần file MI-4_3.4.3.9-099.trx, nạp file này vào device và xài.

Sau khi nạp firmware mới, chờ thiết bị khởi động xong, sẽ thấy có 2 AP mới là <Model>_xxxModel_5G_xxx, ví dụ của tui sẽ là MI-4_4557MI-4_5G_4557, kết nối vào AP này với mật khẩu mặc định là 1234567890. Sau đó truy cập vào web console với thông tin đăng nhập mặc định là admin/admin (hoặc các thông tin tuỳ chỉnh trong tệp rt-n56u/trunk/user/shared/defaults.h).

Địa chỉ truy cập Web console thông thường sẽ là 192.169.31.1, tuy nhiên có thể sẽ khác nên chỉ cần nhìn vào IP được cấp phát bởi DHCP sau khi kết nối AP để đoán dải mạng và truy cập địa chỉ đầu tiên .1 vào.

Có một vấn đề nhỏ liên quan đến macOS > 11.4 (tui cũng bị với macOS 12.0.1, Monterey) đó là truy cập web console rất chậm, phản hồi mất vài chục giây (nhưng ping thì phản hồi vẫn rất nhanh ~ vài ms, tuy nhiên nếu thử ở các phiên bản macOS thấp hơn hoặc Windows thì vẫn nhanh như thường, nên có vẻ ko phải vấn đề do firmware và router (lúc đầu tưởng firmware có bug làm highload system). Vẫn chưa biết cách fix, nhưng tạm thời có thể dùng máy khác cấu hình nên cũng chưa ảnh hưởng lắm.

4. Cấu hình nâng cao

Tệp rt-n56u/trunk/user/shared/defaults.h có một số tuỳ chỉnh, giúp tui build một bản build hoàn chỉnh để hạn chế các bước cấu hình khi trên web console sau khi nạp firmware:

#define SYS_USER_ROOT		"r00t"
#define DEF_ROOT_PASSWORD	"r000t@dBl2021"

=> Dùng để đổi user/password đăng nhập console

#define DEF_LAN_ADDR		"10.69.96.1"
#define DEF_LAN_DHCP_BEG	"10.69.96.100"
#define DEF_LAN_DHCP_END	"10.69.96.244"
#define DEF_LAN_MASK		"255.255.255.0"

=> Lớp mạng sau khi kết nối AP, ví dụ DEF_LAN_ADDR là địa chỉ dùng để truy cập vào web console

#define DEF_WLAN_2G_SSID	"ASUS"
#define DEF_WLAN_5G_SSID	"ASUS_5G"
#define DEF_WLAN_2G_GSSID	"ASUS_GUEST"
#define DEF_WLAN_5G_GSSID	"ASUS_GUEST_5G"

=> Tên của AP sau khi nạp kernel, có thể dùng BOARD_PID để gen AP name dựa trên BOARD

#define DEF_WLAN_2G_SSID        BOARD_PID "_xluffy_%s"
#define DEF_WLAN_5G_SSID        BOARD_PID "_5G_xluffy_%s"
#define DEF_WLAN_2G_GSSID       BOARD_PID "_GUEST_%s"
#define DEF_WLAN_5G_GSSID       BOARD_PID "_GUEST_5G_%s"
#define DEF_WLAN_2G_PSK		"r000t@dBl2021"
#define DEF_WLAN_5G_PSK		"r000t@dBl2021"

=> Mật khẩu đăng nhập mặc định của AP

#define DEF_TIMEZONE		"UTC-7"
#define DEF_NTP_SERVER0		"vn.pool.ntp.org"
#define DEF_NTP_SERVER1		"2.vn.pool.ntp.org"

=> Múi giờ mặc định (lưu ý là GTM+7 sẽ là UTC-7), NTP server mặc định

#define DEF_WLAN_2G_CC          "US"
#define DEF_WLAN_5G_CC          "US"

=> rt_country_code hay region_code, trong tab cấu hình của AP, dưới cùng sẽ cho phép thay đổi channels AP dựa trên region code.

5. Chặn quảng cáo

Cơ chế chặn quảng cáo cũng đơn giản như setup trên máy tính cá nhân, cơ chế là phân giải các domain quảng cáo về một địa chỉ IP không truy cập được (127.0.0.1 hoặc 0.0.0.0). Ở đây hầu hết là dùng dnsmasq để làm DNS server, (tuỳ chọn cung cấp dịch vụ DHCP luôn) hỗ trợ nạp tệp hosts chứa các domain quảng cáo.

Về cơ bản hiểu cách dnsmasq hoạt động sẽ hiểu cách cấu hình để chặn quảng cáo cho firmware này. Cấu hình dịch vụ DNS đơn giản chỉ vầy:

# DNS configuration
port=53
listen-address=127.0.0.1,10.69.96.1
 
domain-needed
bogus-priv
strict-order
 
no-hosts
domain=taoquangne.local
cache-size=1000

addn-hosts=/tmp/hosts.blocked
addn-hosts=/tmp/hosts.allow

Phần cấu hình DHCP như vầy

# DHCP configuration
dhcp-range=10.69.96.100,10.69.96.244.240,255.255.255.0,24h
dhcp-option=option:router,10.69.96.1
dhcp-option=option:dns-server,10.69.96.1
dhcp-option=option:netmask,255.255.255.0

Nhưng dự là đã được xử lý ở rt-n56u/trunk/user/shared/defaults.h rồi, bước này xem thêm cho biết thôi nhé

Nếu ngại tiếng Trung, mấy fen có thể kiếm mấy dự án tiếng Anh và có hỗ trợ router MI-R3G. Giữa MI-4 và MI-R3G chỉ khác nhau một chút (credit minax007):

RAM size: 128 MB instead of 256 MB
GPIO: Mi-Net button
LAN1/LAN2/WAN port assignments
No USB port

Chi tiết ở PR #671

6. Bootloader và BREED bootloader

Fen nào quen thuộc với hệ điều thành Linux sẽ quen thuộc với 2 bootloader như GRUB hoặc Syslinux. Hiểu một cách đơn giản thì bootloader chịu trách nhiệm nạp kernel và khởi tạo ramdisk trước khi bắt đầu quá trình khởi động. Đây là diễn giải về quá boot process trong ArcLinux tương tự vậy cho các thiết bị nhúng như router, bootloader cũng có chức năng khởi tạo phần cứng và nạp kernel.

Theo tui được biết thì các thiết bị nhúng hay xài nhất là U-Boot bootloader, cá nhân tui cũng đánh giá cao dự án này vì:

  • Dự án nguồn mở phát hành dưới giấy phép GPLv2.
  • Dự án vẫn được phát triển và bảo trì liên tục, tại thời điểm viết bài này tui thấy last commit là 15 hours ago. Source code đặt tại https://source.denx.de/u-boot/u-boot.
  • Website đầy đủ thông tin và chuyên nghiệp vl, cảm giác khá tin tưởng http://www.denx.de/wiki/U-Boot/WebHome.

Tuy nhiên cộng đồng thì lại khoái xài BREED bootloader (Boot and Recovery Environment for Embedded Devices - BREED), bootloader này được thím hackpascal một lập trình viên Trung Quốc phát triển với một số đặc điểm sau:

  • Không dính dáng gì tới U-Boot, là một phiên bản độc lập, phát triển từ đầu.
  • Miễn phí nhưng không phải mã nguồn mở, nên ông nào xài thì tự chịu trách nhiệm với bản thân nhé.
  • Hỗ trợ upgrade realtime firmware qua giao diện web (tức là mấy ông zô WEB, bấm upload firmware hoặc paste link vô nó tự mần, khác với các bản bootloader khác là phải scp lên, chạy lệnh nạp bootloader vào phân vùng này, phân vùng kia …)

Thông tin về bootloader này khá hạn chế, tác giả chỉ cung cấp link tải tại https://breed.hackpascal.net/ và giới thiệu về BREED ở https://www.right.com.cn/forum/thread-161906-1-1.html, khổ cái toàn tiếng Trung, dịch mãi cũng không rõ là viết cái gì =)). Tuy nhiên tác giả vẫn cập nhật bootloader này, lần cập nhật cuối cùng là vào ngày 09-10-2020.

Xin lưu ý lại một lần nữa là BREED không phải phần mềm mã nguồn mở, nên tui không biết tác giả làm gì trong mã nguồn, nếu đã chấp nhận xài là chấp nhận rủi ro.

Và như đã nói ở đầu thì tui đoán cái thím bán cho tui con MI-4 này cũng xài BREED vì nó tiện cho quá trình nạp Padavan, thành ra cũng hơi nghi ngại. Dự án U-Boot thì xịn xò thế kia, tội gì ko thử?

Cách cài BREED thì rất nhiều các bản tiếng Nga, tiếng Việt trên VoZ, diễn đàn miui.vn đủ cả, tự tìm nhé.

7. Restore bootloader stock và ROM stock

Các bước như sau:

  • Quay về bootloader stock thay vì BREED bootloader
  • Quay về ROM stock

Phần mềm cần chuẩn bị:

Cách bước làm thì thím lethanhtuan2895 có hướng dẫn rồi nhé.

May mắn thay, sau một hồi lần mò trên OpenWrt tui đã nhìn thấy bản backup uboot mà thím thread này đã cẩn thận backup lại tại link này, xin phép tải về lưu trữ chứ tìm cực quá:

Sau đó tui kiểm tra checksum với bản của thím lethanhtuan2895

# bản của 0shape trên OpenWrt
> sha256sum Bootloader.bin
89b517f76073e9e093f05d9baf6df003a3d1fa82d46e6421914ef0650ee4583d  Bootloader.bin

# bản của lethanhtuan2895
> sha256sum Bootloader/Bootloader_MIR4.bin
89b517f76073e9e093f05d9baf6df003a3d1fa82d46e6421914ef0650ee4583d  Bootloader/Bootloader_MIR4.bin

Ngon, đỡ phải tự build, hi vọng 2 thím này không phải là 1🤏, ko là xu cà na luôn.

8. Kết quả

Việc còn lại là:

  • Load lại bootloader
  • Load lại stock firmware
  • Cài Padavan bản build ở mục 3

9. Tự build U-Boot (bonus)

Ông nào muốn tự build U-Boot thì có thể nghía 2 repo sau:

Với bản mod của thím pepe2k:

  • based trên U-Boot 1.14, sửa tùm lum tà la nhưng dựa trên TP-Link là chủ yếu, ngoài có thêm mã của đám Link, Netgear, ZyXELBelkin, tất cả các cty này sử dụng SDK từ Qualcomm/Atheros.
  • Mục tiêu của bản mod này là hỗ trợ các thiết bị router yếu yếu của TP-Link, ví dụ con TL-WR703N, nhưng bây giờ thì hỗ trợ tùm lum tè le các thiết bị Atheros AR934x, Qualcomm Atheros QCA953x, Qualcomm Atheros QCA955x.
  • Cơ mà đen cái là chưa hỗ trợ Qualcomm Atheros QCA956xMediaTek MT762x, trong đó chip MT762x là cái con tui đang xài, xu cà na luôn 🥺🥺🥺.
  • Tuy nhiên tui nghía thử thì bản mod này khá xịn, hỗ trợ upgrade firmware, U-Boot và ART (Atheros Radio Test) image trực tiếp thông qua giao diện web luôn, khỏi cần qua mấy cổng serial và TFTP. [1]
  • Có hướng dẫn build cụ thể trên Linux và macOSX [2]

Còn bản mod của thím shibajee có hỗ trợ Mediatek SoC, chip MT7621 và tui có thấy config cho con MI-R3G_SPI, con này có vẻ hơi giống con MI-R4 của tui. Tụi Mì xào này đặt tên lằng nhằng vãi, anh em check specs kĩ nhé, search xui xui toàn ra mấy con MI Phone, cay:

10. Túm lại

Với giá 350k, được một con AP có cấu hình khá xịn xò, quay cả được PPPoE (nhưng nghe bảo gói home của nhà mạng ko cho cấu hình thiết bị đính kèm thành bridge nên tui cũng chưa thử), chạy 2 băng tần, firmware mở với nhiều tính năng tốt, nói chung là cũng khá hời.

Khúc bảo các gói home của nhà mạng ko cho cấu hình thiết bị đính kèm thành bridge có vẻ tui sai, nhà tui xài gói rẻ nhất của VNPT giá 165k, kèm iGate GW020, và tui ngứa tay thử search thì hoá ra vẫn chuyển sang mode bridge được. Nhưng tui chưa thử, cuối tuần này tui sẽ thử. Thế đã nhé.

cáo-từ