|
花生殼phtunnel嵌入Openwrt 詳細介紹如何將phtunnel封裝成一個openwrt標準組件,并編譯到自己的openwrt固件中。 phtunnel組件制作下載 下載自己的編譯平臺的二進制phtunnel文件是第一步要做的,我們可以到oray的官方github網(wǎng)站進行下載,根據(jù)自己的型號進行下載,比如我的路由器是基于MIPSel,c庫使用的是uclibc,那么我可以進入xxxxx,進入xxxxxxxx,并下載mipsel-uclibc-phtunnel文件。
規(guī)劃目錄結(jié)構(gòu)接 下來的任務(wù)是規(guī)劃自己的phtunnel組件安裝后,在openwrt系統(tǒng)上是怎樣的目錄結(jié)構(gòu)。 首先核心的應(yīng)用程序phtunnel我們可以放在/usr/bin目錄下,因為它是一個非管理員應(yīng)用,所以一般比放在/usr/sbin目錄下要更科學一些。 uci配置文件:由于openwrt的uci是常用的配置解決方案(不理解uci可參閱其他文檔),所以需要一個uci配置文件,該文件通常放在/etc/config目錄下,同時我們?nèi)∶瑯訛?/span>phtunnel,這樣就可以使用uci set phtunnel.xx.xx等操作phtunnel的配置了。 根據(jù)phtunnel列出的參數(shù),uci的配置如下:
啟動腳本:通常應(yīng)用都是作為守護腳本運行,所以phtunnel也會制作成守護程序,自動運行,所以需要在/etc/init.d中建立phtunnel的啟動腳本,名稱也叫phtunnel。 hotplug.d機制:為了及時響應(yīng)網(wǎng)絡(luò)狀態(tài),快速重啟phtunnel,可使用hotplug機制。這樣在wan口斷開重新連上網(wǎng)的時候,能馬上重啟phtunnel。在/etc/hotplug.d/iface下需要創(chuàng)建一個xx-phtunnel的腳本,其中xx代表腳本執(zhí)行順序,可以隨便填。 這樣,安裝后的目錄結(jié)構(gòu)是如下圖
編寫phtunnel組件Makefile 根據(jù)目錄結(jié)構(gòu)規(guī)劃,現(xiàn)在來編寫組件,由于openwrt的組件是用makefile文件編寫。
將makefile及規(guī)劃的files目錄統(tǒng)一放在phtunnel目錄內(nèi),然后放在openwrt的package/utils目錄中即可(可放在package下的任何位置),再來看一下目錄結(jié)構(gòu)
這時執(zhí)行make menuconfig后,就能看到phtunnel組件了
選中該組件后保存,執(zhí)行make,就可以編譯出帶phtunnel的固件了和對應(yīng)的phtunnel的ipk組件包了。 啟動腳本 用于啟動與停止phtunnel,啟動后讀取uci配置,變成phtunnel的啟動參數(shù),然后啟動phtunnel程序,代碼如下:
這里用到了openwrt的PROCD機制,這樣可以在phtunnel意外崩潰的情況下,自動重啟。 hotplug腳本
用于在wan接口連接有效時,重新開啟phtunnel,加速重連速度。 phtunnel-luci-app組件制作功能 phtunnel運行后,需要進行掃碼登錄,管理,解綁等操作,這些都是需要與客戶的交互操作,openwrt提供的luci是實現(xiàn)交互的最佳選擇,也是最正式的方式,下面來制作基于luci的phtunnel組件。 核心模塊 luci的代碼區(qū)域在/usr/lib/lua/luci中,所以所有交互的web代碼都放在這個下面,首先是核心的基礎(chǔ)庫phtunnel.lua,它將提供所有核心函數(shù),如獲取二維碼,登錄信息和解綁操等核心功能。
所有函數(shù)的核心都是調(diào)用wget來訪問rpc服務(wù)和官方提供的web服務(wù)。 LUCI頁面 完成核心函數(shù)庫后,接下來就是根據(jù)luci的架構(gòu)進行開發(fā)。首先是規(guī)劃菜單與菜單項,如圖:
完成這樣的菜單,需要在controller目錄下實現(xiàn),如圖:
其中setup頁面用于設(shè)置基本參數(shù),Status頁面用于掃碼與解綁,Log用于顯示日志。 Setup頁面 設(shè)置頁面是一個純UCI頁面,我們可以使用luci提供的cbi模塊開發(fā)。
顯現(xiàn)的頁面如圖
Status頁面 該頁面用于顯示二維碼,管理界面鏈接及解綁。相關(guān)代碼在view/oray/phtunnel_status.htm, view/oray/phtunnel_inner_status.htm, view/oray/phtunnel_log_off.htm, phtunnel_status.htm : 用于顯示當前狀態(tài)。 phtunnel_inner_status.html : 用于后臺實時檢測綁定狀態(tài),當用戶使用手機刷二維碼綁定后,phtunnel_status.htm頁面動態(tài)顯示綁定賬號。 phtunnel_log_off : 用于解綁賬號
Log頁面 用于顯示日志,該頁面相對簡單(view/oray/phtunnel_log.htm),
通過uci獲取日志路徑,并使用cat命令將文件內(nèi)容輸出即可。 制作組件的makefile 與制作phtunnel組件一樣,將所有文件組織成目錄樹,并加入Makefile
Makefile
最后同樣將組件復制到openwrt/package/utils/下,這樣我們可以在配置界面中看到phtunnel-luci-app組件
選擇以上兩個組件,充分編譯后,即可在本地的luci界面上使用phtunnel了。 |
|
|