在omap3530上移植成功Android的ALSA声卡驱动

转载请注明出处:http://blog.csdn.net/tianfeng105/archive/2010/03/28/5425547.aspx

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

经过一个星期的努力,终于让omap3530上的Android有了声音。

这是第一次做Android的移植,也是第一次做移植,难度对我来说,还是蛮大,但是在范老师,还有在网上很多无私的前辈的帮助下,让我的第一次移植没有出现太大问题就成功完成了~ 现在我就分享一下,我这次的移植步骤,希望对有需要的人有帮助。

        首先,我这次移植的硬件平台是: omap3530

                                            系统: Android1.5

                                      声卡模式: ALSA

以下就是我这次的移植步骤,参照了很多前辈的经验。

1.在网上下载移植代码(用GIT下载)  //这里我要说明一下,网上对于下载的移植代码可能跟我的不同,这主要你要看一下,AudioSystem这个类里时否定义了DEVICE_OUT_EARPIECE这个, 如果没有定义就我以下的,如果定义了,你就用其它一套移植代码吧,

  a. platform_external_alsa-lib:

  git clone git://gitorious.org/android-on-freerunner/platform_external_alsa-lib.git

  将其复制到 external 目录下,并重命名为 alsa-lib

  b. platform_hardware_alsa_sound

  git clone git://gitorious.org/android-on-freerunner/platform_hardware_alsa_sound.git

  将其复制到 hardware 目录下,并重命名为  libaudio-alsa

  c. platform_external_alsa-utils (可选)

  git clone git://gitorious.org/android-on-freerunner/platform_external_alsa-utils.git

  将其复制到 external 目录下,并重命名为 alsa-utils

(注:以上是没有定义DEVICE_OUT_EARPIECE这个使用的代码,我不保证以上的代码能在所有的Android1.5能用)

以下是定义了DEVICE_OUT_EARPIECE的代码 下载

   git clone git://android.git.kernel.org/platform/external/alsa-lib.git
   git  clone git://android.git.kernel.org/platform/external/alsa-utils.git
   git  clone git://android.git.kernel.org/platform/hardware/alsa_sound.git

改法同上。

2.修改system/core/init/device.c加上一段代碼以創建/dev/snd:

  1. ...... 
  2.        } else if(!strncmp(uevent->subsystem, "mtd", 3)) { 
  3.            base = "/dev/mtd/"
  4.            mkdir(base, 0755); 
  5.        } else if(!strncmp(uevent->subsystem, "sound", 5)) { 
  6.            base = "/dev/snd/"
  7.            mkdir(base, 0755); 

3. 修改system/core/init/devices.c,增加设备节点及权限:

  1. static struct perms_ devperms[] = { 
  2. ... 
  3.     { "/dev/snd/",          0664,   AID_SYSTEM,     AID_AUDIO,      1 }, 
  4. ... 
  5.   

4. 修改:build/target/board/generic/BoardConfig.mk

[c-sharp] view plain copy print ?
  1. 1 # config.mk 
  2. 2 #  
  3. 3 # Product-specific compile-time definitions. 
  4. 4 # 
  5. 5  
  6. 6 # The generic product target doesn't have any hardware-specific pieces. 
  7. 7 TARGET_NO_BOOTLOADER := true 
  8. 8 TARGET_NO_KERNEL := true 
  9. 9 TARGET_NO_RADIOIMAGE := true 
  10. 10 #HAVE_HTC_AUDIO_DRIVER := true 
  11. 11 BOARD_USES_ALSA_AUDIO := true 
  12. 12 BUILD_WITH_ALSA_UTILS := true 
  13. 13 #BOARD_USES_GENERIC_AUDIO := true 
  14. 14 BOARD_USES_GENERIC_AUDIO := false 

5. 修改 hardware/libaudio-alsa/Android.mk  这个一定要注意了,要不然会造成让编译通不过的情况,一定要根据情况去修改~

 

[c-sharp] view plain copy print ?
  1. 1 # hardware/libaudio-alsa/Android.mk 
  2.   2 # 
  3.   3 # Copyright 2008 Wind River Systems 
  4.   4 # 
  5.   5  
  6.   6 ifeq ($(strip $(BOARD_USES_ALSA_AUDIO)),true
  7.   7  
  8.   8   LOCAL_PATH := $(call my-dir) 
  9.   9  
  10. 10   include $(CLEAR_VARS) 
  11. 11  
  12. 12   LOCAL_ARM_MODE := arm 
  13. 13   LOCAL_CFLAGS := -D_POSIX_SOURCE 
  14. 14  # LOCAL_WHOLE_STATIC_LIBRARIES := libasound 
  15. 15  
  16. 16   LOCAL_C_INCLUDES += external/alsa-lib/include 
  17. 17  
  18. 18   LOCAL_SRC_FILES := AudioHardwareALSA.cpp 
  19. 19  
  20. 20   LOCAL_MODULE := libaudio 
  21. 22   LOCAL_STATIC_LIBRARIES += libaudiointerface / 
  22. 23   #  libasound 
  23. 24  
  24. 25   LOCAL_SHARED_LIBRARIES := / 
  25. 26     libcutils / 
  26. 27     libutils / 
  27. 28     libmedia / 
  28. 29     libhardware_legacy / 
  29. 30     libdl / 
  30. 31     libc / 
  31. 32     libasound 
  32. 33  
  33. 34   include $(BUILD_SHARED_LIBRARY) 
  34. 35  
  35. 36 endif 

6. 重建编译选项:

a) . build/envsetup.sh (这个脚本的名字可能有不同,我在网上就发现有了,)

b) choosecombo

7. make clean (这一步必需的,要不然不能够在android系统中发声出来,你可以试一下,不clean 那么在系统启动的时候你可以用logcat命令查看一下,系统的启动,你会发现这个时候系统用的基本就不是你所想要的ALSA声卡,而是Stub驱动)

8. 编译 make -j2

9. 制作文件系统(这个在这里就不说了,如果有必要我再发上来,因为我还没有尝试做成文件系统直接放到板子上面去跑,等我做完那一步的时候,我再补上来,我现主要是用NFS来测试) 在这里,我测试了一下,用Android自带的播放器,能够从里面飘出悦耳的音乐了,以下几步我在网上看见大部分都这么做了,所以我也发上来,让大家参考一下,我以下的我都没有去做了,如果有时间再去试一下)

9. 其次asound.conf文件需要几个特别的配置 (这个我没有设置,开始以为这里出来问题,搞了好久,直到后来用logcat查看了系统的启动记录,发现系统中启动的基本就不是Alsa声卡模式,而是系统自带的sub声卡模式,所以没有声音出来)

 

[c-sharp] view plain copy print ?
  1. ctl.AndroidOut { 
  2.       type hw 
  3.       card 0 
  4. ctl.AndroidIn { 
  5.     type hw 
  6.     card 0 
  7. pcm.AndroidPlayback { 
  8.     type hw 
  9.    card 0 
  10.    device 0 
  11. pcm.AndroidRecord { 
  12.    type hw 
  13.   card 0 
  14.   device 0 

10.最后还需要修改init.rc文件,重新设置Audio 驱动的设备节点的owner和访问属性(编译后,文件系统中的init.rc) (这一步我也没有进行,可能在我在第二步的时候就已经做过了)

     chown root audio /dev/snd/controlC0

     chown root audio /dev/snd/pcmC0D0c

     chown root audio /dev/snd/pcmC0D0p

     chown root audio /dev/snd/timer

     chmod 0666 /dev/snd/controlC0

     chmod 0666 audio /dev/snd/pcmC0D0c

     chmod 0666 audio /dev/snd/pcmC0D0p

     chmod 0666 audio /dev/snd/timer

更多 0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值