OSS device被獨佔?

我們生活周遭存在太多太多的 embedded system ,過去 embedded system 有專屬的 OS,現在 linux 也可以應用在嵌入式環境,不過本版將廣泛討論所有嵌入式系統不只 linux 喔,歡迎有這方面經驗或有興趣的朋友一同進來討論。

版主: chester

OSS device被獨佔?

文章cttlee » 週一 1月 21, 2008 1:28 am

我先敘述一下我的狀況
原本的環境是Atmel AT91SAM9261EK
我在上面用VLC做串流聲音伺服器 與播放串流影音
所以同時間是可以播放影音並且透過本端的麥克風將聲音串流服務出去
VLC在設置輸入音效裝置的時候用的是v4l這個介面

平台換到HP hx4700 PDA跑Familiar Linux
我試著同時間播放兩個檔案會發生第二個檔案無法播放聲音
這方面已經用esd去解決
但是如果執行了聲音串流服務時 聲音就沒辦法播放
程式會回報can't open OSS device /dev/dsp之類的訊息
請問一下問題出在哪裡 謝謝
cttlee
 

文章阿信 » 週一 1月 21, 2008 10:35 am

因為esd也是會佔用/dev/dsp,所以串流部份要改用別種output方式。

如果你能使用ALSA module的話,ALSA就不會有這種獨佔的問題。
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

文章cttlee » 週三 1月 23, 2008 11:03 am

你好
我試了ALSA的輸出 然後把esd給拿掉
嘗試播放兩個聲音的時候仍然輸出訊息
ALSA lib pcm_hw.c:1155:(snd_pcm_hw_open) open /dev/snd/pcmC0D0p failed: Device or resource busy

當播放一個聲音亦無法 cat /dev/dsp

有什麼該注意的地方嗎?謝謝

下面是sndstat
Sound Driver:3.8.1a-980706 (ALSA v1.0.10rc3 emulation code)
Kernel: Linux ipaq-pxa270 2.6.15-hh2 #1 PREEMPT Tue Aug 15 02:26:24 CEST 2006 armv5tel
Config options: 0

Installed drivers:
Type 10: ALSA emulation

Card config:
iPAQ hx4700 Audio [codec AK4641]

Audio devices:
0: hx4700 Audio (DUPLEX)

Synth devices: NOT ENABLED IN CONFIG

Midi devices: NOT ENABLED IN CONFIG

Timers:
7: system timer

Mixers:
0: AK4641 Mixer
cttlee
 

文章阿信 » 週三 1月 23, 2008 11:41 am

cttlee 寫:你好
我試了ALSA的輸出 然後把esd給拿掉
嘗試播放兩個聲音的時候仍然輸出訊息
ALSA lib pcm_hw.c:1155:(snd_pcm_hw_open) open /dev/snd/pcmC0D0p failed: Device or resource busy

當播放一個聲音亦無法 cat /dev/dsp

有什麼該注意的地方嗎?謝謝

下面是sndstat
Sound Driver:3.8.1a-980706 (ALSA v1.0.10rc3 emulation code)
Kernel: Linux ipaq-pxa270 2.6.15-hh2 #1 PREEMPT Tue Aug 15 02:26:24 CEST 2006 armv5tel
Config options: 0

Installed drivers:
Type 10: ALSA emulation

Card config:
iPAQ hx4700 Audio [codec AK4641]

Audio devices:
0: hx4700 Audio (DUPLEX)

Synth devices: NOT ENABLED IN CONFIG

Midi devices: NOT ENABLED IN CONFIG

Timers:
7: system timer

Mixers:
0: AK4641 Mixer


你好,弟不清楚你的環境是如何,但您可以試試看用開兩個vlc同時輸出兩個音效檔,相信是可以work的。

另外,我試過用一個vlc當streaming server,另一個vlc當client撥放streaming的資料,是可以work的
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

文章cttlee » 週三 1月 23, 2008 1:50 pm

不行XD...
第一個播放的時候訊息是將聲音輸出到ALSA應該沒錯
第二個的時候就會說 Device or resource busy
如果esd work的話第二個可以自己去用esd output
不過需求是能夠播放與提供聲音串流
只是在這邊當有音效輸出的時候就沒辦法 vlc v4l://v4l-adev="/dev/dsp" ........ 提供聲音串流服務
或是對於mic的輸入可以用其他方式進去?

會是驅動程式本身的問題嗎?
原本在版子上用就沒什麼問題... 謝謝!
cttlee
 

文章阿信 » 週三 1月 23, 2008 2:26 pm

cttlee 寫:不行XD...
第一個播放的時候訊息是將聲音輸出到ALSA應該沒錯
第二個的時候就會說 Device or resource busy
如果esd work的話第二個可以自己去用esd output
不過需求是能夠播放與提供聲音串流
只是在這邊當有音效輸出的時候就沒辦法 vlc v4l://v4l-adev="/dev/dsp" ........ 提供聲音串流服務
或是對於mic的輸入可以用其他方式進去?

會是驅動程式本身的問題嗎?
原本在版子上用就沒什麼問題... 謝謝!


Hi,你好。
用v4l提供串流的音效的話,就不清楚v4l是否能夠接受alsa輸出,指定用/dev/dsp就是以OSS輸出。不清楚V4L2是否能多支援?

你可以試試看用snd_pcm_oss讓ALSA emulate OSS試試看。(但我想機會不大)

ALSA對不同的driver支援程度不一,像Realtek的chip就支援多聲音同時輸出(不止兩個)。以你的情況,如果兩個vlc不能同時撥放聲音的話,或許是driver不支援多重輸出。如果hp平台是open source的driver,或許還有機會可以tune
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

文章cttlee » 週日 1月 27, 2008 1:59 am

謝謝
v4l2有同樣for 2.6 稍舊版本的ipkg可用 我會再試試

是open source的
如果要從driver檢查起不知該從那邊下手?

其實我有些地方還不是很清楚
音效驅動程式本身就已經決定他是OSS or ALSA了吧?
所以即使驅動本身是for OSS也可以透過alsa-oss來動作?
一般來說只要kernel該勾選的有勾選就不再需什麼額外的東西了吧
至少我在AT91SAM9261的經驗是這樣
只是在這邊剛更新了kernel版本,將舊有的kernel module移除 音效卡就不見了...
cttlee
 

文章阿信 » 週一 1月 28, 2008 10:41 am

cttlee 寫:謝謝
v4l2有同樣for 2.6 稍舊版本的ipkg可用 我會再試試

是open source的
如果要從driver檢查起不知該從那邊下手?

其實我有些地方還不是很清楚
音效驅動程式本身就已經決定他是OSS or ALSA了吧?
所以即使驅動本身是for OSS也可以透過alsa-oss來動作?
一般來說只要kernel該勾選的有勾選就不再需什麼額外的東西了吧
至少我在AT91SAM9261的經驗是這樣
只是在這邊剛更新了kernel版本,將 音效卡就不見了...


Hi,Kernel該勾選的意思是指?Kernel在解壓縮後,的確是會選取ALSA和OSS driver。是指這個意思嗎?

OSS和ALSA是互斥的,系統使用OSS module時,是無法使用ALSA module,但ALSA有一個OSS emulation的功能,讓舊有不支援ALSA輸出的程式還是可以存取/dev/dsp的方式來發聲。

至於文後更新Kernel版本,將舊有的kernel module移除,這一點其實不是很懂,我的解讀是更新kernel版本=make install;make modules_install,這不就把新的module安裝到/lib/modules下了?然後又刪除掉kernel module,那音效卡的module不是也被刪除了?

或是說新的kernel在make menuconfig中,沒有選取音效卡的driver?
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

文章cttlee » 週一 2月 04, 2008 1:25 am

因為我是東西都編譯到核心不是模組
沒寫至flash只覆蓋/boot所以還是用舊版本kernel開
然後舊的module都被我移除了所以發生了烏龍
cttlee
 


回到 embedded system

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客