歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux驅動的開發與移值——分析Tiny210的聲卡驅動模塊

目的:
接著上一篇文章《S3C6410 LCD驅動的分析過程——定位相關源代碼》地址:http://www.linuxidc.com/Linux/2012-02/54665.htm ,再寫一篇關於分析內核驅動的過程的文章以便加深自己對這方面的印象。
背景
手頭有友善之臂的tiny210和tiny6410。我留意到tiny210的核心板比6410多了一個排針座,但是另外兩個針座的位置都是一樣的。於是我在想友善之臂的工程師,會不會把把tiny210設計成與tiny6410兼容,把功能相同的引腳設計在相同的位置。然後把tiny210特有的功能放到新增的排針座裡呢?抱著這一想法,我粗略地對比了一下兩個開發板的底板原理圖,我驚奇地發現兩個底板相同位置的針腳果然是相同的。這讓我太激動了,因為我們原來的項目開發的底板就可以不用修改,直接升級到s5pv210進行使用了。於是我試了一下,把210的核心板裝到原來6410的底板上。
發現存在一些問題:
1、啟動方式不同的,210和6410選擇用SD卡進行啟動的開關是相反的。
2、聲音沒有了。仔細看原理圖和底板,發現6410使用的是采用Ac97方式通訊的Wm9713芯片,而210使用的是采用I2S方式通訊的wm8960芯片。
其它的功能基我們的產品沒有使用。於是我准備好為tiny210增加wm9713芯片的驅動,讓s5pv210的核心板可用於6410的底板上。


第一階段最終成果
這階段只是分析了友善提供的2.6.35.7的內核中與聲卡相關信息,這也是本文主要講述的內容。


經過學習和分析發現友善提供的2.6.35.7的內核中,並沒有包含聲卡驅動的源代碼(wm8960),只是提供編譯好的二進制內核模塊文件,並且也不是放在內核中,而是放在了Android的文件系統中。
相關的內核模塊文件在
/system/lib/modules/2.6.35.7-FriendlyArm/kernel/sound/soc/s5pv2xx/snd-soc-mini210-wm8960.ko
這個驅動核驅動還要搭配文件系統中的
/system/vendor/fa_codec_ctrl
一起使用才可以正常使用wm8960 聲音設備。


學習過程
我為什麼能了解到上面提到的這些信息呢?以下是我的分析過程:
1、同樣查看內核中的Kconfig文件,以了解一下聲卡驅動涉及什麼宏:
結果在/linux-xxx/sound/soc/s5pv2xx/kconfig文件中找到相應的內容:


config SND_S5PV2XX_SOC_WM8960
tristate "SoC I2S Audio support for WM8960 on MINI210"
depends on SND_S5PV2XX_SOC
select SND_SOC_WM8960_MINI210
select SND_S5PC1XX_SOC_I2S
help
Say Y if you want to add support for SoC audio on the MINI210.


上面的內容說明跟聲卡有關的宏是SND_S5PV2XX_SOC_WM8960、SND_SOC_WM8960_MINI210、SND_S5PC1XX_SOC_I2S


2、下一步查找一下相同目錄下的makefile文件,看一下上面這些宏涉及什麼文件,結果找到了以下內容:
ifneq ($(wildcard sound/soc/s5pv2xx/wm8960.c),)
ifeq ($(FA),1)
obj-$(CONFIG_SND_SOC_WM8960_MINI210) += snd-soc-wm8960.o
else
obj-m += snd-soc-wm8960.o
endif #FA
endif


# S5PV2XX Machine Support
snd-soc-mini210-wm8960-objs := mini210_wm8960.o


ifneq ($(wildcard sound/soc/s5pv2xx/mini210_wm8960.c),)
ifeq ($(FA),1)
obj-$(CONFIG_SND_S5PV2XX_SOC_WM8960) += snd-soc-mini210-wm8960.o
else
obj-m += snd-soc-mini210-wm8960.o
endif #FA
endif


這個內容的意思是:如果目錄下有wm8960.c和mini210_wm8960.c這些文件,就把它們編譯出來,如果沒有就不做事情。了解到這一點後,我們在該目錄下查找一下這些跟聲卡有關的源代碼。結果發現友善並沒有提供這兩個文件的源代碼。


3、沒有提供這些原代碼,那麼必然是以驅動模塊的方式來進行加載的,所以這一時我再查了一下友善提供的開發板的“文件系統”。查詢裡面的所有*.ko文件。結果在/system/lib/modules/2.6.35.7-FriendlyArm/kernel/sound/soc/s5pv2xx/中找到了相關“可疑”的驅動:snd-soc-mini210-wm8960.ko


4、查看啟動時的腳本,分析一下在什麼時候加載了這些驅動,認真查看每一個啟動相關的文件:
4.1在init.mini210.rc中發現以下內容:
service mini210-setup /system/etc/init.mini210.sh
oneshot
4.2查看/system/etc/init.mini210.sh
發現在該腳本中加載了聲卡驅動,並執行了fa_codec_ctrl這個程序才可以正常使用聲音設備。

至此基把內核中聲音設備的相關內容的位置分析完畢。下一步的任務就是補充這兩個文件了(實際上就是開發wm8960的過程了)。這些內容將在下一篇文章裡說明。 見 http://www.linuxidc.com/Linux/2014-02/96930.htm
Copyright © Linux教程網 All Rights Reserved