自己移植Asterisk1.8到OpenWRT下

众所周知OpenWRT是目前最流行的嵌入式Linux之一。支持广泛的CPU包括:x86、MIPS、ARM、PPC等。

OpenWRT的trunk中所带的那个asterisk问题很多,缺少很多包,作者似乎仅仅是为了自己使用而移植的,
而目前网上除了不详细的官方资料外也无太多资料介绍怎么做这个包,我在分析摸索以后,自己编写了一个移植包。特别在这里说明下。

首先看看最需要的几个文件:
主目录  ./feeds/packages/net/myasterisk
编译配置 ./feeds/packages/net/myasterisk/Makefile
补丁文件 ./feeds/packages/net/myasterisk/patches/xxxx
其他文件  ./feeds/packages/net/files

编译时系统是先执行patches里的补丁进行打补丁,具体的补丁可以参考系统已有的那个asterisk18的目录下patches里的东西。

files都是自己执行的一些文件,比如复制启动文件什么的。

这里最主要的就是Makefile了。

openwrt下包的编译流程:
1. 进入包目录
2. 如果没有文件根据makefile下载asterisk
3. 打补丁
4. 根据Makefile设置进行配置和编译
5. 完成工作

相关目录:
编译过程的文件都保存在./build_dir/targetxxxxx/xxx目录下的ipk-install目录中。

这里我把我的makefile共享给大家看看吧:

#
# Copyright by Sun Bing<hoowa.sun@gmail.com>
#

include $(TOPDIR)/rules.mk

PKG_NAME:=freeiriswrt-ast18
PKG_VERSION:=1.8.10.1
PKG_RELEASE:=1

PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=http://downloads.asterisk.org/pub/telephony/asterisk/releases/
PKG_MD5SUM:=415738d347b9037cbe5f8bfbe66843de

PKG_BUILD_DIR=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)

#include $(INCLUDE_DIR)/ltqtapi.mk
include $(INCLUDE_DIR)/package.mk

define Package/freeiriswrt-ast18/Default
SUBMENU:=Telephony
SECTION:=net
CATEGORY:=Network
URL:=http://www.asterisk.org/
MAINTAINER:=Sun Bing<hoowa.sun@gmail.com>
endef

define Package/freeiriswrt-ast18/Default/description
FreeirisWRT Combined Asterisk 1.8.X
endef


define Package/freeiriswrt-ast18
$(call Package/freeiriswrt-ast18/Default)
TITLE:=FreeirisWRT Combined Asterisk1.8.X
DEPENDS:= +libsqlite3 +sqlite3-cli+libopenssl +libncurses +libpopt +libpthread +zlib@!TARGET_avr32
endef

define Package/freeiriswrt-ast18/description
$(call Package/freeiriswrt-ast18/Default/description)
endef

CONFIGURE_ARGS+= \
--without-curses \
--with-gsm=internal \
--without-cap \
--without-gtk \
--without-gtk2 \
--without-isdnnet \
--without-kde \
--without-misdn \
--without-nbs \
--with-ncurses="$(STAGING_DIR)/usr" \
--without-netsnmp \
--without-newt \
--without-odbc \
--without-ogg \
--without-osptk \
--with-popt="$(STAGING_DIR)/usr" \
--with-sqlite3="$(STAGING_DIR)/usr" \
--without-pri \
--without-qt \
--without-radius \
--without-sdl \
--without-suppserv \
--without-tds \
--without-termcap \
--without-tinfo \
--without-vorbis \
--without-vpb \
--with-z="$(STAGING_DIR)/usr" \
--with-sounds-cache="$(DL_DIR)" \
--without-dahdi \
--without-gnutls \
--without-iksemel \
--without-curl \
--without-mysqlclient \
--without-spandsp \
--without-bluetooth \
--without-srtp \
--disable-xmldoc

EXTRA_CFLAGS+= $(TARGET_CPPFLAGS)
EXTRA_LDFLAGS+= $(TARGET_LDFLAGS)

define Build/Prepare
$(call Build/Prepare/Default)
endef

define Build/Configure
$(call Build/Configure/Default,,$(SITE_VARS))
endef

define Build/Compile
$(MAKE) -C "$(PKG_BUILD_DIR)" \
include/asterisk/version.h \
include/asterisk/buildopts.h defaults.h \
makeopts.embed_rules
./set_menuselect $(PKG_BUILD_DIR)
ASTCFLAGS="$(EXTRA_CFLAGS) -DLOW_MEMORY" \
ASTLDFLAGS="$(EXTRA_LDFLAGS)" \
$(MAKE) -C "$(PKG_BUILD_DIR)" \
ASTVARLIBDIR="/usr/lib/asterisk" \
ASTDATADIR="/usr/lib/asterisk" \
ASTKEYDIR="/usr/lib/asterisk" \
ASTDBDIR="/usr/lib/asterisk" \
NOISY_BUILD="1" \
DEBUG="" \
OPTIMIZE="" \
DESTDIR="$(PKG_INSTALL_DIR)" \
all install
endef

define Build/InstallDev
$(INSTALL_DIR)$(1)/usr/include/asterisk-1.8/include/asterisk/
$(CP) $(PKG_INSTALL_DIR)/usr/include/asterisk/*.h$(1)/usr/include/asterisk-1.8/include/asterisk/
$(CP) $(PKG_INSTALL_DIR)/usr/include/asterisk.h$(1)/usr/include/asterisk-1.8/include/
endef

define Package/freeiriswrt-ast18/install

# $(INSTALL_DIR) $(1)/etc/asterisk

$(INSTALL_DIR) $(1)/usr/lib/asterisk/modules
$(CP) $(PKG_INSTALL_DIR)/usr/lib/asterisk/modules/*.so$(1)/usr/lib/asterisk/modules/

$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/asterisk$(1)/usr/sbin/

# $(INSTALL_DIR) $(1)/usr/lib/asterisk/sounds/

# $(INSTALL_DIR) $(1)/usr/lib/asterisk/moh/

# $(INSTALL_DIR) $(1)/etc/default
# $(INSTALL_DATA)  ./files/asterisk.default$(1)/etc/default/asterisk

# $(INSTALL_DIR) $(1)/etc/init.d
# $(INSTALL_BIN)  ./files/asterisk.init$(1)/etc/init.d/asterisk

endef

$(eval $(call BuildPackage,freeiriswrt-ast18))


包的调试方法:
如果你已经编写好配置文件。就先建立索引
./scripts/feeds update -i
./scripts/feeds install xxxxxxx
如果这个步骤报错,就去修改makefile移植到正确为止。
如果以上步骤正确。make menuconfig 选择你自己的那个包。
然后你就可以单独编译了:
make package/你的包名字/{clean,compile} V=99

编译完成后在bin/下能找到你那个软件包的名字。

最后顺便说下:其实嵌入式下asterisk还是很稳定的,也不像很多人说的那么多问题,主要是由于嵌入式环境的性能限制导致asterisk出现很多问题。早在06年我就知道openwrt项目存在,但是由于当时的嵌入式设备能力太低,不适合HostDSP(泛指利用高性能CPU的运算能力来替代昂贵的DSP处理器的技术)这种模式软件的运行。


本文作者:hoowa.sun是国人,他也是开源运动的推广者,同时也是全球唯一出自中国的开源通信平台Freeiris的作者,其本人是一个不折不扣的技术狂人,每年1/3的时间用来写代码,但是写代码的效率是别人的5倍以上,那么2/3的时间都用来看电视剧,打游戏了。。。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/434466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

延边大学c语言题库,延边大学-SPOC官方网站

课程大纲一、课程教学目的与任务本课程是理工科类的一门非常重要的计算机基础性课程&#xff0c;是学生学习程序设计语言和方法以及数据结构等课程的先导课程。是使学生了解有关程序设计的基本概念及常用术语&#xff0c;学习C 语言的基础知识、基本理论、基本概念和基本方法&a…

VC程序在没装VC的机器中运行

VC程序在没装VC的机器中运行(发表时间: 2008-6-26 16:01:00) 【评论】 【打印】 【字体&#xff1a;大 中 小】 本文链接&#xff1a;http://blog.pfan.cn/miaowei/36283.html复制链接 分享到&#xff1a;0标签:vs.net2005 vs.net2003 没装VC 没有VC 由于工作需要&#xff…

Asterisk PBX 快速安装向导

Asterisk PBX 可以简单的安装到大多数 Linux发行版本上&#xff0c;如 Debian, RedHat等&#xff0c;也可以定制到专用Linux版本运行&#xff0c;如Astlinux就是一个定制系统的例子。Asterisk PBX还可以运行于 Windows的cygwin境下(功能受到较大限制)&#xff0c;我们还曾经试…

STM32单片机读电压电流C语言,STM32单片机怎么检测0-24电压和电流

32的采集范围是0-3.3v你需0-24v电压衰减电路&#xff1a;电压跟随器高精度用运放&#xff0c;中精度用T型网络衰减电路&#xff0c;要求低用电阻分压的。电压缩小到0-3.3v范围内采集&#xff0c;然后用32通过一定比例再计算出实际电压扩展资料&#xff1a;单片机应用范围电路板…

报表中的Excel操作之Aspose.Cells(Excel模板)

本篇中将简单记录下Aspose.Cells这个强大的Excel操作组件。这个组件的强大之处&#xff0c;就不多说&#xff0c;对于我们的报表总是会有导出Excel的处理&#xff0c;如果你使用微软Excel的com组件&#xff0c;那么对于简单的操作还行&#xff0c;但是多余复杂的模板&#xff0…

Android usb 权限广播,[Android]USB开发

第一&#xff1a;请求权限和请求权限回调(通过广播回调)注册一个广播接收器用于接收USB权限被同意或拒绝后发出的广播//注册USB设备权限管理广播IntentFilter filter new IntentFilter(ACTION_USB_PERMISSION); //ACTION_USB_PERMISSION为自定义的字符串context.registerRecei…

在飞音G801上运行OpenWRT+Asterisk

上篇文章介绍了如何在华硕RT-N11建立小型的SIP Server&#xff0c;本篇文章介绍将Asterisk移植到更为强大的VOIP网关G801上。G801是北京飞音时代的无线VoIP网关产品&#xff0c;在韩国SKT等运营商中广泛采用。G801支持802.11n 2T2R的无线路由&#xff0c;1WAN 4LAN的以太网&am…

自定义系统菜单

procedure SysMenuCommand(var Msg:TWMMENUSELECT);message WM_SYSCOMMAND;procedure TFormMain.SysMenuCommand(var Msg: TWMMenuSelect); begincase Msg.IDItem of0:beginMessageBox(0,PChar(茶杯),操作提示,MB_OKMB_ICONINFORMATION);end;1:beginMessageBox(0,PChar(书本),操…

android rsa加密工具类,GitHub - Lerist/encrypt: Android 加密解密工具包。

Encrypt(加密工具)字符串&#xff0c;byte[]&#xff0c;文件等对象的加密和解密工具集合&#xff0c;包含了多种加密方案。加密类型摘要相关方法简单加密换一种编码格式Base64Util单向加密只能加密&#xff0c;不能解密MD5Util、SHAUtil对称加密使用相同的秘钥加密和解密AESUt…

开源应用架构之asterisk

作者&#xff1a;Russell Bryant 翻译&#xff1a;jiazhengfeng Asterisk[1]是一款GPLv2协议下的开源电话应用平台。简单来说&#xff0c;Asterisk是一个服务器应用&#xff0c;能够完成发起电话呼叫、接受电话呼叫、对电话呼叫进行定制处理。 Asterisk这个项目是由Mark Spen…

垃圾回收

大部分内容来自于&#xff1a; http://en.wikipedia.org/wiki/Garbage_collection_(computer_science) 垃圾回收&#xff08;garbage collection&#xff09;机制的基本原则是&#xff1a; 1. 找出程序中不会再被访问到的对象。 2. 回收这部分对象占用的资源&#xff08;内存&a…

android 5.1 壁纸路径,RTFSC – Android5.1 壁纸设置流程简析 – RustFisher

Android5.1 壁纸设置流程浅析Ubuntu14.04 Android5.1 Source Insight3这里只是简单分析一下5.1里是如何设置壁纸的&#xff1b;这个流程和4.4有一些不同。但基本都是找个地方存放壁纸文件&#xff0c;需要的时候读取&#xff0c;设置的时候更新这里只看设置的过程。权当参考。…

如何在asterisk中限制呼叫路数?

在asterisk中&#xff0c;对于呼叫个数是可以通过call-limit进行限制的。限制办法是通过修改asterisk.conf中maxcalls参数&#xff0c;设置允许的最大呼叫数。这里的最大呼叫数是包括所有的呼叫数&#xff0c;出境、入境、分机间等呼叫。 为了分别限制出境/入境/分机间呼叫&…

总结DevExpress10个使用技巧

DevExpress是非常主流的.NET控件&#xff0c;目前全世界和中国都用很多用户使用&#xff0c;不过由于是英文版&#xff0c;初次接触的同学可能会觉得困难&#xff0c;这里就总结DevExpress常见的10个使用技巧。1.TextEditor(barEditItem)取文本 string editValue barEditItem1…

linux组成,Linux学习笔记之Linux组成及初识

1、常见的CPU架构&#xff1a;X86X64M68000ARMUltrasparcPower2、CPU的指令集精简指令集----Power复杂指令集----Intel3、使用汇编语言编写的Operation System 是很难移植在其他系统上系统是支持交叉编译的&#xff0c;但是需告知编译器编译的目标硬件规格是什么编译完成后的系…

WCF系列(1)—— CustomBehavior 入门

由于最近工作一直在做wcf平台上的开发&#xff0c;所以决定先结合自己平时工作中的经验实践写一个WCF的系列&#xff0c;希望能对大家有所帮助。 首先&#xff0c;说到WCF&#xff0c;就不得不提Endpoint这个概念&#xff0c;而Endpoint则由ABC组成&#xff0c;Adress,Binding和…

Asterisk 可加载模块

app_adsiprog.so > (Asterisk ADSI Programming Application) ——用于支持模拟显示服务接口的终端设备&#xff0c;在终端屏幕上操作菜单等。 app_amd.so > (Answering Machine Detection Application) ——用于外呼时终端应答状态检测 app_authenticate.so > (Aut…

android电梯程序设计,课内资源 - 基于Android实现的电梯调度模拟

一、使用说明1.1 项目简介某一楼有20层&#xff0c;操作者可以通过使用5部电梯从起始楼层来到达指定的楼层。本项目通过实现电梯调度&#xff0c;来模拟实现操作系统的调度过程&#xff0c;并且学习Android环境下使用Java的多线程编程方法以及调度算法。1.2 项目要求操作者可以…

默认构造函数的作用(“A”方法没有采用“0”个参数的重载

构造函数主要用来初始化对象。它又分为静态(static)和实例(instance)构造函数两种类别。大家应该都了解如何来写类的构造函数&#xff0c;这里只说下默认构造函数的作用&#xff0c;以及在类中保留默认构造函数的重要性。实际上&#xff0c;我说错了。正确的说法是&#xff1a;…

SourceInsight 设置点滴

SourceInsight是个强大的代码阅读工具&#xff0c; 价格不菲&#xff0c; 目前除了SlickEdit几乎没有可以与之抗衡的&#xff0c; 可能感觉没什么竞争对手的缘故&#xff0c;SI很少更新。SI的设置选项比较多&#xff0c; 这里说几个比较隐蔽的设置&#xff1a; 1. 改变SI的一些…