asterisk for mipsel

任务:将asterisk1.8.24.0移植到rt5350上面

交叉工具链:mipsel-linux(3.4.2)

1. 配置asterisk,执行./configure --host=mipsel-linux

    找不到termcap和libxml2,分别对他们交叉编译,然后将生成的库拷贝到交叉工具链的lib目录下即可。

 再执行./configure --host=mipsel-linux,发现还是找不到libxml2。根据提示可以将其关闭。

 执行./configure --host=mipsel-linux --disable-xmldoc

2. 编译asterisk, 执行make,编译报错,报错信息望记了,实际就是少了SDL库,交叉编译后,将库文件和

 头文件都拷贝到交叉工具链的include和lib目录下。再编译即可。

3. 成功编译后,并没有生成chan_sip.so(最重要的文件)。

 修改menuselect.makeopts文件,将chan_sip去掉。即可编译。

    在编译channels/sip/reqresp_parser.c时报错

 LC_CTYPE_MASK undeclared

 解决办法,修改include/asterisk/autoconfig.h文件,去掉#define HAVE_XLOCALE_H 1这行。

 这样就可以生成出chan_sip.so了。

 实际这个问题比较奇怪,在configure的时候,可以看到这两句,

 checking for locale_t in locale.h... no
 checking for locale_t in xlocale.h... no

 理论上说,HAVE_XLOCALE_H这个宏不应该被定义。

4. 因为rt5350上面只有一个4MB大小的norflash,所以只能将其放到外部存储上来运行。

 所以重新配置asterisk,./configure --host=mipsel-linux --disable-xmldoc --prefix=/media/sda1

 make && make install。

 注意:先在上午机上面创建/media/sda1这个目录,这样在make install 后,就可以直接在/media/sda1目录

 下得到编译好的asterisk了。

5. 将编译好的asterisk拷贝到外部存储上运行,发现不正常,但又看不到错误信息,

 修改main/asterisk.c ,将daemon(1, 0)的第二个参数改为1,再编译,然后只把asterisk这个可执行文件拷贝过 去即可。

6. 再次运行后,看到报错信息,在源码里搜索报错信息后,发现是main/asterisk.c的这一行报的错

 res = bind(ast_socket, (struct sockaddr *)&sunaddr, sizeof(sunaddr));

 实际就在绑定unix域协议socket的时候报的错,再使用unix域协议的时候,实际是绑定了一个本地的socket

   类型的文件,经过自己编写测试程序,发现是没法在外部存储上创建这个socket文件。(应该是外部存储是

   FAT32文件系统的缘故,估计格式化为ext3就行了。)那么我们可以将其指  定到norflash上即可。

7. 经过查看源码,发现这个socket文件的路径是在configure的时候生成在defaults.h这个头文件里的,修改这个头文件,将#define DEFAULT_SOCKET改为norflash的位置即可。再次编译,将编译出来的asterisk文件拷贝过去即可。




 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值