木小蹬蹬民
你好首先我要说明的是我是ARM嵌入式开发工程师 偏驱动方面的虽然两个架构不同,但是原理是一样的C语言不说你也知道重要性,注重linuxC编程,重点是字符串处理还有linux 驱动的相关书籍你必须看 而且要熟!多看IC DATASHEET你不会看DATASHEET证明你已经不行了!!!!!数字电路你必须懂 而且知道的越多越好,我写PWM驱动项目的时候吃过数字电路的亏还有你要多写驱动,从最简单的驱动开始写,例如单个按钮驱动,只要你会写一个类型的驱动这就说明了所有类似的驱动你都行还有一个方面的是内核!内核很重要,不要你能编写内核,但是你一定要适应内核懂内核,内核的工作模式,因为你写的驱动分分钟内核都不鸟你(就是不兼容)!驱动工程师 路漫漫其修远兮!
疯中之子
你首先需要了解WDM和WDF的驱动framework和他们的具体工作流程,windows的DDK有大量的例程,你可以作为参考和起始点。然后你需要理解你要做驱动的总线架构和芯片的具体spec,这样的话,你才能知道怎么才能进行控制操作和数据传输。最后你需要了解windbg软件的使用,只有你了解了debug的技术,你才能有效的分析你软件的问题和解决问题。实践出真理,多动手。写一些filter驱动和USB,BT之类的软件,对于提高你的水平也是很有帮助的。
chongyanyuan
嵌入式底层开发,需要你精通c语言,c语言可以操作底层,其次,你要熟悉汇编,很多东西比如程序怎么执行的,需要你反汇编之后才能知道。你还需要了解,arm体系结构。uc的的知识,你也需要知道,用户空间的编程基本是用uc写的,学习uc,建议买本书。uinux高级环境编程,把这本书学好了,用户空间的编程基本没问题,建议你初次学习编程,买本嵌入式驱动的书看看吧 希望可以帮到你,望选为满意回答
嵌入式驱动开发需要了解的知识大概有以下几类: 1 嵌入式操作系统驱动框架。每一个操作系统都有自己的构架,应该了解驱动在整个系统中的具 *** 置与构建驱动程序的主要事项 2 总线知识,比如PCI、USB总线。 3 芯片知识。驱动其实就是对设备上一些寄存器的配置、CPU与设备本身的通讯以及对不同命令的处理 4 要做好驱动,必须对所使用的CPU体系结构有一个比较深刻的认识 5 C++基本用不上,主要是C和汇编。 6 做驱动最好要懂内核调试(比如说linux)
计算机组成技术,单片机原理及开发技术,C程序设计,计算机操作系统,硬件驱动主要是和底层的接口,学习一下模拟电子技术和数字电子技术最基础的内容就好。
嵌入式驱动以及嵌入式Linux内核开发主要用的都是C语言,JAVA是基于上层开发的语言,而C是基于底层驱动开发的。所以如果想要做好嵌入式驱动开发主要是要把C语言基础打好,这样对以后的发展会有很大帮助的。再则需要了解一点硬件方面的知识,例如单击片或者开发板和开发软件工具使用。下面就由福州卓跃教育具体介绍如何学习嵌入式驱动。
如何开始学习嵌入式驱动开发? 是每个想学习嵌入式驱动开发初学者的第一个问号.由于嵌入式开发较上层类软件开发的特殊性,如果没有相应的仪器设备及一个很好的环境,对初学者来说简直就是梦魇,如果没有相应的指导,可能就要多摔几个跟头和多消耗一些脑细胞,因为驱动开发不像上层类的开发那么直观,写个程序就可以在PC机上直接查看了,驱动开发只有烧到板子上才能验证。
嵌入式驱动开发需要了解的知识大概有以下几类:
1 嵌入式操作系统驱动框架。每一个操作系统都有自己的构架,应该了解驱动在整个系统中的具 *** 置与构建驱动程序的主要事项
2 总线知识,比如PCI、USB总线。
3 芯片知识。驱动其实就是对设备上一些寄存器的配置、CPU与设备本身的通讯以及对不同命令的处理
4 要做好驱动,必须对所使用的CPU体系结构有一个比较深刻的认识
5 C++基本用不上,主要是C和汇编。
6 做驱动最好要懂内核调试(比如说linux)
另外嵌入式开发涉及的知识面还是非常多的,包括选型的CPU类型和他的体系结构,CPU上提供的外围接口,以及为某个特殊功能而加入的外围设备.这些是一个合格嵌入式开发人员需要掌握的最基本的知识。
对我们作为嵌入式开发提出了更高的要求,重要的一点是嵌入式开发多是看不到摸不着的东西,相对来说非常的抽象,所以这时候就要借助一些测量设备来协助我们,比如基础的万用表,示波器,电流计,频率计,Trace32等甚至一些为方便开发自己做的一些小工具,当然不限于硬件和软件的.
1、国内的书内容都差不多,相互抄来抄去。 国外的书质量虽然高,但是一般人阅读速度吃不消。 不过,还是建议读国外的书(如果有时间的话),长痛不如短痛。 2、不一定非要有开发板,可以用skyeye等软件模拟。 但是,软件模拟和实体机肯定是有区别的。还是建议选一块开发板。 3、ARM板是个硬件,可以用来学习WinCE、Vxworks、Linux、uCos等等系统开发。 可以用来学习以上系统的驱动和应用开发。 Linux驱动分两块内容:学习硬件工作流程(单片机程序), Linux驱动上层结构 (platform、mtd、字符设备、块设备、网络设备、各种总线 等上层结构) 4.前景大大滴好,但是道路十分之曲折。 要有心里准备,得有文火久煨的毅力。
看你的兴趣应该是软件方面的,没什么特殊要求,基础知识扎实就行,编译原理,操作系统原理,C/C++,数据结构等课程要好好学!
做嵌入式应用的话一般的编程就可以了。那么嵌入式驱动开发与内核开发的话就需要学习多个方面的知识。我就把这方面的要求给你交流一下: (一家之言啊,自己多年从事嵌入式开发的一点感悟) 嵌入式驱动开发需要了解的知识大概有以下几类: 1 嵌入式操作系统驱动框架。每一个操作系统都有自己的构架,应该了解驱动在整个系统中的具 *** 置与构建驱动程序的主要事项 2 总线知识,比如PCI、USB总线。 3 芯片知识。驱动其实就是对设备上一些寄存器的配置、CPU与设备本身的通讯以及对不同命令的处理 4 要做好驱动,必须对所使用的CPU体系结构有一个比较深刻的认识 5 C++基本用不上,主要是C和汇编。 6 做驱动最好要懂内核调试(比如说linux)
从基础来,入门后分向硬软两个方向偏重: 基础:计算机基础,数据结构,软件工程,C编程,C++原理,单片机原理,微机原理,计算机体系结构 软件偏重:Linux系统编程,软件工程高级,操作系统 硬件偏重:数字电路,FPGA,电路设计,自动控制
嵌入式开发工程师,严格意义上还会分为应用开发、QT开发、底层开发工程师等。所做的工作,在整个嵌入式开发体系里面是不一样的。南京有一家培训机构叫英贝得嵌入式学院,好像在南京雨花软件园,你上他们官网英贝得教育向老师了解一下,了解一下就可以了。
人艰不拆XP
首先要定义,我所认为的一个优秀的驱动开发工程师,应该具备什么样的能力,这里列一下按照从易到难的顺序,个人认为应该会有几个方面的要求吧: 能够独立完成驱动的功能开发任务能够分析和优化驱动的性能,针对特定硬件扬长避短能够充分了解模块相关软硬件能力、发展方向,辅助应用工程师最大化利用硬件能力能够辅助硬件工程师规划硬件设计,预防问题,谋求功能模块的最佳方案能够协助定义系统架构,合理规划软硬件,谋求产品实现的最佳方案 作为一个驱动工程师,很多时候不是完全从头开发一个完整的子系统,而是针对特定硬件和平台移植驱动,增加功能,解决Bug等等,如果从这方面外在的表现来看: 解决问题的境界,大概会有这么几个阶段: 不知道哪里存在BUG 不知道如何解决BUG 知道如何解决BUG 知道如何发现BUG 知道如何规划BUG 知道如何发现BUG(而不是撞上BUG)其实并不简单,需要你对系统有足够的了解,能够察觉可能出问题的地方。而规划Bug更难,需要你能对问题的轻重缓急做出准确的判断。没有的完美的世界,只有适当的取舍,规避和预防。 而从解决问题过程的角度来看,我认可以分为几个阶段: BUG发生 -> 大量跟踪调试代码 -> 终于发现并解决BUG BUG发生 -> 理论推测可能原因 -> 迅速定位并解决BUG 阅读代码 -> 预测可能出现的BUG -> 证实并解决BUG 号称能光凭瞄一遍代码就找到问题的高手,我想我是没希望了。 应该具备怎样的素质 那么要达到上诉最佳境界,需要具备和发展哪些素质和能力呢? 足够的硬件知识 能看简单的原理图,能够分析硬件异常的可能原因,能够使用常见的硬件调试工具,我想这是做为优秀的驱动工程师,区别与其它软件工程师,所不可避免、必须具备的专业素质。当然取决于你具体从事的工作,对这方面的要求不尽相同。 对于驱动开发者来说,不了解所开发驱动外设的硬件原理和相关背景知识,也许很多时候,也能够完成一些移植,修补的工作任务,但这就好比无源之水,无根之木,我相信是很难走远的。 多多益善的操作系统知识做驱动开发,特别是纯粹的外设的驱动移植工作,刚开始的时候,也许你并不需要了解很多操作系统本身的知识(像内存管理,进程调度,锁,各种内核子系统的原理框架等等),也能顺利完成手头的一些工作。 但是,如果一但需要优化驱动,需要完善软件框架,或者是遇上疑难问题需要跟踪解决,对操作系统,内核本身的了解,就体现出它的价值了。 对于Linux内核驱动开发者,尤其如此,首先,代码是完全开源的,你有条件去了解背后的运行机制,其次,Linux内核和各个组成子系统总是在迅速的进化发展中,不进则退,你也有必要跟上时代发展的脚步。 强烈的好奇心,持续的热情如果驱动开发不仅仅是你的爱好,更是你养家糊口的途径,我想,很多时候,你大概不会有机会专注于一两个你最有经验的模块的开发和维护。随着能力的成长,势必会要求你接触和掌握越来越多的各式各样的驱动模块的开发。 对于这件事,包括我自己,有时候大概都会有如下几种反应: 哇,原来的工作做太久了,太乏味了,很高兴能做不同的工作。 啊?又要做别的模块啊?我手头的工作已经太多了!这个模块没意思,我不想做。 相信多数有志青年们都是第一种表现了 8 )不过,有些时候,我发觉,很多人的这种热情其实并不持久,一个新的模块没做多久,就再次厌倦了,是已经炉火纯青了么,未必,或许只是修改了几个BUG以后不甚其烦。很多时候,我面试前来求职的工程师时,发现简历上这个也做过,那个也做过,但是一但问到解决了什么问题,所做过的驱动,框架、流程、原理之类的问题的时候,就一问三不知了。 我觉得如果自己的目标是优秀,那么最起码的标准应该是对具体驱动模块相关的子系统的整体工作流程,框架,具备足够的好奇心,乐于去了解和学习,而不仅仅是为了完成任务而工作,否则的话,很难积累下扎实的经验和技术。 清晰的逻辑思维能力 这一点,也许是个软件开发人员都应该具备吧,不过,做为驱动开发工程师来说,有时候,大多数情况下,工作的硬件环境并不是完美的,遇到问题需要分析判断错误的原因是硬件问题还是驱动Bug,这时候,清晰的逻辑思维能力尤其重要。 良好的工作习惯 大多数人都不是天才,要成为优秀的开发工程师,一需要持续努力,二需要时间积累经验,而这过程中,很重要的一点,就是要有良好的工作习惯。譬如,注意设计文档的维护,对工作中遇到的问题的记录,过往经验的及时记录,适当的软件开发流程等等。文档工作,可能很多人很不愿意去做,它的确很花费时间。不过,唉。。。老啦,好记性不如烂笔头啊 8 )。当然,其实设计文档更多的是为你提供思考的机会,而过往经验的总结,也可以起到和大家交流技术,共同进步的目的。 英语 这个也是必须的啦,没有办法,邮件列表,技术文档,社区,精通英语肯定是很大的优势,做开源项目尤其如此。阅读各种Spec标准文档之类的速度还是很重要的。阅读无障碍是一回事,能和母语一样一目十行,那才爽呀,唉,人生苦短,效率啊!光读文档,就不知道要比老外多花多少时间。。。。了解更多开源相关,去LUPA社区看看吧
优质工程师考试问答知识库