原創作品,轉載請註明出處,嚴禁非法轉載。如有錯誤,請留言!
email:[email protected]
宣告:本系列涉及的開源程式程式碼學習和研究,嚴禁用於商業目的。 如有任何問題,歡迎和我交流。(企鵝號:408797506)
本篇用到的檔案包下載路徑:http://download.csdn.net/detail/eryunyong/9735149
一. 環境
1.GNU/Linux Centos6.5作業系統
2.gcc
二. 依賴包的安裝
1. expat-2.1.0
1)下載安裝包expat-2.1.0.tar.gz ,路徑http://www.libexpat.org/
2)解壓
tar -xvf expat-2.1.0.tar.gz
3)進入目錄
cd expat-2.1.0;mkdir tmp
4) 配置安裝路徑到tmp
./configure --prefix=$PWD/tmp(如果是本地linux系統,只需要./configure)
5) 安裝
make;make install
6)拷貝tmp目錄下相應的檔案到需要的位置(暫跳過)
2. openssl-1.0.2(暫時跳過)
因為curl的安裝包依賴於openssl以及在CWMP中要用到SSL證書的HTTPS安全方式,所以提前先安裝上openssl
1)下載安裝包openssl-1.0.2.tar.gz,路徑http://distfiles.macports.org/openssl/
2)解壓
tar -xvf openssl-1.0.2.tar.gz
3) 進入目錄
cd openssl-1.0.2;mkdir tmp;mkdir tmp/openssl
4) 配置安裝路徑和配置檔案路徑
./config shared --prefix=$PWD/tmp --openssldir=$PWD/tmp/openssl(如果是本地linux系統,只需要./config shared)
5)安裝
make;make install
6) 拷貝tmp目錄下相應的檔案到需要的位置(暫跳過)
3.curl-7.21.4
1)下載安裝包curl-7.21.4.tar.gz,路徑: http://pkgs.fedoraproject.org/repo/pkgs/curl/
2) 解壓
tar -xvf curl-7.21.4.tar.gz
3) 進入目錄
cd curl-7.21.4;mkdir tmp
4) 配置安裝路徑和SSL選項(SSL支援放到以後的高階部分專門介紹)
./configure --without-ssl --prefix=$PWD/tmp
5) 安裝
make;make install
6) 拷貝tmp目錄下相應的檔案到需要的位置(暫跳過)
至此,CWMP core依賴的安裝包已經完成了。
三. 安裝cwmp
因為CWMP core不開源,這裡提供X86 Centos6.5平臺下編譯好的安裝程式。如果有不同環境的讀者需要此程式,可以留言。
把編譯出來的可執行檔案cwmp拷貝到電腦或者裝置的可行性路徑下即可。
四. libcwmp庫安裝
這裡涉及到對資料的儲存和操作,我們知道openwrt引入了UCI,是一套配置引數管理系統。所以我們首先需要了解UCI的基本操作和知識,這裡不做介紹了,此外也可以通過輕量級嵌入式資料庫sqlite來管理資料。
1. UCI安裝
為了便於後續的開發,這裡移植了在曾經的產品中開發過的luci,主要變化是在/usr/config/下面多出了一份動態儲存引數,而在/etc/config/目錄下的配置是預設引數配置。即,當uci程式獲取某配置引數資訊的時候,首先會從/usr/config/目錄載入配置,如果讀到則返回。若讀取不到,再從/etc/config/目錄載入配置。
1)下載安裝包uci-0.4.0.tar.gz,路徑http://distfiles.macports.org/openssl/
2)解壓
tar -xvf uci-0.4.0.tar.gz
3) 進入目錄
cd uci-0.4.0;mkdir tmp
4) 編譯
make
5) 安裝 (暫跳過)
將產生的*.h *.so 拷貝到需要的位置
Note: 也可以手動修改原始碼目錄下Makefile的install規則,然後make install。
2)libcwmp安裝
提供原始碼,可以自由開發。將編譯出來後的so放到/usr/lib目錄下即可。(需要原始碼可留言郵箱地址)
五. 下載安裝包
下載路徑:http://download.csdn.net/detail/eryunyong/9735149
基於上述操作,我把依賴包的依賴程式(動態庫和標頭檔案)和測試資料的配置放到了一個打包檔案裡,並寫了相應的指令碼檔案。下面是使用說明,可供參考。
指令碼的使用說明:
如果你和我一樣,新裝了X86平臺下的Centos6.5系統,只需要解壓安裝包並執行make命令即可完成cwmp的core安裝和所有依賴包程式需要的檔案。
如何環境不一樣,比如使用Ubuntu或者Fedora等系統,直接執行我在Centos6.5環境編譯出來的程式會遇到很多錯誤,有的是共享庫出錯,有的是軟體版本不一致(比如Glibc)等(參考第六節)。
所以,除了CWMP core沒有原始碼之外,其他所有程式建議重新編譯,並且把編譯後產生的程式或者依賴檔案(動態庫和標頭檔案)放到你的環境中。
下載安裝包,解壓後看到如下目錄:
cwmp_dep_packet用到的上述依賴包。
etc和usr目錄存放的是資料。
lib和include儲存的是上述依賴包編譯出來的標頭檔案和動態庫(暫時不需要靜態庫)。(現在明白為什麼依賴包安裝的時候最後一個步驟是"暫跳過"了吧,只需要把所有安裝的程式拷貝到這裡,並執行make就自動完成了cwmp的部署)
bin是用到的可執行程式。
指令碼install_dep.sh安裝所用到的配置資料。(可單獨操作)
指令碼install_dep.sh.sh安裝所用到的依賴檔案。(可單獨操作)
/lib/link.sh指令碼是建立lib目錄下用到的動態庫so檔案的軟連線。(可單獨操作)
Makefile主要是完成上面三個指令碼的動作。
六. 測試
在測試之前,必須先配置好引數和環境。
acs url 和CPE 地址對應的檔案位置,根據自己的環境進行修改。
執行命令:
命令和測試: [root@localhost X86移植_CentOS]# make [root@localhost X86移植_CentOS]# cwmp -F /etc/config/cwmp_global.conf
log預設輸出到/tmp/log/cwmp1.log 檔案,可使用命令tail -f /tmp/log/cwmp1.log 追蹤檢視。如果需要修改log儲存路徑,可以修改配置/etc/config/log1.conf檔案裡的路徑。
Note:首次安裝後/tmp/log目錄會被建立,由於tmp目錄下內容斷電會丟失,所以每次重啟系統需要手動建立/tmp/log目錄。
七. 跨平臺或作業系統遇到的問題
下面是將Ubuntu12.04作業系統的依賴包直接移植到Centos6.5移植過程中遇到的錯誤,而不是重新編譯了一把依賴包和程式,僅供參考:
問題一:
cwmp: error while loading shared libraries: librtmp.so.0: cannot open shared object file: No such file or directory
原因:
[root@localhost X86移植]# grep "rtmp" . -R
Binary file ./lib/libcurl.so.4.2.0 matches
解決方法:
1)重新編譯libcurl去掉rtmp協議支援,(2)或者在Centos系統上安裝rtmp庫,而安裝rtmp協議需要openssl和zlib庫的支援。
參考:http://blog.csdn.net/u014037733/article/details/22978887
這裡用第一種方式,重新編譯libcurl,去掉librtmp支援。選項--without-librtmp
即配置libcurl時使用命令:./configure --without-ssl --prefix=$PWD/tmp --without-librtmp
最後把make出來的檔案拷貝到需要的位置即可。
問題二:
root@localhost X86移植]# easycwmp -F /etc/config/cwmp_global.conf
easycwmp: /lib/libc.so.6: version `GLIBC_2.15' not found (required by easycwmp)
easycwmp: /lib/libldap_r-2.4.so.2: no version information available (required by /usr/lib/libcurl.so.4)
easycwmp: /lib/libc.so.6: version `GLIBC_2.15' not found (required by /usr/lib/libcurl.so.4)
原因:glibc版本太低,升級即可。參考:http://blog.csdn.net/hnhuangyiyang/article/details/50392997
七. 移植到arm,mips等平臺
因為考慮大部分讀者無法實踐(沒有開發板),所以X86平臺的移植寫的比較詳細。參考上述步驟,應該很容易移植成功,至於其他平臺的移植,未來根據讀者的留言考慮是否再寫一篇跨平臺的移植。
如需交叉編譯,請提供交叉編譯工具鏈,我會把編譯後的cwmp core程式發給你。