嵌入式驱动开发要具备哪些方面的知识
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式驱动开发要具备哪些方面的知识相关的知识,希望对你有一定的参考价值。
我是最近才接触嵌入式的,想问一下嵌入式驱动开发需要除了C,C++还有哪方面的知识,希望高手指点。还有是驱动开发不是应用开发。谢谢大家了。
嵌入式驱动开发需要了解的知识大概有以下几类:1 嵌入式操作系统驱动框架。每一个操作系统都有自己的构架,应该了解驱动在整个系统中的具体位置与构建驱动程序的主要事项
2 总线知识,比如PCI、USB总线。
3 芯片知识。驱动其实就是对设备上一些寄存器的配置、CPU与设备本身的通讯以及对不同命令的处理
4 要做好驱动,必须对所使用的CPU体系结构有一个比较深刻的认识
5 C++基本用不上,主要是C和汇编。
6 做驱动最好要懂内核调试(比如说linux) 参考技术A 要学好驱动开发,要学好以下基础知识:
熟练使用Linux操作系统,具有一定的Linux内核阅读经验;
熟悉C语言,熟悉指针、结构体等概念;
了解接口电路和数字电路的知识,最好具有电路设计经验。
关于嵌入式领域内的相关专业问题,建议LZ到华清远见的网站上了解一下,也可以具体电话咨询一下华清远见的专业老师,另外,各大书店及图书馆也有华清远见出版的畅销嵌入式专业图书,了解一下相信对你有帮助! 参考技术B linux编程知识(指令)
1.输入输出,文件,文件夹
2.字符串,数据结构,堆栈,链表,(查找)算法,二叉树 3.线程: 线程属性,线程同步(锁,信号量,条件变量) 4.进程:守候进程,进程通信-管道,信号,SystemV(消息,共享内存,信号灯),读写锁,套接字 5.网络:socket,ftp客户端,tftp客户端,http server,snmp命令
6.环境变量,库默认搜索路径,arm-linux-gcc库路径,设置搜索路径,编译流程,lds文件,内联汇编
7.gcc ,ld, ar, ranlib, objdump, readelf, objcopy工具 8.make makefile 9.shell,perl
10.设备编程v4l,lcd和overlayer2,串口,并口, mixer, dsp, adc, ts ,mouse 等等东方赛富的免费在线教程 参考技术C 还有微型计算机原理和操作系统两方面的知识。
学嵌入式Linux软件开发需要的知识
首先,我得声明嵌入式Linux的内核很重要,非常非常重要!但是这个东西如果你没有一定的基础,还是暂时不碰为好。因为想知道它的工作机理,你必须具备N多知识才可以的。弄明白内核(包括驱动和协议栈,以及内核工作机制)你至少需要操作系统原理、体系结构、微机原理、ARM体系结构、网络原理、数据结构、C语言、数字电路技术方面的知识;当然这些还远远不够,你还需要了解很多细微之处;这里就不打算多举例了,在这方面有兴趣的同学在学校开设课程不完备的条件下你很容易走上一条死路,一定要慎重! 其次,我不建议新手以一个万能的超人方式来学习嵌入式(有人说嵌入式是程序界的特种兵,啥啥都会,上述观点我只是部分赞同),嵌入式不是计算机专业的专利,在很多年前,嵌入式根本就不是计算机专业的人能玩的;因为它是一门跨专业学科的行业,以前一直电子和通信两家独有。随着硬件技术越来越成熟,慢慢地才把嵌入式开发的精力从硬件中解放出来,逐步转移至软件开发方面,尤其在智能系统的使用上,软件开发层面的任务也越来越多,逐渐向大规模软件方向发展。所以,软硬方向二者选一是非常合理的! 再次,一旦你确立了软件开发作为自己的发展方向,那么你选择一个嵌入式系统就是当务之急的问题了,我建议你选择Linux,因为它是完全开源的,很多东西错了你就能直接查找到原因,不依赖他人而直接解决;否则只能向厂家报告BUG了。这个Linux还有一个非常明显的好处,就是你一旦达到了某种高度,你在看其它系统如WINCE、Symbian等,你也不会对它感冒的,因为你已经知道他们的GUI等关键技术的大体原理了。 最后,选择了Linux之后,你就必须熟练地使用C语言,熟悉你使用的Linux系统;切记开始从浅滩入水才能到深海的道理,否则直接入深海你必然会被淹死的。“先会用,后会做,最后会创造”,这个过程一定要好好把握,切勿超之过急! 学习嵌入式Linux设计需要的细节很多,不过这都不是问题,关键在于你的心态!那么我常说的,如果你能自己写个GUI系统的话,那你将会很通透的理解嵌入式Linux的构架,也会很深刻的明白嵌入式Linux软件开发的精髓。 DIY的GUI系统需要的知识: 1、系统提供写屏幕的/dev下的文件名是哪个?文件操作如何和类似二维数组的LCD一一对应? 2、一个图形界面需要的是格式问题(8位、16位、24位、32位),这些格式如何写入数据? 3、如何在LCD上画一个点,并且能很好的兼容各种格式? 4、当有多个进程或线程向LCD写入信息时,如何避免写入冲突? 5、触摸屏和鼠标操作相似吗?如何编写类似鼠标的操作呢? 6、解决了画点的问题,那你能根据画点的方法,写出画线、画框、画圆和其他形状的方法吗? 7、能根据你解决的触摸屏问题和画点、线、面等方法绘制一个类似Windows界面的GUI吗? 8、多个GUI界面直接叠加如何解决?那事件响应呢? 9、特殊GUI组件你怎么设计,如对话框、按钮、文本框。。。。。。他们表现方式可不一样啊 10、当组件在某个顶级窗口上出现时,一但被其他组件覆盖,你如何进行裁剪? 11、你如何编写组件被触发时所需要执行的事件机制? 12.、组件之间的消息机制是如何传递的,你是如何处理的? 13、文字显示你怎么办?很多组件需要文字标签,你是怎么解决的? 14、若一个项目需要多个程序分别运行才能完成,那么这两个程序一旦都是GUI的,他们之间的显示还能层叠和有效防止这两个程序写入LCD时不发生冲突吗?你设计之初的构架合理吗? 当你把DIY的GUI系统做完,你突然发现原来原来原来一切一切一切是这样的道理啊,这时候再看WINDOWS你突然发现,你能解释以前你无法明白的现象了!这个时候,你已经得小道而成小仙啦! 接着你可以尝试狂暴而有趣的移植技术,把你看到的,分析后能够移植的东东都移植过去,权当练习!此时你已经默默地把网络(Socket)、数据库(SQLIT3)、多媒体(....)都玩了一遍,可以了!可以考虑做像样的项目或去搞内核研究了。其他的系统,我估计你只需要最多2个月,你就知道如何使用和开发了。一切将变得VERY EASY! 大道至简,小而蕴真!
以上是关于嵌入式驱动开发要具备哪些方面的知识的主要内容,如果未能解决你的问题,请参考以下文章
驱动开发读书笔记. 0.06 嵌入式linux视频开发之预备知识