ALSA音效卡筆記4-----體驗音效卡
1 、配置核心支援UDA1341
(1)核心
解壓核心並打上補丁
配置核心
platform
需要設定哪些配置項,先看一下platform,需要把S3c24xx-i2s.c檔案配置上去,dma.c也要配置上去。這些檔案對應哪一個配置項,可以通過開啟核心目錄中以上兩個檔案所在目錄下的Makefile。
- 配置編譯項CONFIG_SND_S3C24XX_I2S
// s3c24xx-i2s.c
而檔案snd-soc-s3c24cc-i2s-objs對應的配置項是CONFIG_SND_S3C24XX_I2S
因而需要配置編譯項CONFIG_SND_S3C24XX_I2S // s3c24xx-i2s.c
- 配置編譯項CONFIG_SND_SOC_SAMSUNG // dma.c
codec
- 配置編譯項CONFIG_SND_SOC_UDA134X // uda134x.c
看一下codec,需要把uda134x.c 檔案配置上去。這檔案對應哪一個配置項,可以通過開啟核心目錄中檔案所在目錄下的Makefile。
因而需要配置編譯項CONFIG_SND_SOC_UDA134X // uda134x.c
machine
- 配置編譯項CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X //
s3c24xx_uda134x.c
看一下machine,需要把s3c24xx_uda134x.c 檔案配置上去。這檔案對應哪一個配置項,可以通過開啟核心目錄中檔案所在目錄下的Makefile。
搜尋那四個配置項,配置核心以把上面四項全部配置上去
-> Device Drivers
-> Sound card support
-> Advanced Linux Sound Architecture
-> ALSA for SoC audio support
<*> ASoC support for Samsung // CONFIG_SND_SOC_SAMSUNG
<*> SoC I2S Audio support UDA134X wired to a S3C24XX // CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X // s3c24xx_uda134x.c
-> System Type
[*] S3C2410 DMA support
2、 修改程式碼
machine
- 修改mach-smdk2440.c 新增"s3c24xx_uda134x"平臺裝置
我們把S3c24xx-i2s.c檔案配置進核心了,S3c24xx-i2s.c只有platform_driver,但是platform_device在mach_mini2440.c(3.4.2核心用mach-smdk2440.c),需要修改這個檔案把同名的platform_device放進去。先構建一個smdk2440_audio的平臺裝置結構體,然後把這個結構體放進平臺裝置數組裡。這個陣列最後會把裡面的結構體註冊進核心。
platform
- 修改s3c24xx-i2s.c 新增"s3c24xx-iis"平臺裝置
我們把s3c24xx-i2s.c檔案配置進核心了,S3c24xx-i2s.c只有platform_driver,但是platform_device(之前在mach-mini2440.c中被放到數組裡面)在devs.c,需要修改這個檔案把同名的platform_device放進去。先構建一個s3c_device_iis的平臺裝置結構體,然後把這個結構體放進平臺裝置數組裡。這個陣列最後會把裡面的結構體註冊進核心。
注:平臺裝置陣列在mach-smdk2440.c
codec
- 修改mach-smdk2440.c 新增"samsung-audio"平臺裝置
我們把dma.c檔案配置進核心了,dma.c只有platform_driver,但是platform_device(之前在mach-mini2440.c中被放到數組裡面)在devs.c,需要修改這個檔案把同名的platform_device放進去。先構建一個samsung_asoc_dma的平臺裝置結構體,然後把這個結構體放進平臺裝置數組裡。這個陣列最後會把裡面的結構體註冊進核心。
注:平臺裝置陣列在mach-smdk2440.c
codec
- 修改mach-smdk2440.c 新增"uda134x-codec"平臺裝置
我們把uda134x.c檔案配置進核心了,dma.c只有platform_driver,但是platform_device(之前在mach-mini2440.c中被放到數組裡面)在mach-smdk2440.c,需要修改這個檔案把同名的platform_device放進去。先構建一個uda1340_codec的平臺裝置結構體,然後把這個結構體放進平臺裝置數組裡。這個陣列最後會把裡面的結構體註冊進核心。
3、編譯核心出現問題
修改bug: sound\soc\samsung\dma.c
pos += prtd->dma_period;改為
pos += prtd->dma_period*limit;
4、實驗
編譯核心並把編譯出來的核心拷貝到網路根檔案系統裡,設定啟動引數並啟動u-boot,u-boot引導核心啟動。開是否識別出聲卡
5、移植應用程式測試音效卡
alsa-util是使用alsa-lib的一些應用程式,我們使用alsa-util可以用來播放聲音,錄音或者調整音量等等。
- alsa-lib :
解壓並切換到目錄下
在配置時不使用--prefix,因為這樣做會破壞檔案系統的結構,使用預設路徑(把庫編譯安裝到/usr目錄下,但/usr目錄是PC機用的,為了跟PC機不衝突,因而在配置前把/usr改名為/usr_bak)
編譯:將原始碼變為機器可執行的程式碼檔案。
安裝:將可執行檔案安裝到作業系統裡,才可以使用。
mv /usr/bin/g* /tmp 就是移動 usr/bin/目錄下,以g開頭的檔案到/tmp目錄裡
sudo mv /usr /usr_bak
用echo $PATH檢視環境變數
修改環境變數,吧所有的usr改為usr_bak
export PATH=/usr_bak/local/sbin:/usr_bak/local/bin:/usr_bak/sbin:/usr_bak/bin:/sbin:/bin:/usr_bak/games:/usr_bak/local/arm/4.3.2/bin
配置./configure --host=arm-linux
編譯
make
因為make install是安裝到usr目錄下面去
建立usr目錄
sudo mkdir /usr
改變usr目錄的所有者和所在組
sudo chown book:book /usr
安裝
make install
把/usr目錄拷貝到/work/projects/alsa/目錄下
sudo cp -rf /usr /work/projects/alsa/
把自己建立的/usr目錄刪掉
sudo rm -rf /usr
然後複製回來
sudo mv /usr_bak /usr
把環境變數改回來
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/4.3.2/bin在我們的 /work/projects/alsa/下有編譯出來的/usr
把標頭檔案和庫複製進交叉工具鏈裡cd /work/projects/alsa/usr/include
sudo cp * -rfd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
cd /work/projects/alsa/usr/lib
sudo cp * -rfd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
把usr目錄複製到網路根檔案系統目錄下
cd /work/projects/alsa
sudo -rfd usr /work/nfs_root/fs_mini_mdev_new
- alsa-util
把標頭檔案和庫複製進交叉工具鏈裡
cd /work/projects/alsa/ncurses-5.9/tmp/include/ncurses
sudo cp * -rfd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
cd /work/projects/alsa/ncurses-5.9/tmp/include/
sudo cp * -rfd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include
cd /work/projects/alsa/ncurses-5.9/tmp/lib
sudo cp * -rfd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib
把庫複製到根檔案系統的lib目錄下
cd /work/projects/alsa/ncurses-5.9/tmp/lib
sudo cp *so* -rfd /work/nfs_root/fs_mini_mdev_new/lib
由於在拷貝過程中lib目錄下沒有發現動態庫.so,在配置時沒有制定生成動態庫,因而需要重新配置加入--with-shard
安裝錯誤無需理會,只要在tmp臨時檔案生成標頭檔案和庫檔案就可以了
解壓並切換到其目錄下
配置
ncurses是庫ncurses-5.9的名字
./configure --host=arm-linux --prefix=$PWD/tmp --with-curses=ncurses --disable-xmlto
--disable-nls
–disable-FEATURE
當你想禁用某個FEATURE的時候可以使用它
with選項來指定具體的軟體包地址,通過without選項來指定不使用指定的軟體包
編譯和安裝
makesudo make install
把安裝在tmp目錄下的檔案拷貝到網路跟檔案系統
6、測試
用aplay -h看是否能用
拷貝音訊檔案到網路檔案系統
進行播放
出現無法找到音效卡
aplay或者alsa-lib使用的音效卡節點預設是在/dev/snd/目錄下
因而需要新建/dev/snd目錄
mkdir /dev/sndcd /dev/snd/
ln -s 原始檔 目標檔案 做軟連結
和快捷方式只能共享執行檔案不同,linux通過連結檔案能共享幾乎所以型別的檔案
在當前目錄建立指向原始檔的連結ln -s /dev/controlC0
ln -s /dev/pcmC0D0p
ln -s /dev/pcmC0D0c
播放:
aplay Windows.wav
調音量用amixer來調,用amixer -h檢視用法
檢視控制項
amixer controls
檢視當前音量,numid=1表示第一個control,為什麼是numid=1,是因為用amixer controls命令顯示出第一個控制項是Master Playback Volume就是他的音量
amixer cget numid=1
設定音量,numid=1表示第一個control,30是設定的音量值
amixer cset numid=1 307、把核心的修改製作成補丁檔案
(1)把.config檔案拷貝為config_ok檔案,儲存我們修改的配置。然後make distclean
(2)把修改後的核心改個名字,然後解壓原版核心
(3)製作補丁檔案
(4)打上補丁後,吧config_ok複製為.config就可以了
轉自:http://blog.csdn.net/qingkongyeyue/article/details/52504235