1. 程式人生 > >ALSA音訊的移植,編譯與測試

ALSA音訊的移植,編譯與測試

ALSA是目前Linux系統上大量採用的音訊裝置庫,通過Alsa架構能分離驅動和應用的開發。Alsa為上層提供API的同時,也為下層提供了介面,在核心配置的時候指定“支援Alsa”就能得到核心支援,具體位置為:

Menuconfig -> Device Drivers -> Soundcard support -> Advanced Linux Sound Architecture

有了Alsa核心驅動,我們還需要Alsa Lib和Alsa Util的支援,這3者的關係如下圖所示:

Alsa Util

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

Alsa lib

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

Alsa Driver

Alsa Util是純應用層的軟體,相當於Alsa裝置的測試程式,AlsaLib則是支援應用API的中間層程式。移植Alsa程式的順序就是先後移植Driver,Lib,Util。

一.Alsa Lib移植

1.編譯alsa-lib

cd /home/pingle/BackUp/alsa-tools/alsa-lib-1.0.15/

$ ./configure --prefix=/home/pingle/alsa/ AR=mipsel-openwrt-linux-uclibc-ar CC=mipsel-openwrt-linux-uclibc-gcc CXX=mipsel-openwrt-linux-uclibc-g++ CXX=mipsel-openwrt-linux-uclibc-g++ --host=mipsel-openwrt-linux-uclibc --enable-shared=yes --enable-static=no --target=mipsel-openwrt-linux-uclibc --with-debug=no --with-alsa-devdir=/dev --with-softfloat --with-configdir=/usr/local/share  LDFLAGS="-lm"

make
make install

2.編譯alsa-utils

cd /home/pingle/BackUp/alsa-tools/alsa-utils-1.0.15/

./configure --prefix=/home/pingle/alsa/ AR=mipsel-openwrt-linux-uclibc-ar CC=mipsel-openwrt-linux-uclibc-gcc CXX=mipsel-openwrt-linux-uclibc-g++ CXX=mipsel-openwrt-linux-uclibc-g++ --host=mipsel-openwrt-linux-uclibc CPPFLAGS="-I/home/pingle/alsa/include" LDFLAGS="-L/home/pingle/alsa/lib" --disable-alsamixer

make
make install

1)--host指定編譯器,這裡指定為在目標板所執行的交叉編譯器。注意執行本配置命令前務必保證編譯器已經可以在Shell下直接執行了。

2)--prefix指定編譯後文件的安裝路徑,後續的安裝命令會在該目錄中建立lib和include兩個目錄

3)若編譯make install時報錯:"mipsel-linux-ranlib command not found",解決方案為:執行make install之前,先用下su命令取得root許可權。然後再執行make install

二.lib和util安裝到嵌入式平臺

在目標板上,以下檔案必須被拷貝至對應位置

1) lib庫檔案,放在 /lib/中

2) conf檔案,應放在/usr/local/share中,與編譯時指定的目錄相同

3) 應用檔案,util能產生aplay,amixer,arecord可執行程式,這些檔案可放在/usr/sbin中

4) 必須保證有/dev/snd/目錄中,此目錄下應包含以下幾個裝置檔案(驅動),controlC0, pcmC0D0c, pcmC0D0p, timer如果這些檔案已經在/dev/下,可拷貝到snd目錄中。或者建立相應符號連結,

      ln -s /dev/pcmC0D0c     /dev/snd/pcmC0D0c
      ln -s /dev/controlC0       /dev/snd/controlC0
      ln -s /dev/timer             /dev/snd/timer

三.執行測試程式

export ALSA_CONFIG_PATH=/usr/share/alsa/alsa.conf                                       
未新增環境變數前出現的錯誤:
~ # ./aplay
ALSA lib conf.c:2827:(snd_config_hook_load) cannot access file /usr/share/arm-alsa/share/alsa/cards/aliases.conf
ALSA lib pcm.c:1959:(snd_pcm_open_conf) Invalid type for PCM default definition (id: default, value: cards.pcm.default)
aplay: main:533: audio open error: Invalid argument
~ # ./aplay
ALSA lib pcm.c:2090:(snd_pcm_open_noupdate) Unknown PCM default
aplay: main:533: audio open error: No such file or directory

編譯報錯:can't load library 'libpthread.so.0'。
解決方案:在openwrt中的make menuconfig中加入libpthread支援。

編譯報錯:fatal error: alsa/asoundlib.h: No such file or directory compilation terminated.
解決方案:mipsel-openwrt-linux-uclibc-gcc -lasound -L/home/pingle/alsa/lib -I/home/pingle/alsa/include -o test_audio2 test_audio02.c


四.回顧驅動程式

還是oss驅動介面呼叫比較好理解,不過終於找到了這個圖,一看就啥都明白了


period(週期)
:硬體中中斷間的間隔時間。它表示輸入延時。
音效卡介面中有一個指標來指示音效卡硬體快取區中當前的讀寫位置。只要介面在執行,這個指標將迴圈地指向快取區中的某個位置。 frame size = sizeof(one sample) * nChannels alsa中配置的快取(buffer)和週期(size)大小在runtime中是以幀(frames)形式儲存的。 period_bytes = frames_to_bytes(runtime, runtime->period_size); bytes_to_frames() The period and buffer sizes are not dependent on the sample format because they are measured in frames; you do not need to change them.

五.小技巧:
1.經過yaff檔案系統燒入使用者檔案到板子上:
在/home/pingle/kernal/ws04/build_dir/target-mipsel_uClibc-0.9.32/root-xburst目錄下加入自己的檔案;

然後:
$cd /home/pingle/Yaff/linux-2.6.24.3/fs/yaffs2/utils 
(可能要make一下哦!)
$./mkyaffs2image 1 /home/pingle/kernal/ws04/build_dir/target-mipsel_uClibc-0.9.32/root-xburst /home/pingle/desktop/xburst-tools-ws10/image/rootfs.yaffs2
               (引數)                   (rootfs的目錄)                                              (生成的檔案yaffs系統存到的目錄)

2.uboot下檢測記憶體命令:mtest.

相關推薦

ALSA音訊移植,編譯測試

ALSA是目前Linux系統上大量採用的音訊裝置庫,通過Alsa架構能分離驅動和應用的開發。Alsa為上層提供API的同時,也為下層提供了介面,在核心配置的時候指定“支援Alsa”就能得到核心支援,具體位置為: Menuconfig -> Device Drivers

ALSA交叉編譯測試

情況簡介 ALSA 是目前 Linux 系統上大量採用的音訊裝置庫,通過 Alsa 架構能分離驅動和應用的開發。 Alsa 為上層提供 API 的同時,也為下層提供了介面,在核心配置的時候指定“支援 Alsa” 就能得到核心支援,具體位置為: Menuconfig -&

ORB_SLAM2編譯測試(一)

git 一段 分享 CI 圖像 它的 第三方 學習 clas ORB_SLAM2編譯與測試 學習視覺slam,經典的slam開源框架的學習,是不可避免的。記錄一下ORB_SLAM2的編譯與測試,此次配置的是無ROS版本。跑的數據集TUM Dataset 系統版本:ubun

libxml2編譯測試

官網 http://xmlsoft.org/ 原始碼下載 我使用的版本 libxml2-2.9.8.tar.gz 編譯原始碼 1、解壓原始碼包 [email protected]:~/xml2$ tar xvf libxml2-2.9.8.tar

nxjson編譯測試

官網 原始碼下載 我使用的版本 yarosla-nxjson-afaf7f999a95.zip 編譯原始碼 1、解壓原始碼包 [email protected]:~/nxjson$ unzip yarosla-nxjson-afaf7f999

yaml編譯測試

yaml官網 yaml下載官網 下載網址 在我寫這篇文章的時候這個網站已經無法訪問了,不清楚是什麼原因,我最後得到的版本是yaml-0.1.7.tar.gz 原始碼下載地址 編譯原始碼 1、解壓原始碼包 [email protected

libcyaml編譯測試

官網 我使用的版本 libcyaml-master.zip 這個庫需要依賴python 的yaml庫,所以需要先安裝yaml庫,安裝方法見下文連線 編譯原始碼 1、解壓原始碼包 [email protected]:~/cyaml$ unz

nanomsg編譯測試

官網 原始碼下載 我使用的版本 nanomsg-1.1.4.tar.gz 編譯原始碼 1、解壓原始碼包 [email protected]:~/nano$ tar xvf nanomsg-1.1.4.tar.gz  [email 

libmodbus編譯測試

官網 原始碼下載 我使用的版本 libmodbus-3.1.4.tar.gz 編譯原始碼 1、解壓原始碼包 [email protected]:~/modbus$ tar xvf libmodbus-3.1.4.tar.gz [email&

matcaffe編譯測試

編譯 make matcaffe -j8 (編譯成功後生成檔案./matlab/+caffe/private/caffe_.mexa64 供matlab使用。) 測試 make mattest -j8 要在matlab中使用caffe時需要先新增路徑:

Fabric智慧合約編譯測試環境搭建

1.建立docker-compose-dev.yaml membersrvc:   image: hyperledger/fabric-membersrvc   ports:     - "7054:7054"   command: membersrvc vp0:   im

嵌入式Linux下ALSA音訊架構ALSA-lib移植編譯心得

*************************************************************************************************************************** 作者:EasyWave

alsa lib和utils交叉編譯移植

一、PC端使用alsa 1)PC上使用alsa時,正常的安裝alsa-lib和alsa-util即可,alsa-lib提供alsa音訊程式執行所需要的庫,alsa-util主要生成可執行程式,在程式執行時,在link裡新增-lasound即可使用 2)PC端使用alsa程式設計,具體過程可以參考網上的連結,

ALSA音訊庫的移植 ARM 交叉編譯 環境變數

alsa 是在LINUX出現比較晚的音訊處理庫,主要是針對原有的OSS的庫進行改進.效能更好,支援多個播放源等.但相應的,增加的程式設計的複雜性.   舊的oss是採用標準檔案IO介面,裝置打開採用open,聲音播錄是採用資料IO介面(read/write),裝置的引數

ALSA交叉編譯移植

一、PC端使用alsa1)PC上使用alsa時,正常的安裝alsa-lib和alsa-util即可,alsa-lib提供alsa音訊程式執行所需要的庫,alsa-util主要生成可執行程式,在程式執行時,在link裡新增-lasound即可使用2)PC端使用alsa程式設

編譯運行測試代碼步驟

所在 eclipse adb push tomat -1 測試 技術分享 增加 版本 一、代碼寫完後開始對代碼進行編譯和執行,步驟如下:創建build文件-->修改build文件-->開始編譯-->push文件-->運行測試 二、具體執行步驟如下:1

linux 下音訊的錄製播放測試例子

main.c檔案 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "sndtools.h" int main(int argc, char const *argv[

編譯原理】Flex、Bison的安裝測試

Linux下安裝: sudo apt-get install flex bison flex -h bison -h 下載選擇 Complete Package,except sources 安裝

Ubuntu14.04 OpenCV編譯安裝測試

1簡介 OpenCV,英文全稱Open Source Computer Vision Library。OpenCV是一個基於(開源)發行的跨平臺計算機視覺庫,可以執行在Linux、Windows和Mac OS作業系統上。它輕量級而且高效——由一系列 C 函式和少量 C++

MQTT原始碼交叉編譯移植

基於MQTT原始碼的嵌入式LINUX移植,網上可參看資料幾乎沒有,估計是用的不多,沒什麼人弄,又或者 太簡單,沒人寫參考。這裡記錄下編譯與移植過程。大致有三部分,交叉編譯openssl、交叉編譯MQTT、安裝MQTT伺服器。 1 交叉編譯OPENSSL 因為MQTT