随着智能手机的飞跃发展,特别是Android智能机的爆炸性发展,Android驱动工程师是越来越受欢迎的一个职位,而且是一个非常值得人期待的职位,因为可能你参与研发的一款手机就能改变了很多人的生活,所以,进阶吧,Android驱动程序猿,那怎样成为一名优秀的Android驱动程序猿,我来发表一下我的意见吧,希望各位网友不要轻易拍砖。
Android驱动的基础知识
首先作为Android驱动程序猿,你必须清楚的了解你要做的是什么,平时需要用到的基础知识,对Android的基本框架的了解还是非常的有必要,对linux下的编程基础也需要了解,因为严格来说,Android驱动是基于Linux驱动,个人强烈推荐阅读Linux Device Driver 3rd版,这本书讲了Linux下设备驱动的基础知识,作为Android驱动程序猿,你需要能最好读懂这本书,而且是反复的阅读这本书,因为我发现每次重新读这本书,都有新的收获,这本书很值得一读,强烈五星级推荐;而且还要会基本的C编程,能很好的读懂和编写一些C程序,而且懂一些基础的Java那就更好了,因为Framework层的代码与驱动层的代码联系也比较紧密,稍微懂一些Java代码,你会发现你对整个驱动框架的了解会更加的熟悉,相关的Linux编译脚本和Linux编译体系,因为商业开发的一些原因,Android本身的文件架构体系可能会被一些编译脚本而改变,加入新设备驱动,你需要了解整个的驱动编译体系,那样书写驱动程序也会更加的清晰!
Android/Linux相关驱动框架知识
为详细了解一下Android驱动程序员需要会的技术,我特意了各家Android驱动程序员招聘需对Android程序猿的要,选择哪几家呢,国产手机的代表,中兴,华为,酷派,联想,小米,魅族,VIVO都是非常不错的国产手机厂商,而且研发的Android智能手机越来越好,我甚至还专门去看了一下新兴Android智能机公司,包括锤子手机官网的Android驱动工程师招聘需,One Plus One的官网连个加入我们的链接都木有,创业型的公司不知道是人才暂时饱和,还是啥原因,居然没有招聘信息,汇总发现,这些公司要差异不是特别大,出了需要基本的Android调试能力,你还需要对Android各模块驱动框架的了解,比如,某锤科技的Android驱动工程师招聘需,大伙可以去试试,锤子手机号称是在做最好的手机,比目前的旗舰手机都要好一点点,加入它,还蛮有期待的! 某米公司的Android驱动工程师也需要Android/Linux相关的知识,中兴和联想的Android招聘需就比较笼统了,估计是大公司的缘故吧, 中兴的官网居然开始找不到驱动工程师的招聘,我的个神,废了我好大劲,才找到相关的招聘信息!
相关的硬件知识和通信知识
Android驱动平时工作就是调试各种外围设备,是直接跟硬件打交道的职位,需要你看的懂电路原理图,了解基本的显示原理和基本的摄像头成像原理等等,这是跟你平时工作非常相关的基础知识,做Android智能手机,你也需要了解基本的通信相关知识,射频原理和基本的Modem相关知识,只有懂相关的硬件知识和通讯设备相关的基础知识,你才可以写出更好的Android驱动程序,才能调试出更满意的效果!
热爱驱动开发和不断学习
其实这点是非常的重要,应该摆在第一位,首先是你必须喜欢这份工作,你才可以做的更好,兴趣是最好的老师,这句话是真心的大实话,而目前的社会状态是什么赚钱,就一窝蜂的冲去做那个,结果,最后可能做的很不开心,然后,钱也没捞到;如今,我的大学同学很有一部分都放弃了所学的专业对口工作,有去卖保险的,有去工厂做普工的,有去做销售的,有去吃铁饭碗的,当然职业肯定不分贵贱好坏,我说这一点,主要是建议大家去坚持最初的梦想!我的梦想就是做出一款可以改变人们生活的移动终端,让这个世界因为我而有一点点的不同,童鞋们,一起坚持梦想吧! 此外,做Android驱动工程师需要的是不断的学习,时刻保持着一股激情,不断的学习才能更好的完成日常的驱动开发任务,并能保持对开发的的敏锐感觉,我觉得乔布斯的:Stay hungry,Stay foolish说的很好,一直被当做是我的座右铭,来激励我坚持做一个更好的Android驱动工程师,写这篇博客的目的就是分享我的一些小看法,日后我还是会不断更新我的博客,分享一些驱动开发相关的文档和博客,和广大的驱动程序猿一起进步!
你这个离得还太远了,现在说内核驱动这些有些过早了,这个学习周期非常的长。
内核驱动编程并不是什么高深的知识,无非也是按照系统的API,框架去做代码罢了,只是这些东西,提供了更接近于底层的功能,在某些情况下对程序的构架更加有利效率更高而已。没有创新性的东西是无所谓难度不难度的,照葫芦画瓢而已。
从哪里学起,基本路线 语言-》算法-》框架机制&WINDOWS程序-》系统内核实现等。
下面说的一些内容都有一个共同的前提,就是不断的去写代码,调试代码,否则说什么也是白搭的。我曾经一个操作系统的老师的一句话是“看了书叫你做,做不出来就是没学懂”
第一个阶段:鉴于你现在已经提了一个方向了,那选择的语言自然是C和C++,两门都需要,现在WINDOWS内核是混合的,从这个角度来说也必须两门都熟悉。相关书籍,国内的可以买谭浩强的C和C++书,比较简短,适合上手,然后C++ PRIMER这种从C++的思想去讲解C++的书也可以翻一翻。然后为了C和C++的基础扎实一些,可以看例如EFFECTIVE C++/MORE EFFECTIVE C++/C语言陷阱等等类似的书,都是从语言的层面去解释一些经验和技巧,注意,这里的内容没有涉及一点点技术,只是最基本的语言基础。
为了方便后面的学习,这个阶段应该学习计算机的基础课程,数据结构,计算机网络,操作系统,数据库原理,组成原理等等,甚至包括一些高等数学,离散数学的基础。这个要视你的情况而定,非常重要,对进一步发展影响很大。
第二个阶段:WINDOWS程序,熟悉WINDOWS程序的实现机制,例如消息响应,事件处理这些都应该明白底层是如何实现的,而不只是知道一个概念而已。相关的包括WINDOWS SDK,MFC框架等,书籍有《WINDOWS程序设计》(微软那本1300页的书,虽然很厚,但这本无非是该领域的经典,当然国内的也有不少,但是都是写的比较浅显,很多地方一笔带过),《深入浅出MFC》《VC技术内幕》等,这些都是讲解MFC底层实现机制的书,比起教你如何去拖控件,更有实际价值。>这个是讲解SOCKET的,其实这方面内容一般WINDOWS程序的书都有涉及,但是很多人还是不明白,为了熟悉一些,还是有必要看的。驱动程序,这个只是在WINDOWS的一个固定框架下去做,没什么大不了。
第三个阶段:内核相关。由于WINDOWS不开源,所以没有代码可以看,好的是现在又REACTOS这种仿WINDOWS的系统是开源的,可以看看代码的实现,熟悉操作系统是怎么运行的。这些东西很多涉及到了安全相关的机制,要靠自己去琢磨。
除此之外还应该明白编译器如何编译,链接器如何链接,操作系统如何加载文件,WINDOWS如何管理内存等等无数的相关知识,这些不会对你的程序造成直接价值,但是间接价值无限。在学习的过程中,应该明白一些基本的解决问题方法,设计模式什么的,这些东西才是真正的技术。我估计你要做点什么研究很困难了,不过上面这些也足够了。
现在很多人一学习就要系统的学,但是你也要明白这样的代价。前面进步很慢,学习周期很长,很难坚持下来。学到什么程度?学会了能够拿来用,做的出来说的出道理就可以继续后面的学习了,别要用了几年的NEW,还不知道NEW做了些什么。
展开全部
1. 那么究竟什么是驱动程序,它有什么用呢:
l 驱动是硬件设备与应用程序之间的一个中间软件层
l 它使得某个特定硬件能够响应一个定义良好的内部编程接口,同时完全隐蔽了设备的工作细节
l 用户通过一组与具体设备无关的标准化的调用来完成相应的操作
l 驱动程序的任务就是把这些标准化的系统调用映射到具体设备对于实际硬件的特定操作上
l 驱动程序是内核的一部分,可以使用中断、DMA等操作
l 驱动程序在用户态和内核态之间传递数据
2. Linux驱动的基本框架
3. Linux下设备驱动程序的一般可以分为以下三类
1) 字符设备
a) 所有能够象字节流一样访问的设备都通过字符设备来实现
b) 它们被映射为文件系统中的节点,通常在/dev/目录下面
c) 一般要包含open read write close等系统调用的实现
2) 块设备
d) 通常是指诸如磁盘、内存、Flash等可以容纳文件系统的存储设备。
e) 块设备也是通过文件系统来访问,与字符设备的区别是:内核管理数据的方式不同
f) 它允许象字符设备一样以字节流的方式来访问,也可一次传递任意多的字节。
3) 网络接口设备
g) 通常它指的是硬件设备,但有时也可能是一个软件设备(如回环接口loopback),它们由内核中网络子系统驱动,负责发送和接收数据包。
h) 它们的数据传送往往不是面向流的,因此很难将它们映射到一个文件系统的节点上。
以上是学习Android设备驱动开发的方法的详细内容。更多信息请关注PHP中文网其他相关文章!