一:內核的編譯.javascript
1,linux 編譯環境的搭建與源碼的準備工做html
2,經常使用軟件的安裝 (make menuconfig)java
3, 針對TP-Link WR740N 一些軟件的openwrt 的移植linux
4,內核的編譯c++
二:OpenWrt Eclipse 編譯環境的搭建git
1,OpenWrt 平臺依賴包的安裝github
2,Eclipse 環境的配置shell
3, 遠程調試設置服務器
三:OpenWrt 上 dr.com移動的編寫與移植網絡
1,源碼的分析
2,源碼的移植
3,功能的實現
4,程序的運行與安裝
四,參考
一:1,編譯環境的搭建與源碼的準備工做
內核的編譯須要在linux環境下進行,因此預先安裝該系統.針對CentOS須要預先安裝相應的依賴包.
yum install subversion binutils bzip2 gcc gcc-c++ gawk gettext flex ncurses-devel zlib-devel make patch unzip perl-ExtUtils-MakeMaker glibc glibc-devel glibc-static quilt ncurses-lib sed sdcc intltool sharutils bison wget git-core openssl-devel xz
經過git獲取源碼,源碼的地址能夠GOOGLE搜索本身須要的版本.源碼從這裏下載 https://downloads.openwrt.org/
git clone git://git.openwrt.org/14.07/openwrt.git
進入源碼目錄並下載相關軟件包
cd openwrt ./scripts/feeds update -a ./scripts/feeds install -a
2,經常使用軟件的安裝 (make menuconfig)
linux 內核的配置相對比較人性化,使用make menuconfig大大簡化了操做.
make defconfig make prereq make menuconfig
具體軟件的選擇能夠參考這裏 http://www.right.com.cn/forum/thread-83746-1-1.html,再也不作多於介紹.若是不想添加什麼軟件,能夠簡單作如下修改:
Target Systme---> 修改成本身的平臺cpu型號
Target Profile --->修改成本身的型號,個人是TP-LINK WR740N
Target Images ---> suashfs --->
LuCI ---> Collection ---> luci
LuCI---> Applications--->luci-app-samba
完成以後退出保存便可.
3,針對TP-Link WR740N 一些軟件的openwrt 的移植
對於國內的型號和國內的型號略有不一樣,因此原源碼的端口部分須要作簡單修改.
(1)解決WAN 口在 LAN4位置的錯誤.找到文件mach-tl-wr741nd-v4.c,在目錄(你源碼的目錄)/target/linux/ar71xx/files/arch/mips/ath79/下,將代碼 ath79_setup_ar933x_phy4_switch(true, true); 改成ath79_setup_ar933x_phy4_switch(false, false);或者直接刪掉.
(2)解決燈位置不對的問題.LAN4 的燈在 WAN的位置,只須要修改上面文件的宏定義部分,將TL_WR741NDV4_GPIO_LED_WAN 修改成 17, TL_WR741NDV4_GPIO_LED_LAN4 修改成13便可.
(3)打開wifi 開關, package/kernel/mac80211/files/lib/wifi/mac80211.sh 看到 REMOVE THIS LINE TO ENABLE WIFI ,因此須要註釋掉下面的一行代碼即可以使能WIFI了.
(4)修改flash 大小.修改 ./tools/firmware-utils/src/mktplinkfw.c 將WR740對應的關聯字段 "4" 和 "4m" 改爲 "8" 和"8M".
修改 ./target/linux/ar71xx/image/Makefile, 把740nd最後的4Mlzma改爲了8Mlzma或16Mlzma .
4,內核的編譯
內核編譯過程當中須要聯網,會下載大量的編譯依賴包,部分URL會下載不了,能夠到這裏下載http://dl.zjuqsc.com/router/openwrt/dl/ 放到源碼目錄下 ./dl 目錄便可.
使用這個命令進行編譯 make -j5 V=99 2>&1 |tee build.log |grep -i error ,日誌會在當前 源碼目錄,對於第一次編譯最好不使用 -j 參數,便於出錯時會錯誤查找.內核的編譯大概須要幾個小時,依機器和網絡環境.
二:1,OpenWrt 平臺依賴包的安裝
爲了實現openwrt的在線調試,openwrt端須要安裝一些 ipk包,能夠到這裏下載(https://downloads.openwrt.org/)根據本身對應版本下載相應的包,須要下載的包以下:
(1),DropBear or OpenSSH installed & connections can be established
(2),libstdcpp (optional for C++)
(3),openssh-sftp-server
(3),gdbserver
(4),libthread-db
將包下載到拷貝到openwrt的samba服務器的目錄(提早搭建好的),而後使用命令 opkg install 你的包.ipk 若是須要什麼包下載安裝便可,不得不說openwrt依賴包這塊作的仍是至關不錯的.
2,Eclipse 環境的配置
官方有關於Eclipse 相關配置的說明,不過內容過於老舊.到博客時間最新的版本爲eclipse-cpp-luna-SR2-linux-gtk-x86_64.tar.gz, 能夠從這裏下載關解壓下載的軟件,放到相應的目錄.便完成了安裝.
最新版本的Eclipse 已經集成了 Crosss Compiler 和 Remote System Explorer的功能.
新建工程 Create a new project: Menu → File → New C++ Project ,一直 next 直到這裏,按照你的 CPU添加.
能夠新建一個內置的 hello world 工程測試本身配置是否正確,若是正確,編譯會是下面這個結果.
23:58:57 **** Rebuild of configuration Debug for project openwrt_test **** Info: Internal Builder is used for build mips-openwrt-linux-g++ -O0 -g3 -Wall -c -fmessage-length=0 -o src/openwrt_test.o ../src/openwrt_test.cpp mips-openwrt-linux-g++ -o openwrt_test src/openwrt_test.o 23:58:59 Build Finished (took 2s.533ms)
3,遠程調試設置
打開 Remote System Explorer ,右鍵Local -->new 出現下面這個對話框,選擇 linux.
填寫你遠程主機的IP地址, connection name能夠填寫容易區分的名子.
選擇 ssh.files.
選擇 processes.shell.linux.
選擇 ssh.files.
右鍵你的遠程鏈接,connect,輸入密碼便可鏈接. 對於要求設置 storage 的 password 能夠不用管,cancel便可.成功鏈接以後右鍵 Ssh Terminal-->Launch Terminal 會顯示下面這個狀態,表示已經鏈接成功.
下面進行運行,和debug的一些設置. 右鍵工具欄, Debug-->Debug Configurations.
右鍵 C/C++ Remote Application--->New . 在Main標籤頁欄, Connection選擇已經創建的那個鏈接, 並設置Remote Absolute Path for C/C++ Application.(務必不要忘記)
進入 Debugger 標籤頁,設置你的交叉 gdb 路徑 (在你的工具鏈目錄中).
設置完成以後即可以進行在線調試,並會出現下面提示對話框.
最終運行的效果以下圖:
三:1,Dr.com 源碼分析與重構
Linux版本的Drcom已經完成,在github倉庫中有 CentOS x64_86版本和 OpenWrt 版本mips_AR7xxx_AR9xxx ,連接以下:
https://github.com/sunke-github/Drcom8021x_linux
https://github.com/sunke-github/Drcom8021x_Openwrt
具體源碼不作詳細分析 ,後期將會添加 UML時序圖,便於後面想閱讀和修改代碼的童鞋.
參考:
http://wiki.openwrt.org/doc/howto/buildroot.exigence