如何移植音频驱动到android4.4

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何移植音频驱动到android4.4相关的知识,希望对你有一定的参考价值。

以小米为例说明安卓手机如何移植刷机包:
首先先清楚的了解本机型的硬件配置,也就是主板平台方案,分辨率等。通常同系列的CPU不同机型的ROM拼包移植成功率较高。
挑选合适的底包和移植包,底包和移植包尽量同源。
找出底包和移植包两者的不同之处:目的是了解需要改动什么才可以让别的机型ROM能在自己的机型上面使用,在底包、原生包、移植包上进行交叉对比。
卡刷ROM条件:
机器必须先ROOT
必须有支持的第三方Recovery,没有第三方Recovery的也就只能反向从机器中进行提取并移植了
支持卡刷的ROM,对于小白来说,卡刷ROM也是最方便的
移植思路及步骤:
底层硬件驱动不同(内核).
删除移植包里面的boot.img(内核)和system\lib下的modules文件夹.替换成本机型的内核文件
按键配置不同(键值).
将移植包system\usr下的keychars和keylayout两个文件夹替换成本机型的
传感器不同(驱动类)
将移植包system\lib下的hw文件夹替换成本机型的
系统配置文件不同(驱动类)
将移植包system\etc下的bluetooth、firmware、permissions、wifi四个文件夹替换成本机型的(如果有);
其中firmware中的modem.img是负责通信的基带文件!modules中的文件是开机底层引导驱动,只要这两处替换成KIS1的,那么这个ROM一般都能正常启动进入系统,且有信号!
还有enhanced.conf、media_profiles.xml(多媒体配置文件,即视音频配置文件)、vold.fstab(存储分区配置文件);
最后注意system下是否有vendor和wifi文件夹,可以直接用文件对比器进行对比修改;
修改build.prop(属性)
把自定义的内容起进行直接修改,例如:机型、日期、版本号等.参数如果懂可以修改,如果不懂,建议不动它,只修机型、日期、版本号等;
修改updater-script(刷机脚本)
不同机型的ROM,刷机脚本里包含的分区挂载和格式化命令都有所差异,如果不做修改直接使用,把本不该改动的分区挂载并修改了的话,手机将存在变砖风险,前提需了解自己机器的分区结构
脚本开头有验证机型,请删除,例如assert(getprop(逗ro.product.device地)== 逗**x地 || getprop(逗ro.product.product地) ==
逗**xx地)
这是验证机型的代码。没有则无视,也可以修改成自己的机器名称。ROM打包测试;打包测试了,一般如果内核与库文件、库文件与上层框架兼容的话,刷机后至少能开机。
如果卡第一屏了,分析原因,一点点排查,主要看updater-script脚本有无问题,看内核是否已经替换,看传感器等库文件是否合理替换等;
后续修复BUG工作,主要放在etc和lib、lib\hw文件夹里进行搜索修改。
音频audio,相机camera,感应器sensor,灯light。无线wifi,蓝牙bluetooth….哪项不正常工作,搜索带有这些英文的KIS1驱动,替换进去即可!
参考技术A 转载 我自己是个刷机狂人,恰巧也爱好开发APP,因此对ROM移植和定制做过一些研究和了解。其实rom定制不需要多少的编程技巧(当然有基础会更好),如果你只为定制你想要的一些功能,只要进行整合再重新打包就可以了。你可能会看到在很多论坛的rom发布者并没有多少的java,c,c++知识,但他们可以弄出一些非常棒的rom。相反的如果你用过MIUI,华为的rom,Flyme等等,这很难是一个人弄出来的,需要一个团队包括产品经理、设计师、测试人员、编码人员等等。
--------------------------------------------------------------------------------------------------------------------------------
由于问题太过复杂,我也不可能回答的非常详细毕竟知识有限,但希望可以帮助到那些需要这方面知识的人,因为在国内貌似很少有人出详细的教程。
---------------------------------------------------------------------------------------------------------------------------------
1.首先是准备工作无论你是windows、linux还是mac都可以进行rom的定制,当然对于windows你需要一些工具来完成相应的工作。
这里仅以windows为例,在定制之前需要以下的工具:

JDK(java development kit java开发组件,这个组件必须第一个被安装,并且配置好环境变量)
android kitchen搭建,为何叫安卓厨房,个人觉得非常的形象!因为你定制rom就像烧菜,烧菜需要厨房!对不对,所以你可以讲android kitchen理解为定制rom所需要的一个环境。
Cygwin,这个东西是为了windows环境下开辟出一个类UNIX模拟环境(如果你是搞嵌入式开发的,那么这个东东一定非常的熟悉)
Apktool/Apkmanager(Apktool可能是当今最为流行的apk工具包,由解包、打包、签名程序组成。而Apkmanager是另一款apk反编译利器,当Apktool不行的时候或许它可以排上用处)
Notepad/Editplus(这个在你修改代码的时候需要用到,如果只用文本工具有点寒掺是否)
winrar/7-zip(解压工具)
2.工具准备完毕后,先安装JDK,JDK搞定后。安装cygwin(建议从官网下载)。最后将下载好的kitchen放入cygwin/home/目录下,下载下来的Kitchen名字很长,建议改成Kitchen。另外需要注意的一点是所有目录的名称不要有空格。
3.当你完成jdk/cygwin/kitchen的准备工作后,就可以使用cygwin进行rom的修改了!
-------------------------------------------------------图1-1 cygwin主界面窗口-------------------------------------------------
4.接着你就要进行一些个人定制的修改行为了,这里分两种,一种是基于一个基本rom,另一种就是你木有一个基本rom(这种情况下你需要自己建立必要的文件夹和文件,因为框架就是这么设定的,所以你必须要这么做)。这里还有一些细节操作,不赘述了。
5.这里基本上已经可以进行需要的修改了,修改分两种,一种是简单的信息修改,这个通过Kitchen就可以做到。另一种是手动修改,这可以修改的东西非常的多,我也有很多不知道的地方,比如状态栏的图标修改、内置app的修改、启动画面的修改、各种脚本修改(优化脚本可优化各种速度,比如wifi脚本,wifi会变快,gps脚本,定位会变快。)、改变字体、主题修改、音频效果修改等等,可以修改的地方也非常的多。
6.最后完成修改之后,依旧使用Kitchen进行打包就可以了。

基本上简单的定制工作已经完成,非程序员做这些工作是绝对木有问题的,懂点皮毛都可以完成这些工作,但却可以做出属于你自己的ROM!
---------------------------------------------------------------------------------------------------------------------------------
当然还有大神可以直接从源代码编译做真正的rom,这个就比较麻烦了,需要类似Ubuntu环境,这里等以后知识储备够了再进行补充,但是个人认为,上面这个方法真的够用了,不过从底层的角度而言从源代码编译才是真正的做一个第三方的rom。
---------------------------------------------------------------------------------------------------------------------------------
最后推荐大家xda的这个版块,想学rom定制,这里有你需要的大部分知识!而你需要做的就是学习和实践。
参考技术B linux驱动开发弄过吗,4.4基于的linux已经上源码树了。

第5章 Android移植与驱动

第5章  Android移植与驱动

     通过学习本章Android移植与驱动,知道了Android移植和驱动的关系。其中,设备驱动程序包括内核驱动程序和用户空间驱动程序。Linux系统的设备分为3类:字符设备、块设备和网络设备。除网络设备外,字符设备与块设备都被映射到Linux文件系统的文件和目录,通过文件系统的系统调用接口open()、write()read()、close()等函数即可访问字符设备和块设备。Android中内核的结构和标准的Linux2.6内核是基本相同的,Android在其中基础上增加了私有内容。Android专用驱动程序不是Linux的标准驱动,它们的作用是辅助系统运行,一般不操作实际硬件。AndroidLogger驱动程序为用户层程序提供log的支持,这个驱动作为一个工具来使用。Android中常使用的设备主要有Framebuffer驱动、输入设备驱动、v412摄像头-视频驱动、OSS音频驱动、ALSA音频驱动、MTD驱动、蓝牙驱动、Wlan驱动。Android驱动的HelloWord实例。第一个ifep$(KERNELRELEASE,)目前并无用处,它的由来是指在Linux源码根目录下的Makefile编译内核时,KERNELRELEASE宏会被定义,那么如果是从源码根目录开始的make则会将myhello.o模块进行编译进内核。实验步骤有(1)将文件夹exl-hello-world复制到Linux环境中(2#cd /home/linux/test/exl-hello-world (3)#make ( 4)通过inmod命令将模块加入内核 :  #insmod insmod hello.ko 。  (5)通过lsmod查看内核模块: #lsmod |grep hello (6) 通过rmmod删除内核中的模块: #rmmodhello

以上是关于如何移植音频驱动到android4.4的主要内容,如果未能解决你的问题,请参考以下文章

十七S3C2440 音频解码芯片WM8976声卡驱动移植madplay测试

求助IMX6+Android4.4移植RTL8723AU驱动问题

音频DAC cs4344 驱动不起来,求助

win7 进入传奇提示音频设备无法初始化(插上耳机就可以玩,不想插入耳机如何解决)

Linux驱动开发|音频驱动

Audio基于STM32 I2S移植WM8978 Audio Codec驱动