免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: send_linux
打印 上一主题 下一主题

Linux设备驱动开发转Android驱动开发,您准备好了么?(获奖名单已公布-2014-5-22) [复制链接]

论坛徽章:
0
21 [报告]
发表于 2014-04-28 11:38 |只看该作者
回复 12# send_linux
感谢 楼主 关注! 也许是加班的习惯养成吧!总觉的夜深人静的时候,才能安静的做点事情!我也是android新手!请大家多指教!

   

论坛徽章:
0
22 [报告]
发表于 2014-04-29 10:45 |只看该作者
linux 驱动和android驱动都接触过,可是都没深入。

linux驱动大部分是参考和模仿现有驱动,因为驱动那个套路就在那里;
android的驱动在linux kernel层的修改是有限的,adb bind log等几块;对具体设备的驱动到是基于linux驱动上,对设备调用api的实现。比如gps的驱动,在linux层可能是个串口或usb设备的驱动,但在android hal层它给的是一个.h的接口,实现了这些接口,就完成了驱动。ril也是类似的。

论坛徽章:
1
金牛座
日期:2014-08-18 17:32:41
23 [报告]
发表于 2014-04-29 12:00 |只看该作者
本帖最后由 andycrusoe 于 2014-04-29 12:15 编辑

1、您的Linux驱动开发的经验之谈
linux驱动学习分为三个部分
1)硬件部分40%,要求有一定的硬件基础,能看懂原理图,能使用基本的示波器,万用表,逻辑分析仪等等。各种不同硬件接口的时序,走线等等,如串口,camera,网口。新硬件,datasheet要认真看,注意看重点。
2)协议部分20%,硬件工作一般按照一定的时序操作,I2C,SPI常见,复杂的USB逻辑分层,不同的硬件不同,需要经验积累,看文档
3)linux驱动框架部分40%,字符设备,块设备,网络设备三大块。细节有同步,中断上下文,SMP的不同,poll,platform,tty,proc,sys,同步异步。把驱动框架掌握好了后,就有术了,有内功,一般的驱动修改不成问题,从头开始写驱动至少还得花3倍以上精力吧。

做驱动不易,linux驱动框架,内核基础一定得有,这是一个大难点,需要很长时间入门,基本的linux驱动框架,函数接口熟悉一遍就需要不少时间。这是一个非常陡峭的山坡,一定要突击时间一次性的上去,否则一段时间不看就忘了,又掉下来,下次学习又需要从头开始,学习的过程中做好笔记,要把书越看越薄。主意理解linux把一切都看出文件的思想,说到底,最好都是实现各种file operations,申请,初始化,注册,使用,释放,注销,基本就这个流程,各个框架函数不一样,封装层次也有差别,加上一些内核其它方法,定时器,工作队列,线程,锁等,就能完成非常多的工作了

个人建议学习驱动有一定的数电模电基础,最好做过单片机,那个郭天华的十天学习单片机不错。然后从linux的内核编程学起,学习linux驱动框架,linux device driver入门不错,宋宝华的书不适合新手,当手册查还行。然后实践,大量的调试,各个硬件,总线协议,慢慢积累经验。

做驱动的最好有应用层开发经验,知道应用层需要什么。驱动是底层硬件和应用层的沟通交互人,要把底层给上层屏蔽掉。所以C语言基础很重要,要扎实的C功底,一定的面向对象思想,还有GNU C对标准C的扩展需要了解,各种宏的使用也很重要,新手对各种宏容易晕。

驱动的进阶BSP开发,需要汇编知识了,一般ARM平台的多,arm thumb指令,汇编、C混合编程。静态映射很重要,做过一个平台后,差不多就找到感觉了。Uboot,linux kernel移植有了基础,看点资料就不难了。
linux内核社区的开发可以看看,了解一下,还有各个平台的一些开发平台,git源等,多关注,很可能你在调试的bug上面已经有patch了

2、传统的Linux驱动开发和Android驱动开发有何区别,如何转为后者?
android和linux底层都是linux 内核,android对内核改动了一些,还把一些内核驱动功能移到hal层,个人理解差不多就是应用层的驱动,类似于应用层的I2C,SPI驱动,底层驱动提供接口,hal层提供业务逻辑。
有linux驱动基础转android还是很快会上手的,补一下android开发基础知识,java语言学习一下,再学一下jni,四大组件也可以看一看。
做android就需要了解android了,转向android驱动最好有一定的java基础,JNI,NDK编程需要了解。底层是C驱动,然后java通过JNI调用接口在上层使用。android的四大组件,不同于纯linux开发的地方也需要了解。android只是个人兴趣学习,没多深入,

以上是个人看法,欢迎交流。做驱动一定要心里有谱,硬件,协议,驱动,内核,应用层,心里有数据流的每一个过程,能分析出来问题在哪里。还有可能是电子器件损坏,焊接问题,原理图设计问题,pcb封装问题,走线干扰问题,做多了,可能会遇到,不知道各位又遇到什么其它罕见的问题没。你得怀疑每一个值得怀疑的地方,然后慢慢排查,这里不要推卸责任,交流沟通很重要,定位了问题,就成功了一半,切忌相互推诿,要沟通。

    写了不少,很多很简略,展开可能就非常长了。欢迎有经验的交流,共同进步

评分

参与人数 1可用积分 +6 收起 理由
send_linux + 6

查看全部评分

论坛徽章:
0
24 [报告]
发表于 2014-04-29 13:14 |只看该作者
回复 13# hongduna


    赞

论坛徽章:
0
25 [报告]
发表于 2014-04-29 15:08 |只看该作者
android底层驱动方面跟标准嵌入式linux开发没多大区别,一般从标准嵌入式linux内核移植过来的驱动,注意添加系统挂起等这些操作
bootloader像uboot在上面添加了fastboot

比较明显的就是进程通讯方式改为了Binder来通讯, 上层也大量使用了匿名内存共享方式, 不过还没深入学习

论坛徽章:
0
26 [报告]
发表于 2014-04-29 21:58 |只看该作者
相当不错,感觉这个话题里的都是圈子里的人。观点都是可圈可点,让我受益颇多。

从大家的字里行间,可以看到都是技术迷,而且技术上的全局观很强。我也能感受到大家都认可Android驱动是门有前景且实践性很强的手艺。

我们能否起个更贴近实战的话题,比如“统一Camera驱动”,以一个驱动支持多款Sensor,这个大家工作是否有碰到?

论坛徽章:
0
27 [报告]
发表于 2014-04-29 22:54 |只看该作者
作为一名在校大学生,我还没有进行实际的linux设备开发,现在正在看linux设备驱动开发详解第二版,因此对于该问题不是很了解,不过android驱动应该和linux驱动差不多,因为android是基于linux内核的,只是增加了想binder、ashmem等机制而已

论坛徽章:
0
28 [报告]
发表于 2014-04-30 10:25 |只看该作者
我们可以把android看做是和QT平台一个层面的东西。

Linux的一个基本架构是硬件->内核->用户态app

Android的架构是硬件->Linux 内核->Android底层适配->android framework -> Android App

从Linux内核这个层面来讲,android和Linux的硬件驱动都是差不多的。
但是Android framework可能会根据硬件的不同,调整一些运行时方式,比如图形加速,可以采用opengl纯软件方式,也可以采用硬件方式。
所以,在Android底层会对目标硬件有一个适配的过程。这个是传统的Linux内核所不具有的。

论坛徽章:
0
29 [报告]
发表于 2014-04-30 10:53 |只看该作者
1、您的Linux驱动开发的经验之谈
Linux驱动开发,其实吧东西并不是特别多,主要就是了解设备模型,驱动模型,以及能看懂datasheet,看懂原理图,基本可以上手
一般是先上电,在根据datasheet去设置时钟,中断等,相关的操作在IC手册中都已经有很好的描述了
Linux已经将框架都写好了,照着原有的框架套用就可以了。

2、传统的Linux驱动开发和Android驱动开发有何区别,如何转为后者?
传统的Linux驱动开发和Android驱动开发,其实Linux部分我感觉没啥区别,现在好多android下的优势的东西都已经可以在pc上用了,例如PM之类的。
Android驱动开发在Linux部分差别不大,但是在HAL部分可能就稍显明显了,例如camera驱动开发,一般是在HAL和Driver之间,有一个vendor部分,vendor部分其实可以理解为pc下面直接操作/dev/下面的设备节点的东西,camera部分的isp3a方面的操作一般是在这里面操作。其实好多关键的东西都在这里面;
有些硬件平台有点差别,例如异构的平台,有modem部分系统和Linux部分系统,好多纯粹的硬件操作都是在modem系统部分操作了,Linux只是通过rpc从对应的内存空间取数据就可以了。

总结,Android设备驱动开发与传统Linux设备驱动开发,差别不大.

论坛徽章:
0
30 [报告]
发表于 2014-04-30 22:28 |只看该作者
Android设备驱动脱胎于于Linux设备驱动开发,因此懂Linux设备驱动,再转Android驱动会方便很多。这就好比数学好的话,学物理也会占很大便宜是一个道理。

另外,有网友将Android与QT相比。我也认同它们确实是一个层的东西。但QT没有能像Android一样的发扬光大,有没有得到Google之类大公司支持,和时间窗口的原因,是否也有自身的原因,比如架构的设计上有所欠考虑、开发者、原厂和用户几方间的利益协调不够通畅等。

本人有幸经历过QT-》Windows Mobile-》Android的智能手机系统的变迁,可以看到时代是在进步的,技术也是进步的。老的知识我们没有必要贬低,新知识我们也没有必要过于排斥,新老之间更多的是融合,因而铸就了新技术与新系统的强大。如果不是基于Windows COM组件思想,google估计也不敢动借Android构建一个移动虚拟帝国的梦想。

评分

参与人数 1可用积分 +6 收起 理由
send_linux + 6

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP