asterisk for mipsel
任務(wù):將asterisk1.8.24.0移植到rt5350上面
交叉工具鏈:mipsel-linux(3.4.2)
1. 配置asterisk,執(zhí)行./configure --host=mipsel-linux
??? 找不到termcap和libxml2,分別對他們交叉編譯,然后將生成的庫拷貝到交叉工具鏈的lib目錄下即可。
再執(zhí)行./configure --host=mipsel-linux,發(fā)現(xiàn)還是找不到libxml2。根據(jù)提示可以將其關(guān)閉。
執(zhí)行./configure --host=mipsel-linux --disable-xmldoc
2. 編譯asterisk, 執(zhí)行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這個宏不應(yīng)該被定義。
4. 因為rt5350上面只有一個4MB大小的norflash,所以只能將其放到外部存儲上來運行。
所以重新配置asterisk,./configure --host=mipsel-linux --disable-xmldoc --prefix=/media/sda1
make && make install。
注意:先在上午機上面創(chuàng)建/media/sda1這個目錄,這樣在make install 后,就可以直接在/media/sda1目錄
下得到編譯好的asterisk了。
5. 將編譯好的asterisk拷貝到外部存儲上運行,發(fā)現(xiàn)不正常,但又看不到錯誤信息,
修改main/asterisk.c ,將daemon(1, 0)的第二個參數(shù)改為1,再編譯,然后只把asterisk這個可執(zhí)行文件拷貝過 去即可。
6. 再次運行后,看到報錯信息,在源碼里搜索報錯信息后,發(fā)現(xiàn)是main/asterisk.c的這一行報的錯
res = bind(ast_socket, (struct sockaddr *)&sunaddr, sizeof(sunaddr));
實際就在綁定unix域協(xié)議socket的時候報的錯,再使用unix域協(xié)議的時候,實際是綁定了一個本地的socket
?? 類型的文件,經(jīng)過自己編寫測試程序,發(fā)現(xiàn)是沒法在外部存儲上創(chuàng)建這個socket文件。(應(yīng)該是外部存儲是
?? FAT32文件系統(tǒng)的緣故,估計格式化為ext3就行了。)那么我們可以將其指? 定到norflash上即可。
7. 經(jīng)過查看源碼,發(fā)現(xiàn)這個socket文件的路徑是在configure的時候生成在defaults.h這個頭文件里的,修改這個頭文件,將#define DEFAULT_SOCKET改為norflash的位置即可。再次編譯,將編譯出來的asterisk文件拷貝過去即可。
總結(jié)
以上是生活随笔為你收集整理的asterisk for mipsel的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国足球成“段子” 抖音曲线救球
- 下一篇: Asterisk拨号方案语法基础