編譯自己的openwrt

前置條件

  1. 編譯環(huán)境:Linuxmint 18.2 64-Bit
  2. 路由器型號:TP-LINK TL-WR720N v3, 改過硬件:16M Flash / 64M Memory
  3. 編譯過程中會頻繁下載東西,需要有網(wǎng)絡(luò)良好的環(huán)境。整個(gè)編譯過程可能會持續(xù)1到2個(gè)小時(shí)。

注意事項(xiàng)

  1. 請不要用root用戶編譯!
  2. 編譯命令請?jiān)贠penWrt編譯環(huán)境的根目錄下運(yùn)行,例如: ~/openwrt
  3. 編譯環(huán)境所在的每一級目錄的目錄名稱都不要有空格,
    OpenWrt的目錄所有者要改成root以外的用戶。 (sudo chown -R user:username /openwrt/)

編譯原因

官方有原版的WR720N固件:https://downloads.openwrt.org/

優(yōu)點(diǎn)是方便,缺點(diǎn)是不能自己定制,因?yàn)槲沂歉倪^ Flash 大小的,必須自己編譯。

最主要的我想在路由器里運(yùn)行ngrok,WR720N的CPU AR9331屬于MIPS架構(gòu),GO直到GO1.6才支持MIPS64,GO1.8才支持MIPS。在此之前也有大神用C語言重寫ngrok,具體可以看大神在github上的項(xiàng)目。雖然說GO1.8之后的版本開始支持MIPS架構(gòu),但是需要系統(tǒng)內(nèi)核開啟FPU(Float Point 語言Unit,浮點(diǎn)運(yùn)算單元)才能使用。這次編譯最主要的就是開啟內(nèi)核的FPU功能。

開始編譯

以下是我對改過硬件的 TL-WR720N 編譯適合的固件的步驟:

1. 獲取最新源碼

如何獲取源碼可查看:https://dev.openwrt.org/wiki/GetSource

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

也可以獲取特定分支的源碼,例如我們獲取 15.05 branch (Chaos Calmer) 這個(gè)分支 。以下步驟都使用的這份源碼

git clone git://git.openwrt.org/15.05/openwrt.git

2. 修改源碼,使其適用于 16M Flash。

參考的這篇文章: http://wiki.openwrt.org/toh/tp-link/tl-wr703n#mb_flash_mod

進(jìn)入源碼目錄 cd openwrt

打開 target/linux/ar71xx/image/Makefile 這個(gè)文件。將如下內(nèi)容

define Device/tl-wr720n-v3
    $(Device/tplink-4mlzma)
    BOARDNAME := TL-WR703N
    DEVICE_PROFILE := TLWR720
    TPLINK_HWID := 0x07030101
    CONSOLE := ttyATH0,115200
endef

改為:

define Device/tl-wr720n-v3
    $(Device/tplink-16mlzma)
    BOARDNAME := TL-WR703N
    DEVICE_PROFILE := TLWR720
    TPLINK_HWID := 0x07030101
    CONSOLE := ttyATH0,115200
endef

打開 tools/firmware-utils/src/mktplinkfw.c 這個(gè)文件。將如下內(nèi)容:

.id             = "TL-WR720Nv3",
.hw_id          = HWID_TL_WR720N_V3,
.hw_rev         = 1,
.layout_id      = "4Mlzma",

改為:

.id             = "TL-WR720Nv3",
.hw_id          = HWID_TL_WR720N_V3,
.hw_rev         = 1,
.layout_id      = "16Mlzma",

3. 下載和安裝所有可用的 Feeds(可選)

feeds其實(shí)就是外圍的軟件源,如luci就是其中之一,不是OpenWrt核心開發(fā)組的。還是執(zhí)行這一步比較好。feeds的說明參考這篇文章:http://wiki.openwrt.org/doc/devel/feeds。

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

4. 檢查依賴軟件

運(yùn)行下面的命令(3選1!),讓OpenWrt編譯系統(tǒng)檢查編譯環(huán)境中缺失的軟件包:

make menuconfig         # 總體配置,推薦使用此命令
make defconfig                  # 默認(rèn)配置
make prereq                         #
# 如果以上3個(gè)命令都運(yùn)行了,編譯會出錯(cuò)!

根據(jù)提示安裝對應(yīng)的軟件。如果以前沒裝過build-essential這個(gè)包的話,這次也要安裝這個(gè)包。

5. 總體配置

make menuconfig

輸入以上命令之后,會進(jìn)入一個(gè)命令行圖形界面,界面最上面是用法。

  • <*> 該代碼將被放入固件中 (on the SqashFS partition)
  • < > 該代碼將不會被編譯
  • <M> 該代碼將被交叉編譯,生成的ipk軟件包將被放在 /buildsystem/bla/bla/bla, 但該軟件包不會放入固件中

以下是我的一些配置。

  • 選擇 CPU 型號
    Target System 選為 Atheros ARM7xxx/ARM9xxx

  • 選擇路由器型號
    Target Profile 選為 TP-LINK TP-WR720N

  • 啟用 Web 管理界面 LuCI
    LuCI → Collections → 選中 luci

  • 添加 LuCI 中文支持
    LuCI → Modules → Translations → 選中 Chinese (zh-cn)

  • 添加支持USB自動mount功能
    添加USB相關(guān)支持
    Kernel modules —> USB Support —> <*> kmod-usb-core.
    Kernel modules —> USB Support —> <*> kmod-usb-ohci.
    Kernel modules —> USB Support —> <*> kmod-usb-uhci.
    Kernel modules —> USB Support —> <*> kmod-usb-storage.
    Kernel modules —> USB Support —> <*> kmod-usb-storage-extras.
    Kernel modules —> USB Support —> <*> kmod-usb2.
    添加USB掛載
    Base system —> <*>block-mount
    添加自動掛載工具
    Utilities —> Filesystem —> <*> badblocks
    添加文件系統(tǒng)支持
    Kernel modules —> Filesystems —> <*> kmod-fs-ext4 (移動硬盤EXT4格式選擇)
    Kernel modules —> Filesystems —> <*> kmod-fs-vfat(FAT16 / FAT32 格式 選擇)
    Kernel modules —> Filesystems —> <*>kmod-NTFS(NTFS選擇,具體是什么忘記了,總之有NTFS字樣的)
    添加UTF8編碼,CP437編碼,ISO8859-1編碼
    Kernel modules —> Native Language Support —> <> kmod-nls-utf8
    Utilities ---> disc ---> <
    > fdisk.................................... manipulate disk partition table
    Utilities ---> <*> usbutils................................... USB devices listing utilities

6. 內(nèi)核配置

make kernel_menuconfig

進(jìn)入文本行圖形界面后,開啟FPU。

  • Kernel type → 選中 MIPS FPU Emulator

7. 編譯

make

更多編譯選項(xiàng)參考文章最后面的鏈接。整個(gè)編譯過程會比較久,這段時(shí)間可以去做點(diǎn)別的事情,比如我打完make命令之后就去洗澡睡覺了。囧......

編譯好了之后可在 bin/ar71xx 目錄找到生成的固件:

  • openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-factory.bin
  • openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin

刷機(jī)

(待定,這一步我沒有做。我買路由器的時(shí)候淘寶商家已經(jīng)刷了明月永在的固件和不死uboot,我是直接刷openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin的。而且也沒有出現(xiàn)過刷死的情況。)

我所使用的 U-Boot 是這個(gè):https://github.com/pepe2k/u-boot_mod。
步驟如下:

  1. 將電腦 IP 設(shè)置為 192.168.1.2, 子網(wǎng)掩碼設(shè)置為 255.255.255.0;
  2. 斷開路由器的電源,用網(wǎng)線連接好電腦和路由器;
  3. 按住路由器的 Reset 按鈕,插上電源,待路由器燈閃四次后放開,放開后,路由器燈會快閃一次,代表進(jìn)入了恢復(fù)模式;
  4. 用電腦瀏覽器打開 http://192.168.1.1/index.html, 打開后,上傳固件;
  5. 上傳完固件后,等一段時(shí)間,待機(jī)器自動重啟此時(shí)可將電腦 IP 設(shè)置為自動獲取。

配置系統(tǒng)

這里可以參考我的另外一篇筆記。

錯(cuò)誤(后續(xù))處理

  1. 關(guān)于自己編譯的系統(tǒng)不能安裝官方軟件源的軟件。

安裝不了的軟件大多是跟內(nèi)核相關(guān)的,一般都會帶有kmod字樣,如kmod-fs-ext4。這是因?yàn)楣俜杰浖吹能浖幾g時(shí)用的內(nèi)核和我們自己的不一樣,就算opwnwrt正式版的已經(jīng)發(fā)布,但是github上的代碼還是會更新,包括內(nèi)核版本。比如官方的Chaos Calmer內(nèi)核是3.18.21,我從github上下的內(nèi)核時(shí)3.18.45。這時(shí)候在安裝命令之后加上 --force-depends即可

opkg install kmod-fs-ext4 --force-depends

  1. 路由器指示燈一直在閃爍

這個(gè)是因?yàn)樵诰幾g固件時(shí)沒有選擇led燈的配置項(xiàng),系統(tǒng)就采用默認(rèn)值??梢杂靡韵碌拿钤O(shè)置LED燈。以下命令最好加入到開機(jī)啟動項(xiàng)中。

LED燈長亮:

echo "1" > /sys/devices/platform/leds-gpio/leds/tp-link:blue:system/brightness

LED燈熄滅:

echo "0" > /sys/devices/platform/leds-gpio/leds/tp-link:blue:system/brightness

LED燈閃爍:

cd /sys/devices/platform/leds-gpio/leds/tp-link:blue:system/
echo timer > trigger
echo 100 > delay_on
echo 100 > delay_off

注意:延時(shí)時(shí)間(delay_on)要小于255。

參考文章:

  1. 編譯自己的 OpenWrt 固件
  2. OpenWrt編譯系統(tǒng) – 安裝
  3. OpenWrt Buildroot – 使用說明
  4. Ubuntu下交叉編譯kcptun go語言源碼 for openwrt
  5. System configuration
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容