日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

arm for asterisk1.8

發布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 arm for asterisk1.8 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

./configure --host=arm-linux后報錯,找不到termcap,于是下載了termcap-1.3.1進行交叉編譯。

再次./configure --host=arm-linux后依然報錯,找不到libxml2,于是下載了libxml2-2.7.2進行交叉編譯。

再次./configure --host=arm-linux后成功通過。


然后,make報錯,unknow value ' ' found in build_tools/menuselect-deps for NATIVE_ARCH

打算交叉編譯一下ncurses試試。

交叉編譯ncurses后,依然報錯。

因為是menuselect報的錯,那么就將menuselect交叉編譯,menuselect在交叉編譯時,報錯,找不到libmxml.a,

然后發現menuselect下有mxml目錄,那么就再把mxml交叉編譯,編譯雖然報錯,但可以生成libmxml.a,再去

編譯menuselect,這時報 找不倒gtk-xll-2.0,網上查了查,交叉編譯gtk比較復雜,打算換個思路,看看能不能不用

menuselect



2014年3月5日,昨天,asterisk1.8非常神奇的用arm的天嵌210的交叉工具鏈編譯過去了,現在把他放到一個AM3352的板子上去跑,運行asterisk的腳本執行直接報錯退出了,發現是lsb的問題,asterisk是一個后臺守護進程的方式運行的,而且是按照lsb的規范的,我的板子上沒有這個東西。不過沒關系,不用管他,直接運行asterisk的主程序也可以。運行asterisk主程序后,什么輸出都沒有,用ps aux | grep 'asterisk'也沒有發現其在后天運行,一定是崩潰退出了。將asterisk主程序的代碼都屏蔽掉后(main/asterisk.c),只打印一個輸出,還是不行。查看asterisk的make輸出,看到這一句。

gcc? -o asterisk -Wl,--export-dynamic -Wl,--version-script,asterisk.exports -Wl,--dynamic-list,asterisk.dynamics???? abstract_jb.o acl.o adsi.o alaw.o aoc.o app.o ast_expr2.o ast_expr2f.o asterisk.o astfd.o astmm.o astobj2.o audiohook.o autochan.o autoservice.o bridging.o callerid.o ccss.o cdr.o cel.o channel.o chanvars.o cli.o config.o data.o datastore.o db.o devicestate.o dial.o dns.o dnsmgr.o dsp.o enum.o event.o features.o file.o fixedjitterbuf.o frame.o framehook.o fskmodem.o global_datastores.o hashtab.o heap.o http.o image.o indications.o io.o jitterbuf.o loader.o lock.o logger.o manager.o md5.o netsock.o netsock2.o pbx.o plc.o poll.o privacy.o rtp_engine.o say.o sched.o security_events.o sha1.o slinfactory.o srv.o ssl.o stdtime/localtime.o strcompat.o strings.o stun.o syslog.o taskprocessor.o tcptls.o tdd.o term.o test.o threadstorage.o timing.o translate.o udptl.o ulaw.o utils.o version.o xml.o xmldoc.o editline/libedit.a db1-ast/libdb1.a? buildinfo.o -lssl -lcrypto -lc? -lxml2? -ldl -lpthread -ltermcap? -lm -lresolv?


最后面這幾句:-lssl -lcrypto -lc? -lxml2? -ldl -lpthread -ltermcap? -lm -lresolv

是asterisk需要依賴的庫,其中只有termcap和xml2是我交叉編譯后放入交叉工具鏈的lib路徑下的,其他的都是交叉工具鏈自帶的庫。我估計是哪個庫出的問題,挨個屏蔽,最后發現是xml2這個庫的問題,根據asterisk的手冊,他需要依賴libxml2-dev這個庫,但是我已經移植了這個庫。無耐之下,想了一個辦法,我的開發板的rootfs用的是buildroot,用make menuconfig查看了buildroot,里面有libxml2,選中這一項,然后保存退出編譯。因為buildroot會自動的下載選中的庫并編譯。編譯完后,將里面的libxml2的動態庫和靜態庫,弄出來,就可以用的。經測試發現asterisk沒法用靜態的libxml2,編譯不過去,可以用動態的。


現在asterisk能跑起來了,但是還是自動退出了。在asterisk.c文件里,添加一個打印信息,發現到這一行就沒有打印信息了。

if (daemon(1, 0) < 0)

daemon是linux守護進程的函數,第個參數如果為0的話,就把所有輸出都輸出到/dev/null里,所以這句后就沒有輸出了,將其改為1,現在asterisk輸出如下

Waring: program compiled against libxml 209 using older 208

Unable to open AMI configuration manager.conf, or configuration is invalid..

Can't find indications config file indications.conf

Could not load features.conf

Could not find valid ccss.conf file. Using cc_max_requests default

183 modules will be loaded.

先看第一行,這是因為編譯的時候我用的2.9.1版本的libxml2的頭文件,而鏈接的時候,我用的是2.8.0版本的libxml2庫文件,所以不匹配造成的。將上位機的/usr/include/libxml2/libxml里的頭文件全部換成2.8.0的,再編譯即可。

下面那些打印信息不用管,是正常的輸出,但是到模塊加載這里就沒了,應該是asterisk崩潰了,查找代碼后發現就是在加載模塊的時候崩潰的。

asterisk的所有模塊都是使用so文件提供的,而且是以dlopen的方式加載的,程序就是dlopen的時候崩潰的。

經測試發現是交叉工具鏈的事,因為我用的是天嵌的210交叉工具鏈,但是目標版是安之謀的335x,他們的交叉工具鏈版本是不一致的。因為我自己寫了dlopen的測試程序,用天嵌的編譯也崩潰,但是335x編譯就沒事了。

那么我只能用安之謀的工具鏈來編譯了。

但是在編譯的時候報錯。以下是報錯信息。

The 'CRYPTO' dependency was previously satisfied but is now unsatisfied.

The functionality of the following modules will be affected:

chan_iax2

func_aes

實際是在真正開始編譯前就報錯,從字面意思來看就是configure的時候有crypto,但在編譯的時候交叉工具鏈實際沒有這個庫。所以報的錯。經對比兩個makeopts文件,就可以看到。

用./configure --host=天嵌交叉工具鏈前綴?????? ./configure --host=安之謀交叉工具鏈前綴

分別生成makeopts文件,就可以看出其中的差別。

可以將天嵌交叉工具鏈生成的makeopts替換安之謀生成的makeopts。

今天編譯的時候,還是保錯,是找不到SDL的頭文件,發現是安之謀的交叉工具鏈里沒有SDL的支持。

http://www.libsdl.org/release/

可以從這里下載sdl的源碼來交叉編譯。也可以用buildroot來下載并自動編譯。buildroot自動下載的是

SDL-1.2.15.tar.gz。

我是用buildroot來自動下載和編譯的SDL,那么只需要將頭文件和編譯好的庫文件都考入到交叉工具鏈相應的位置上即可。

現在終于編譯過去了,將其拷貝到開發板上去運行,asterisk終于跑起來了。

用asterisk -r也可以連接上asterisk后臺運行的daemon進程了。

但是用module show命令發現最關鍵的chan_sip.so模塊沒有加載,搜索后發現這個模塊就沒有被編譯出來,經過對比上位機的文件后發現,這個文件menuselect.makeopts是不一致的。

這個文件的作用是指示不需要的模塊,為什么這么說呢。

---------------------------------------------------------------------------------------------------------------------------------------------

這個地方是asterisk編譯的精髓所在。

通過查看asterisk模塊子目錄的Makefile文件,可以發現每個Makefile里都包含了menuselect.makeopts,menuselect.makedeps,Makefile.moddir_rules文件。并且Makefile.moddir_rules里包含了Makefile.rules。

而且里面有這么一句all: _all。

但是查找整個Makefile文件,都找不到目標all的依賴_all,那么他一定是在某一個被包含的文件之中(上面4個文件之一)。

查找上面4個文件后,在Makefile.moddir_rules這個文件里發現了這一句。

_all: $(LOADABLE_MODS:%=%.so)

再查找LOADABLE_MODS,LOADABLE_MODS:=$(C_MODS) $(CC_MODS)

C_MODS:=$(filter-out $(MENUSELECT_$(MENUSELECT_CATEGORY)),$(ALL_C_MODS))
CC_MODS:=$(filter-out $(MENUSELECT_$(MENUSELECT_CATEGORY)),$(ALL_CC_MODS))

看到這幾句,文件基本一目了然了,C_MODS和CC_MODS我們要編譯的模塊。

我猜測ALL_C_MODS和ALL_CC_MODS應該是asterisk的所有模塊,然后通過makefile的filter-out函數將$(MENUSELECT_$(MENUSELECT_CATEGORY)這些模塊過濾掉。那么$(MENUSELECT_$(MENUSELECT_CATEGORY)是在哪里定義的呢,我猜測應該是menuselect.makeopts果然,通過對比x86上的這個文件,發現我的menuselect.makeopts這個文件里MENUSELECT_CHANNELS這個模塊里,確實是有chan_sip這個模塊,證實我之前的猜測。

然后再說Makefile.rules這個文件。

asterisk真正啟編譯作用的文件是Makefile.rules這個文件,這個文件實際就是asterisk的通用編譯規則文件。

這樣上面4個文件總結如下:

1.Makefile.rules????????????????????????? asterisk模塊makefile文件的通用編譯規則。

2.Makefile.moddir_rules ? ? ? ? ? ? ?asterisk模塊makefile文件的編譯目標文件。

3.menuselect.makeopts ? ? ? ? ? ?? asterisk模塊makefile文件不編譯的模塊指示。

4.menuselect.makedeps???????????? ?????????

---------------------------------------------------------------------------------------------------------------------------------------------

接著上面的問題說,將menuselect.makeopts里面chan_sip和chan_alsa去掉后,再編譯,就可以編譯這兩個模塊了。

但是編譯報錯。是需要依賴庫造成了,所以應該是在configure階段,configure發現我沒有這些庫,所以生成的menuselect.makeopts里將chan_sip給去掉了,因為asterisk實際支持多種協議,所以sip不是必須的 ,但是對我來說

sip是最重要的。

昨天編譯的時候報錯,是少alsa,今天再編譯居然編譯過去了,很奇怪,將編譯出的chan_sip和chan_alsa這兩個庫拷貝到開發版上。重啟asterisk,sip模塊加載上了。用xlite測試了一下,注冊,撥號,音視頻都沒問題了。

????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? 3月13號


總結

以上是生活随笔為你收集整理的arm for asterisk1.8的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。