添加pppoe server on openwrt

主要思路:

  1. 了解openwrt的目录框架结构,往其中添加所需软件功能xxx模块
  2. 编写package/xxx/目录下的Makefile
  3. 生成package/xxx/src/目录下Makefile(与GNU Make语法相同)
  4. 编译生成img文件,烧写到路由器,配置pppoe-server-options

openwrt目录框架

openwrt目录

图中第一行为原始目录,第二行为编译后多生成的目录
tools:存放一些Makefile。编译固件时需要工具,这些Makefile则定义如何获得这些工具的源码包以及如何编译/安装这些命令工具
toolchain:包含一些Makefile,这些Makefile定义了如何获得kernel headers、C library、bin-utils、compiler、debugger以及如何编译它们。这些源码用来制作交叉编译工具,如果需要定义一个新的系统架构,需要在这里添加一些配置
include:包含一些公用的Makefile,会被其他Makefile所包含
scripts:存放一些用于openwrt软件包管理的perl脚本
target:各个硬件平台在这里定义了编译固件、内核的步骤和方法
package:包含针对各个软件包的Makefile以及补丁,这些Makefile定义了如何获得和编译安装它们

bin:存放编译完成后生成的firmware及ipk软件包
build_dir:所有软件包都解压到该目录,并在该目录下编译
staging_dir:最终安装的目录,tool、cross-compilation-toolchain、rootfs都在这里
dl:存放从网上下的用户空间软件包的源代码
feeds:openwrt环境所需要的软件包套件

以r7800-beta2-buildroot.git中的led-control模块为例学习
r7800-beta2-buildroot.git/package/led-control/Makefile:
include $(TOPDIR)/rules.mk

PKG_NAME :=led-control
PKG_RELEASE :=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)

include $(INCLUDE_DIR)/package.mk

define Package/led-control
SECTION :=utils
CATEGORY :=Base system
DEFAULT :=y
TITLE :=Update utility for LED control
endef

define Build/Prepare mkdir -p $(PKG_BUILD_DIR) $(CP) ./src/* $(PKG_BUILD_DIR)
endef

define Package/led-control/install install -d -m0755 $(1)/sbin install -m0755 $(PKG_BUILD_DIR)/ledcontrol $(1)/sbin/ endef

$(eval $(call BuildPackage,led-control))

这个Makefile主要分为几个部分:
1. 首先需要包含几个文件,它们定义了一些变量、规则、函数
include $(TOPDIR)/rules.mk
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/kernel.mk定义内核模块时才需要
include $(INCLUDE_DIR)/cmake.mk使用cmake构建软件时用

2. 一个典型的openwrt软件包目录下没有源码目录,构建openwrt的第一步是从指定的URL下载指定的源码软件包,定义如下
PKG_SOURCE := XXXX.tar.gz
PKG_SOURCE_URL :=http://www.example.com/
PKG_MD5SUM :=e06......askdfjkx
这三行的意思是从http://www.example.com/XXXX.tar.gz下载源码包,一般存放在dl文件夹里,然后解压到<xxx>/build_dir/target-xxx/$(PKG_BUILD_DIR)

PKG_*定义了和软件包相关的一些信息:
PKG_NAME ——软件包名称
PKG_VERSION ——下载或自编的软件包的版本(必须有
PKG_RELEASE ——当前编译版本
PKG_BUILD_DIR ——在哪个目录下编译该软件包,默认为$(BUILD_DIR)/$(PKG_NAME)-$(PKG-VERSION)
PKG_SOURCE ——要从网上下载源码包的文件名
PKG_SOURCE_URL ——下载路径
PKG_MD5SUM ——验证下载源码包的完整性
PKG_CAT ——怎样解压源码包
PKG_BUILD_DEPENDS ——定义需要在该软件包之前编译的软件包或者一些版本的依赖

3. package/xxx描述软件包在menuconfig和ipkg中的条目(其中xxx即出现在menuconfig中的标签以及.config中的CONFIG_PACKAGE_xxx=y)

package/xxx

4. kernelpackage/xxx

kernelpackage/xxx

5. Build/Prepare 定义一组指令,比如用于给源码打补丁,创建编译目录,拷贝自己的源码到编译目录等

6. Package/xxx/install 定义如何安装软件包,定义一组命令,用来在嵌入式文件系统中创建目录或者拷贝相关文件到嵌入式文件系统或ipk

package/xxx/install

7. Package/xxx/preinst定义预先执行的脚本

Package/xxx/preinst

8. call eval函数调用
$(eval $(call BuildPackage,xxx))
或者
$(eval $(call KernelPackage,xxx))
前者用于应用程序,后者用于内核模块
这个(call BuildPackage,xxx)里面大有文章,值得深究

遇到的问题

从网上下载rp-pppoe源码包,网址:
rp-pppoe源码
https://github.com/cmtsij/OpenWrt_AttitudeAdjustment_Packages/tree/master/net/rp-pppoe
rp-pppoe-3.10源码包
http://download.csdn.net/detail/gududesiling/3468420

在编译rp-pppoe的时候,系统提醒需要ppp(主要是需要pppd)的支持,因此下载ppp源码包进行编译安装
ppp源码:https://github.com/openwrt/openwrt/tree/master/package/network/services/ppp
ppp-2.4.7源码包
http://linux.softpedia.com/get/Communications/Telephony/ppp-14015.shtml

编译ppp时遇到的问题
问题:

  1. cannot stat xxx/build_dir/linux-ipq806x/linux-3.4.103/include/linux/compiler.h (还有atm*.h)
  2. Strip:Unable to recognise the format of the imput file xxx/sbin/chat

解决方法:

  1. 网上下载linux-3.4.113.tar.xz的源码包,将其include/linux/compiler.h以及include/linux/atm*.h拷贝到openwrt包的xxx/build_dir/linux-ipq806x/linux-3.4.103/include/linux/下即可
  2. 网上找了两种解决方案
    (1)修改PATH环境变量,使得gcc和strip命令路径一致
    (2)修改config.mk文件中INSTALLSTRIP=-s,删除“-s”参数
    这里,两种方法都无效。不过参照方法(2),修改package/ppp/路径下的各层Makefile.linux中的install命令,将install -s -c ...中的-s参数去除即可,也即安装过程中不用strip命令

编译rp-pppoe时遇到的问题

  1. 如何编写package/rp-pppoe/路径下的Makefile,使得其在src文件夹下利用configure文件自动生成Makefile。

解决方法:
Makefile中添加:
define Build/configure
$(call Build/Configure/Default)
endef
其过程中,可能会遇到问题
$error: no defaults for cross-compiling
这是由于rp-pppoe/src/下的configure文件中有这么一句话
if test "$cross_compiling"=yes,then: $ECHO "no defaults for cross-compiling"; exit 0;
将其中的exit 0删除即可

  1. 安装rp-pppoe套件时,报错
    cannot overwrite non-directory ... /etc/ppp
    这是因为原油的openwrt中/etc/ppp是一个快捷方式,因此在安装rp-pppoe时,其Makefile定义软件和配置文件安装路径为/etc/ppp,不可写入。因此重新建立一个文件夹/etc/pppa,将pppoe-server的配置文件安装到此目录,然后到开发板上再移动到ppp文件夹里面去

  2. 将生成的固件刷入路由器Netgear/R7800,但是拨号时候没有什么效果
    通过抓包分析知道,是路由器向PC端发送了一个PADT终止包。
    修改package/rp-pppoe/src/pppoe-server.c
    其中,它在处理childHandler的函数中,有一段话
    if(!(session->flags & FLAG_SENT_PADT))
    {if(sesssion->flages&FLAG_RECVD-PADT
    sendPATD();
    }
    else{
    sendPADT();
    }
    xxxxxxx
    }
    将其中的else语段注释掉就行

  3. 最后拨号时,还是连不上,是pppoe-server运行还需要pppoe软件的支持,在package/rp-pppoe/Makefile中添加pppoe软件包的安装即拨号成功

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容