主题 : 移植wvdial到arm-linux 复制链接 | 浏览器收藏 | 打印
级别: 圣骑士
UID: 44407
精华: 0
发帖: 386
金钱: 1945 两
威望: 389 点
综合积分: 772 分
注册时间: 2011-04-25
最后登录: 2014-08-25
楼主  发表于: 2012-03-16 18:28

 移植wvdial到arm-linux

移植wvdial



wvdial是linux下的智能化撥號工具,利用wvdial和ppp可以實現linux下的輕鬆上網。在整個過程中wvdial的作用是撥號並等待提示,並根據提示輸入相應的用戶名和密碼等認證信息;ppp的作用是與撥入方協商傳輸數據的方法並維持該連接。

wvdial及其相關配置
wvdial的功能很強大,會試探著去猜測如何撥號及登錄到服務器,同時它還會對常見的錯誤智能的進行處理,不像chat一樣,要求你去寫登錄腳本。wvdial只有一個配置文件 /etc/wvdial.conf。wvdial的啟動過程是這樣的:首先載入wvdial.conf配置文件,然後再初始化modem並撥號,撥號後等待撥入方的響應,收到撥入方響應後則啟動pppd。

可以用wvdialconf程序自動生成wvdial.conf配置文件,自行該程序的格式為:
wvdialconf /etc/wvdial.conf
在執行該程序的過程中,程序會自動檢測你的modem的相關配置,包括可用的設備文件名,modem的波特率,初始化字符等等相關的撥號信息,並根據這些信息自動生成wvdial.conf配置文件。如果/etc/wvdial.conf文件已經存在時,再次執行該命令只會改變其中的 Modem、Band、Init等選項。一個典型的自動生成的配置文件可能是這樣的:

[Dialer Defaults]

Modem = /dev/ttyS1
Baud = 115200

Init1 = ATZ

Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 S11=55 +FCLASS=0

;Phone =

;Username =

;Password =

wvdial的執行格式為:
wvdial --help | --version | section
相關的說明如下:
--help:顯示簡單的幫助信息
--version:顯示wvdial的版本號
section:這裡的section有點像windows裡的ini文件,一個wvdial.conf配置文件可以有好多個section,每一個section由一些變量組成,即由 變量=值 的語句組成,如上所示。使用wvdialconf自動生成配置文件時將會自動生成一些常用的變量說明如下:

Inherits=InheritedSection:
使用wvdialconf自動生成配置文件時將會自動生成[Dialer Defaults],除此之外,你還 可以自定義你自己的section。程序運行時,首先載入[Dialer Defaults],然後再用指 定的section的相應選項覆蓋[Dialer Defaults]的相應選項。比如,我們在 wvdial.conf中還有[Dialer Tom],假如我們運行wvdail Tom,則系統將先讀入[Dialer Defaults],然後再用[Dialer Tom]覆蓋[Dialer Defaults]的相應選項。如果除了以上 的section之外還有[Dialer 169]並且內容如下:
[Dialer Tom]
Username=tom
Password=xxx
Inherits=169
[Dialer 169]
Phone=169
如果這時候我們執行wvdial Tom則系統將先讀入[Dialer Defaults],然後再用[Dialer Tom]覆蓋[Dialer Defaults]的相應選項,最後再用[Dialer 169]的相應選項來覆蓋前二者的相應選項。由此可見,利用wvdial,我們可以很方便地在不同的ISP或modem之間來回移動(假如你有幾個ISP或medom的話)。

Medom=/dev/ttySx:用於指定是用的medom,缺省的為/dev/medom。當然,在這裡我們的medom是由wvdialconf自動檢測並配置的,所以我們可以忽略該變量。

Band=57600:wvdial與modem通信的波特率,同上可以忽略。

Area Code=xxxx : 設置區號

Dial Prefix=x: 假如你正在使用分機,撥外線需撥9時,可設該值為9。

Username=xxxx:登錄時的用戶名

Passwd=xxxxxx:登錄密碼

Phone=xxxxx: 所撥的號碼

PPPP Path=:設置pppd所在的路徑,缺省為/usr/sbin/pppd

Force Address=x.x.x.x :設置靜態ip,一般的isp都會為你分配動態的ip地址。

New PPPD= 1 or 0: pppd 2.3.0及其以上版本需要/etc/ppp/peers/wvdial文件,如果你的pppd是2.3.0以上版本請設為1.

Auto Reconnect=on :斷線時是否自動重新連接,缺省設為是。

以上只是wvdial.conf中的常用選項,具體情參考wvdial手冊。


一、開發環境

編譯系統:Linux12/kernel 2.6.32.24
開發板:Mini6410(nand 1024M,SDRAM 64M)
交叉編譯工具:arm-linux-gcc-4.5.1


因wvdial工具依賴於 wvstreams函式庫,而此庫又依賴於openssl和zlib函式庫

1.zlib-1.2.5.tar.bz2
2.openssl-0.9.8n.tar.gz, openssl-0.9.8n-fix_manpages-1.patch
3.wvstreams-4.6.1.tar.gz
4.wvdial-1.61.tar.gz


二、移植wvdial

1.移植準備
  a. zlib-1.2.5.tar.bz2
  b.openssl-0.9.8n.tar.gz, openssl-0.9.8n-fix_manpages-1.patch
  c.wvstreams-4.6.1.tar.gz
  d.wvdial-1.61.tar.gz

2.編譯zlib
      #./configure –prefix=$PWD/../_install --static
      #  make CC=arm-linux-gcc
      #  make CC=arm-linux-gcc install
3. 編譯openssl
      # patch -Np1 -i ../openssl-0.9.8n-fix_manpages-1.patch
      # ./Configure --prefix=$PWD/../_install os/compiler:arm-linux-gcc
      #  make CC=arm-linux-gcc
      #  make CC=arm-linux-gcc install
4.編譯wvstreams
      #  修改./configure中的”with_zlib”及”with_openssl”
           with_zlib=no改成with_zlib=yes
           with_openssl =no改成with_openssl =yes
      如果不先配置./configure,否則會有錯誤(問題可見config.log)
      # ./configure --prefix=$PWD/../_install --host=arm-linux \
        CPPFLAGS=-I$PWD/../_install/include LDFLAGS=-L$PWD/../_install/lib \
        CFLAGS=-I$PWD/../_install/include --with-zlib=$PWD/../zlib-1.2.5 \
        --with-openssl=$PWD/../openssl-0.9.8n \
        --without-dbus --with-pam=no --with-tcl=no --with-qt=no --without-valgrind
      #  make CC=arm-linux-gcc
      #  make CC=arm-linux-gcc install
      產生所需:
      libwvbase.so
      libwvstreams.so
      libwvutils.so
5.編譯wvdial
      # ./configure(產生Makefile)      
      # 編輯Makefile

      prefix=/usr/local→prefix=${PWD}/../_install
      PPPDIR=/etc/ppp/peers→PPPDIR=${prefix}/etc/ppp/peers
      PC_CFLAGS=$(shell pkg-config --cflags libwvstreams)→PC_CFLAGS=-I${PWD}/../_install/include/wvstreams
      PC_LIBS=$(shell pkg-config --libs libwvstreams)→PC_LIBS=-L${PWD}/../_install/lib -lwvstreams -lwvutils -lwvbase -lz
      
      # 編輯wvrules.mk
            WVLINK_CC = gcc (如果沒有此句則直接添加)
            改為
            WVLINK_CC = arm-linux-g++
            CC = arm-linux-g++
            CXX = arm-linux-g++

      #  make CC=arm-linux-gcc
      #  make CC=arm-linux-gcc install

[ 此帖被kazaya在2012-03-20 11:48重新编辑 ]
级别: 新手上路
UID: 84608
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
综合积分: 2 分
注册时间: 2012-12-24
最后登录: 2013-01-15
1楼  发表于: 2012-12-24 14:02
。。。。帅哥 请教一下,我在zlib移植的时候出现问题了  环境 unbuntu  工具链 4.5.1
当./configure使用了--static参数:
make CC=arm-linux-gcc 没有问题,make install出现:cp libz.a /home/_install/lib
cp  /home/_install/lib
cp: missing destination file operand after `/home/_install/lib'
Try `cp --help' for more information.
make: *** [install-libs] Error 1
当./configure不使用 --static参数 出现如下问题:
make CC=arm-linux-gcc
gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map -O3 -fPIC -D_LARGEFILE64_SOURCE=1 -o libz.so.1.2.5 adler32.lo compress.lo crc32.lo deflate.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo uncompr.lo zutil.lo  -lc -L. libz.a
/usr/bin/ld: adler32.lo: Relocations in generic ELF (EM: 40)
adler32.lo: could not read symbols: File in wrong format
collect2: ld returned 1 exit status
make: *** [libz.so.1.2.5] Error 1