在Sigma8634上实现pppoe(移植rp-pppoe)

rp-pppoe是linux下最常用的拨号工具,rp-pppoe包含了一个基本程序pppoe和一系列的脚本(pppoe-start、pppoe-stop、pppoe-connect、pppoe-setup、pppoe-status等,在fedora中这些脚本的前缀都是adsl-)。脚本无所谓移植,最关键的程序是pppoe。

1. 编译基本程序pppoe

首先下载解压rp-pppoe-3.8.tar.gz
# tar xzvf rp-pppoe-3.8.tar.gz
# cd rp-pppoe-3.8


pppoe这个程序是在src下编译得到。
# cd src/
# ./configure --host=mipsel-linux
# make


会出现一个无法判断某struct size的编译错误,涉及net/if.h头文件。
所以,来修改一下这个文件,此文件在交叉编译器默认的include/net目录下。
# vi /../..toolchain../include/net/if.h

在第25行,添加以下内容:
#define __USE_MISC

理论上来说在编译参数中加入-D__USE_MISC=1也可以实现这个效果,但不知为何在这里这样做无法移除这个编译错误。所以只能修改if.h这个文件。

继续make,会蹦出很多inline(某些头文件中包含的)引起的错误,因为ansi c不认inline,而默认的编译参数包含了-ansi,所以遇到了inline就过不去。
# vi Makefile

把这一行
#CFLAGS= -g -O2 -Wall -Wstrict-prototypes -ansi $(LIC_INCDIR) $(DEFINES) $(LIC_DEFINE) $(PATHS) -Ilibevent
中的-ansi去掉:
CFLAGS= -g -O2 -Wall -Wstrict-prototypes $(LIC_INCDIR) $(DEFINES) $(LIC_DEFINE) $(PATHS) -Ilibevent

然后make,就万事大吉了。
编译完成后,src目录下会产生pppoe,pppoe-server,pppoe-sniff,pppoe-relay。把这些程序下载到目标机备用。

2. 复制配置文件

rp-pppoe-3.8/configs目录下是rp-pppoe所需的配置文件,把这些文件全部复制到目标机的/etc/ppp目录下,如果目标机/etc目录是只读的,那么可以在/etc目录建立一个指向可读写目录的链接。
# ln -sf /mnt/data/etc/ppp /etc/ppp

3. 修改脚本

脚本程序共有6个,在rp-pppoe-3.8/scripts中。
pppoe-setup:配置程序,把输入的帐号密码等信息存入配置文件。
pppoe-start:拨号程序,连接网络。
pppoe-stop:断开。
pppoe-status:查看连接状态。
pppoe-connect:连接网络,被pppoe-start所调用。
pppoe-init:初始化,被其他程序调用。

脚本程序的名字可以按自己的需要修改,我把前缀统一改成了adsl-,和fedora保持一致。主要是为了和编译出的那些二进制程序pppoe*等相区别。对脚本程序的主要的修改是调整程序里指向程序pppd、程序pppoe、配置文件pppoe.conf、dns配置文件resolv.conf等的路径。

例如对pppoe-setup的修改:

--------省略头---------

prefix=/mnt/usr
exec_prefix=${prefix}

# Paths to programs
IFCONFIG=/sbin/ifconfig
PPPD=/mnt/usr/sbin/pppd
PPPOE=${exec_prefix}/sbin/pppoe
ECHO=/bin/echo
LOGGER="/usr/bin/logger -t `basename $0`"

CONFIG=/mnt/data/etc/ppp/pppoe.conf

--------省略中---------

if [ "$DNS1" != "" ] ; then
    if [ "$DNS1" != "server" ] ; then
    $ECHO "Adjusting /mnt/data/etc/resolv.conf"
    if [ -r /mnt/data/etc/resolv.conf ] ; then
        grep -s "MADE-BY-RP-PPPOE" /mnt/data/etc/resolv.conf > /dev/null 2>&1
        if [ "$?" != 0 ] ; then
        $ECHO " (But first backing it up to /mnt/data/etc/resolv.conf-bak)"
        copy /mnt/data/etc/resolv.conf /mnt/data/etc/resolv.conf-bak
        fi
    fi
    $ECHO "# MADE-BY-RP-PPPOE" > /mnt/data/etc/resolv.conf
    $ECHO "nameserver $DNS1" >> /mnt/data/etc/resolv.conf
    if [ "$DNS2" != "" ] ; then
        $ECHO "nameserver $DNS2" >> /mnt/data/etc/resolv.conf
    fi
    fi
fi

$ECHO "Adjusting /mnt/data/etc/ppp/pap-secrets and /mnt/data/etc/ppp/chap-secrets"
if [ -r /mnt/data/etc/ppp/pap-secrets ] ; then
    $ECHO " (But first backing it up to /mnt/data/etc/ppp/pap-secrets-bak)"
    copy /mnt/data/etc/ppp/pap-secrets /mnt/data/etc/ppp/pap-secrets-bak
else
    cp /dev/null /mnt/data/etc/ppp/pap-secrets-bak
fi
if [ -r /mnt/data/etc/ppp/chap-secrets ] ; then
    $ECHO " (But first backing it up to /mnt/data/etc/ppp/chap-secrets-bak)"
    copy /mnt/data/etc/ppp/chap-secrets /mnt/data/etc/ppp/chap-secrets-bak
else
    cp /dev/null /mnt/data/etc/ppp/chap-secrets-bak
fi

egrep -v "^$U|^/"$U/"" /mnt/data/etc/ppp/pap-secrets-bak > /mnt/data/etc/ppp/pap-secrets
$ECHO "/"$U/"    *    /"$PWD1/"" >> /mnt/data/etc/ppp/pap-secrets
egrep -v "^$U|^/"$U/"" /mnt/data/etc/ppp/chap-secrets-bak > /mnt/data/etc/ppp/chap-secrets
$ECHO "/"$U/"    *    /"$PWD1/"" >> /mnt/data/etc/ppp/chap-secrets

--------省略尾---------


其他程序修改方式相同。

最后,再确认下kernel是否包含了对pppoe的支持,需要载入的module包括:
# modprobe slhc
# modprobe ppp-generic
# modprobe ppp-async
# modprobe ppp-synctty


一切就绪后,就可以先用pppoe-setup来配置,把你的adsl帐号密码输入。
然后运行pppoe-start,等待“Connnected!”消息吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值