测试环境
Debian 11.6.0
Dahdi-3.2.0
Asterisk-20
下载
从 OpenVox 官方网站上下载 DAHDI 源码包
https://www.openvox.cn/pub/drivers/dahdi-linux-complete/openvox_dahdi-linux-complete-current.tar.gz
从 Digium 网站上获取 Asterisk:
https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz
通常在目录 /usr/src/ 下运行如下指令,下载并解压 DAHDI、Asterisk和 Libpri:
#wget https://www.openvox.cn/pub/drivers/dahdi-linux-complete/openvox_dahdi-linux-complete-current.tar.gz
#wget https://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz
# tar -xvzf openvox_dahdi-linux-complete-current.tar.gz
# tar –xvzf asterisk-20-current.tar.gz
依赖包安装:
apt-get update
apt-get install build-essential
apt-get install git
apt-get install linux-headers-`uname -r`
安装dahdi
将路径转换到 dahdi-linux-complete-XX 源码包目录下 (XX 代表DAHDI 版本),运行如下指令安装 DAHDI:
# cd /usr/src/dahdi-linux-complete-XX
# make
# make install
# make config
安装asterisk
将路径转换到asterisk源码包目录下 (XX 代表asterisk 版本),运行如下指令安装asterisk:
# cd asterisk-20.xx
#contrib/scripts/install_prereq install
# ./configure
# make
# make install
# make samples
配置
加载驱动
编译通过后,请根据对应板卡型号运行下述指令加载驱动:
# modprobe dahdi
# modprobe wctdm opermode=CHINA(A400)
# modprobe opvxa24xx opermode=CHINA (A810,A1610,A2410)
# dahdi_genconf -vvv
"opermode"只适用于 FXO端口,也就是说对FXS不起作用。用户也可以用其它国家制式取 代 "CHINA",请查看文件 ../dahdi-linux-XX/linux/drivers/dahdi/fxo_modules.h,获得其它通信制式.
正常情况下,执行指令 "dahdi_genconf"后,系统 会自动生成 /etc/dahdi/system.conf 和 etc/asterisk/dahdi-channels.conf两个文件。检查生成的配置文件是否符合您的需求,您也可以手动修改相关参数。值得注意的是,确认dahdi-channels.conf 包含在chan_dahdi.conf 中,若没有,请运行指令:
# echo "#include dahdi-channels.conf" >>/etc/asterisk/chan_dahdi.conf
编辑/etc/modprobe.d/dahdi.conf 来实现开机自动加载opermode参数
添加对应板卡驱动到/etc/dahdi/modules 文件来实现开机自动加载板卡驱动
#cp /etc/dahdi/modules.sample /etc/dahdi/modules
#chmod 0777 /etc/dahdi/modules
#vi /etc/dahdi/modules
下面以A400板卡作为示例来配置
FXO 端口使用 fxsks 信令,而 FXS 端口则采用 fxoks 信令。
下面显示的是一部分基本通道配置文件 /etc/dahdi/system.conf:
修改国家制式 为了匹配国家通信制式,需要修改一些参数。例如,在中国,请修改 参数 loadzone 和 defaultzone,如下所示:
loadzone = cn
defaultzone = cn
用户可以在文件 .. /dahdi-XX/tools/zonedata.c 中查找国 家参数。另外,还有一个参数在 /etc/asterisk/indications.conf 中也需要修改:
country=cn
文件/etc/asterisk/dahdi-channels.conf 的一部分如图所示:
确认system.conf 和 dahdi-channels.conf 文件后执行如下命令:
# dahdi_cfg –vvvvvv
这条指令将从文件 system.conf 中读取并加载参数到硬件中。指令运行的一部分输出结果显示如下面所示。
启动 Asterisk
# asterisk -vvvvvgc
如果 Asterisk 已运行,则运行"asterisk –r"代替。在 CLI 界面中, 请运行:
如果通道显示全部正确,说明 DAHDI 已成功加载到 Asterisk 中,接下来请设置拨号方案。
编写拨号方案
请在 extensions.conf 文件中编写拨号方案。下图介绍了一个简单的呼入呼出方案:
# vim /etc/asterisk/extensions.conf
;本例中模拟卡1和2为fxs口连接模拟话机,3和4口是fxo口连接pstn线
;当有通话从pstn 线进来,连接dahdi/1 (板卡第一个端口) 的模拟话机响铃.
[from-pstn]
exten => s,1,Answer()
exten => s,n,Dial(dahdi/1,,r)
exten => s,n,Hangup()
;当模拟话机呼出时,会通过dahdi/3(板卡第三个端口)出去.
[from-internal]
exten => _X.,1,Dial(dahdi/3/outgoing_number)
exten => _X.,2,Hangup()
设置拨号方案后请运行"asterisk –r", 并在 CLI 界面中执行指令 "dialplan reload",接下来就可以拨号了.