免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
11 [报告]
发表于 2014-04-26 02:40 |只看该作者

1、您的Linux驱动开发的经验之谈
     Linux驱动的开发主要还是在掌握模型,其实总结起来Linux下有三类驱动,字符驱动,块驱动,网络驱动,这个是根本,但是在有平台驱动和总线驱动,这种高级点的概念,现在驱动模型已经很成熟了没个类型的驱动都包括两个或三个层次,在实际写驱动时,我们只把最下边的层次做好就行了。但是由于驱动和内核联系紧密,所以我们对驱动的层次结构和内核的技术也要有比较好的了解。学习linux驱动可以先阅读下比较经典的驱动书籍,同时多看看代码,当然练习是必须的。这个不能省。尽量找些资源,多练习,多尝试。所有知识要想消化到自己的肚子里,必须多练习。

2、传统的Linux驱动开发和Android驱动开发有何区别,如何转为后者?
     传统Linux 驱动开发 和Android 驱动开发区别不大,但是由于Android在Liunx驱动之上又做了一次封装,所以区别的部分关键在这里。这个封装是android的秘密所在,
它被包含在framework里分为两个部分 -- HAL 和 JNI 。
     如果你有时间研究下就会发现,HAL 其实就是类似Linux下应用的结构,只不过是换了个名称,结构上稍微有些不一样,但是实质是一样 比如打开设备文件,有open、close、ioctrl 等典型方法。
     JNI 是java native interface,也就是Java 和 C 的桥梁,有了它就可以再java程序中调用c的代码了,其实它也是HAL 的又一层封装。有固定的模式。

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
12 [报告]
发表于 2014-04-26 10:05 |只看该作者
lininglive 发表于 2014-04-26 02:40
1、您的Linux驱动开发的经验之谈
     Linux驱动的开发主要还是在掌握模型,其实总结起来Linux下有三类驱 ...


感谢参与,这都是半夜干活的主啊,呵呵

论坛徽章:
0
13 [报告]
发表于 2014-04-26 10:53 |只看该作者
呵呵,可能大家白天都忙吧,只有晚上才得有空。很高兴能在这里与各位Linux与Android资深专家们们一起讨论。

看来大家共同认可HAL是Android与Linux的驱动的第一大区别。
诚如楼上lininglive所述,在HAL会有许多关于基于标准Linux驱动 VFS的访问操作,这是必须的。但大家仍然把HAL理解为驱动的一般,是因为其通过底层驱动收集了I/O数据,在HAL往往还需要做一起处理,再向上层应用提供相应的服务。一个典型的例子就是3D显示引擎,图像数据在通过显卡(Android里应是显示控制器)输出之前,繁杂而费时的三维图像运算工作就可以放在HAL中实现。这应是HAL更核心的价值所在,有效地保护了开发厂商的核心利益,又不会太混淆应用和其它开发者的视听。

如有偏颇,请大家拍砖。

论坛徽章:
17
戌狗
日期:2013-09-02 23:43:02技术图书徽章
日期:2014-04-29 14:16:02技术图书徽章
日期:2014-04-24 15:51:26未羊
日期:2014-04-06 22:10:30丑牛
日期:2014-04-06 21:23:29辰龙
日期:2014-04-06 21:20:22处女座
日期:2014-04-06 21:16:18技术图书徽章
日期:2014-04-02 15:10:51金牛座
日期:2014-03-10 22:26:18巨蟹座
日期:2014-02-17 17:12:12技术图书徽章
日期:2014-01-24 10:38:43摩羯座
日期:2013-11-29 18:00:18
14 [报告]
发表于 2014-04-26 12:10 |只看该作者
Android 开发是目前最有前景的行业。支持Android 系统发展。

论坛徽章:
208
巨蟹座
日期:2013-09-02 09:16:36卯兔
日期:2013-09-02 20:53:59酉鸡
日期:2013-09-05 21:21:45戌狗
日期:2013-10-15 20:51:17寅虎
日期:2013-10-18 21:13:16白羊座
日期:2013-10-23 21:15:19午马
日期:2013-10-25 21:22:48技术图书徽章
日期:2013-11-01 09:11:32双鱼座
日期:2013-11-01 20:29:44丑牛
日期:2013-11-01 20:40:00卯兔
日期:2013-11-11 09:21:32酉鸡
日期:2013-12-04 19:56:39
15 [报告]
发表于 2014-04-28 09:26 |只看该作者
这个话题不错,但是可能差异还是不大吧

论坛徽章:
0
16 [报告]
发表于 2014-04-28 09:37 |只看该作者
1、您的Linux驱动开发的经验之谈
     从玩单片机转过来的人。感觉linux驱动就是把对硬件的操作套入linux的驱动模型了。这事参考着同类型的源码做过一两次就感觉没有什么难度了。但linux的驱动-总线模型还是挺复杂的,还好网上资料多。慢慢学习吧。

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

   

论坛徽章:
0
18 [报告]
发表于 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
19 [报告]
发表于 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
20 [报告]
发表于 2014-04-29 13:14 |只看该作者
回复 13# hongduna


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP