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文件拷貝過去即可。
總結
以上是生活随笔為你收集整理的asterisk for mipsel的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国足球成“段子” 抖音曲线救球
- 下一篇: 美FDA警告一新冠疫苗存患心脏病高风险: