韦东山谈Linux设计与开发

韦东山谈Linux设计与开发
韦东山谈Linux设计与开发

网址:

https://www.360docs.net/doc/a26355103.html,/forum.php?mod=viewthread&tid=453846&pag e=1&extra=

1、电子发烧友:大家都比较想了解您个人学习的历程与感想,可否与大家分享一下?

韦东山:

我从2003年开始工作,那时候的技术真是差劲啊:直到2005年,在硬件方面我只会设计两层板,在软件方面我用的一直是51单片机。有一次老板的朋友来做技术指导,聊起ARM、wince、Linux、操作系统,让人真是大开眼界。

操作系统才是未来!必须改变!

在硬件方面没人指导很难有长进,但是软件方面我可以自学啊。于是我开始买各种ARM的书,买周立功的2104板和书,用它来学习过UCOS,感觉他们还在延续着单片机的思路。这不行啊!得上操作系统!学WINCE?还是学LINUX?WINCE可是要钱的,咱学个免费的LINUX吧。买个S3C2440开发板,就这样开始了LINUX的自学之路。

多谢友善之臂的老板杨斌,我买的是个二手的2440开发板,他还是认真的提供技术支持,那时我没少请教他问题。他应该发达!

2005年那会,嵌入式LINUX方面的书是没有的,所以我的学习过程完全依赖网络、论坛,现在回首那个时候的提问,可以发现很多幼稚问题(特意去试了下,我才发现那个网站已经关闭了,世事难料啊)。

工作后再难有在校时的心态与大段时间……,直到公司倒闭……,我于是回老家闭门学习半年。在外租房,有家不回;没日没夜,不是在电脑前就是在床上,要不就是去吃饭的路上;自学、翻书、发贴、编程试验、问题解决不了时苦闷得想砸电脑;现在回想起来感觉也挺励志的。就这样,用了半年终于入了门,bootloader完全掌握,基本的Linux驱动会写了,钱也用完了,要出来工作了(想想也挺郁闷,大学4年工作2年,竟然技术不过关要回炉重造)。

我没有Linux工作经验啊,怎么办?那就自己写个操作系统混经验值吧,仿照UCOS、LINUX,写一个简单的操作系统:基于MMU的操作系统(MOS)。就用它作为敲门砖,写到简历上去显得有点料。去面试了三家公司,华为惠通、UT 斯达康、中兴,全中!因为钱没了,而中兴的通知来得最早,就去它吧。

说实话,那时我的Linux水平只是刚入门,好在2006年那会中兴也刚从vxwork 转为Linux,大家都不懂都在学习,我倒也不显得丢人。在中兴里,又是没日没夜地工作、学习了2年。期间碰到过无数的疑难问题,煅炼了能力。说真的,只有在解决问题的同时,你才会东想西想,把有关、无关的技术都想清楚并掌握得扎实。

2007年从中兴辞职开始写书。不要笑我只有2年Linux工作经验就敢写书,自学半年工作两年,是这辈子最用功的时刻,远比高考时努力。这2年半所学到的

东西远超大学4年。工作和写书对技术的要求完全不同,工作上你能写出程序解决问题就可以,而写书则要求你对知识理解透彻。书写了1年,也可以认为继续学习了1年。2008年那会还没有手把手教、从零搭系统开始学习嵌入式Linux 的书,这本书《嵌入式Linux应用开发完全手册》又火了一把。

书出了,我也稍有点名气,于是从2009年开始在几个培训机构讲课,去过华清远见、尚观,都是兼职,因为我当时还想着自己创业呢。业没创好钱又没了,只能去兼职。这样又持续了2年,这又是一个煅炼:怎么讲,别人才容易学会。这就是我的学习工作经历,生活推着我在Linux上历炼了9年。如果你还是学生,劝你尽早找到自己的兴趣,全力钻研;如果你已经进入社会,最好能找到相关的工作,白天上班也是煅炼,晚上继续学习。

2、电子发烧友:自从业以来,遇到最大的困难与挑战是什么?能否给我们分享些您的经验以及心路历程?

韦东山:

转行!转行是最困难的,这意味着你前面积累的经验几乎没用了,还需要学习全新的知识──这需要大量的时间。我的第1份工作是做硬件的,后来由于工作需要也写一下单片机程序,但是软件水平是很低的。决定转行学习Linux时,这需要有操作系统的概念知识、全新的ARM体系架构知识、完全没接触过的软件设计理念(写单片机时就是一个while循环,Linux里都是面向对象的思想)。

这千头万绪,要学习的知识很多,从哪里入手,从哪里抽出时间,这就是2个最大的困难。

?对于时间,我是暂停工作闭门自学了半年;

?对于从哪里学习,我是先学习了赵炯的《LINUX内核完全注释》,这让我对操作系统有比较深的认识;接着把ARM开发板当作单片机学习裸板,把bootloader涉及的硬件操作单独写程序试验;最后开始学习驱动程序的编写。从裸板程序开始,直到Linux驱动,这就是我的主要学习方法,这也是《嵌入式Linux应用开发完全手册》的章节顺序。

5、电子发烧友:传统的Linux驱动开发和Android驱动开发有何区别?现在android那么火,它跟LINUX是什么关系?学好了你们的视频,对学习android 有何帮助?你们后续有无录制android视频的计划?

韦东山:

简单地说,Android驱动=Linux驱动+封装。Android应用程序是使用java 编写的,Linux内核和驱动程序是使用C语言编写的,java APP要访问驱动程序,这中间需要插入一个封装接口。核心还是底下的Linux驱动程序;对于封装,

你只要了解了封装规则,基本就可以一通百通了。所以,如果你的目标是掌握Android驱动,那么我们的视频很适合你。我们后面也会讲讲Android驱动的封装,它不会太难。

对于Android应用程序,可以认为它跟Linux的关系不大。即使你没有Linux 知识,也可以在1个月内入门Android应用开发──我只是说,你会开发简单的界面。程序的核心永远是在界面之后,所以不要沾沾自得。比如手机游戏,背后的图像处理算法、游戏的逻辑,这才是重点。如果你的目标是掌握Android应用,我反而觉得你应该跳出“Android”来学习。应用程序的领域实在太多,有网络、图像处理、安全、搜索等等,由你的兴趣来选择方向吧。Android应用只是一个人机界面,把背后的复杂系统展示给客户来使用,如果你只满足于“写界面”,好吧,1个月速成,再花几个月深入理解Android的框架。容易上手的,就容易掉价。前几年Android应用开发由于会的人还不多,工资挺高;这两年就开始往下掉了;要保住你的薪资水平,除了界面你还需要掌握“核心技能”:界面背后的支撑。

我没有打击Android应用的意思,对于急于找到工作的人,我反而建议去学习Android应用。你应聘到工作后,公司自然会压着你去了解产品的相关知识,否则你也写不出界面啊。

6、电子发烧友:工程师一般时间都是比较紧张的,您是在什么情况下写的《嵌入式LINUX应用开发完全手册》这本书呢?这本书是想给大家分享些什么呢?韦东山:

辞职写的。我2005年自学Linux时在网上发布了“S3C2410完全开发流程”的学习笔记,被出版社的编辑看到。他们在2006年联系我写书,那时我在中兴上班。在公司上班期间,根本没有时间写书:工作累个半死,回来哪有精力写。于是决定2007年辞职专门写书。

我学习时,大部分的知识都是从网上搜索得来,这需要耗费巨大的精力去寻找,并且不系统。作为初学者,不知道去搜什么来入门,也不知道搜什么来深入。所以,我想出一套“完全教程”,让零基础的入只看这本书,就可以入门并掌握比较深的、工作中可以使用的知识。

好吧,其实也是被编辑以名利相诱,然后催我写写写!

7、电子发烧友:“电子从业人员的发展方向”大概分为两类:软件工程师、硬件工程师,软件工程师一般又可以分为:底层系统、上层应用。您如何看待这三种方向的职业发展呢?

韦东山:

我刚工作时也曾是个硬件工程师,但是发现没人带的话很难有进步,于是转行做软件了。对于他的职业发展,我也只能简单说说。

不少人问我,到底是学驱动还是学应用?

我只能说凭兴趣,并且驱动和应用并不是截然分开的

? a. 我们说的驱动,其实并不局限于硬件的操作,还有操作系统的原理、进程的休眠唤醒调度等概念。想写出一个好的应用,想比较好的解决应用碰到的问题,这些知识你应该懂

? b. 做应用门槛低,特别是现在的ANDROID,纯JAVA。做应用的发展路径个人认为有两个方向:一是业务纯熟,二是成为某个专业领域的专家。

比如在通信行业、IPTV行业、手机行业,你了解行业的业务需求。所以,当领导的人,多是做业务应用的。另一个方面就是在网络传输、图像处理、人工智能等等领域的钻研,这更多的时候像是在研究学术问题,而不仅仅是写程序。

? c. 做驱动,其实我不想称为“做驱动”,而是想称为“做底层系统”,做好了这是通杀各行业。我工作几年,做过手机、IPTV、会议电视,但是这些产品对我毫无差别,因为我只做底层。他们的业务跟我没关系。

当应用出现问题,他们解决不了时,我就会从内核角度给他们出主意,给他们提供工具。

在实际工作中,写驱动的活反而不多,更多的是从系统的角度解决难题。底层涉及的绝不仅仅是驱动,更多在于"系统":它上接应用,下接硬件。很多疑难问题只能由底层的人解决。做底层的发展方向,个人认为是着眼于整个系统的技术专家。

? d. 其实,做底层还是做应用,之间并没有一个界线,有底层经验,再去做应用,你会感觉很踏实。

有了业务经验或是掌握某项核心技术,你再了解一下底层,很快就可以组成一个团队。

? e. 我建议你上下兼通,做应用让你视野更广阔,做底层让你技术扎实。

? f. 就职位而言,永远是应用的职位多于底层的职位。所以,如果你找不到底层的工作,完全可以先做应用。在工作中把底层的本领也学会。在公司中,那些被称为"系统工程师"的人绝对是上下兼通的

8、电子发烧友:工程师经常在谈如何找一个好的平台,您是如何看待这个问题的?

韦东山:

找平台,这是个技术活,或是个运气活。我有同学一直在腾迅做游戏,估计身家丰厚;也有朋友在公司分股票之前离职。

就我个人经验来说,我先是在小公司上班,后来到大公司,各有利蔽:

?对于技术能力:在小公司里你会成为多面手,软件硬件生产调试你都会插上一脚,如果能潜心学习,对往后发展有好处。我在小公司里设计过硬件,到中兴做驱动时,可以跟硬件工程师一起研究原理图。现在创业了,还可以自己设计产品。在大公司里,每人专门负责一小块,你可以学得深入,并且有各种设计规范。

?对于人际关系:在大公司里,你会认识更多的人,认识各个部门的人,这对今后发展也有帮助。我辞职后接到的猎头电话,都是中兴的同事推荐的。

现在缺乏哪方面的技能,也可以向原来的同事请教。

?对于收入:呵呵,看运气吧。有人被微软拒绝后成为了亿万富翁,有人则终身在微软里写代码;有人创业失败,有人单凭公司年终奖就资产丰厚。

根据你的需求,能承担风险的能力,来选择平台──这似乎是废话,确实是。

社区之星招募:不限专业领域、不限技术方向,只要你是一个有活力并乐于分享的开发者,只要你愿意把自己的经验收获分享给大家,帮助众多从业者共同学习、共同进步,我们就欢迎你来做客社区之星。

联系方式:陈晨chenchen@https://www.360docs.net/doc/a26355103.html,,论坛用户名:zhou2sheng。快来联系小编吧!

往期回顾:

第十七期:社区之星——学霸教你如何考进嵌入式国家实验室

第十六期:社区之星——资深工程师指点:如何走好电路设计之路

第十五期:社区之星——勇于试错,Be Brave

第十四期:社区之星——资深工程师现身:谈谈嵌入式开发的那些年第十三期:社区之星——酸甜苦辣兼有之,资深工程师谈创业之路

第十二期:社区之星——FPGA资深FAE的经验独白

第十一期:社区之星——特权同学从自学FPGA到权威翻译的这五年第十期:社区之星——怎样完成从电子工程师菜鸟到研发主管的蜕变第九期:社区之星——追求卓越,成功就会在不经意间追上你:宋雪松第八期:社区之星——持之以恒:刘卓

第七期:社区之星——天道酬勤:阿东

第六期:社区之星——“剩”者为王:朱兆祺

第五期:社区之星——电源技术牛人版主:刘佳文

第四期:社区之星——嵌入式社区达人:王巧玉

第三期:社区之星——ARM技术智多星达人:程志

第二期:社区之星——资深单片机技术牛人:谁才是真正的工程师?第一期:社区之星——DSP牛人miachael_xing

嵌入式Linux系统中音频驱动的设计与实现

第31卷 第2期 2008年4月 电子器件 Ch in es e Jo u rnal Of Electro n Devi ces Vol.31 No.2Apr.2008 Design and Implementation of Audio Driver for Embedded Linux System YU Yue,YA O G uo -liang * (N ational A S I C S ystem Eng ine ering Center ,S outhe ast Unive rsity ,N anj ing 210096,China) Abstract:This paper intro duces the fundam ental principle and architecture of the audio system w hich con -sists of the CODEC UCB1400and the 805puls,and describes the design of audio dev ice dr iv er based on Audio Codec .97for Embedded Linux System.The paper focuses o n the implementatio n of the DM A trans -port and ioctl interface.T he audio dr iv e is running w ell in actual Embedded Linux system equipments.Key words:805plus;embedded Linux;Audio A C .97driver;DM A;ioctl interface EEACC :1130B 嵌入式Linux 系统中音频驱动的设计与实现 虞 跃,姚国良 * (东南大学国家专用集成电路系统工程中心,南京210096) 收稿日期:2007-07-09 作者简介:虞 跃(1982-),男,东南大学电子工程系国家专用集成电路工程技术研究中心硕士研究生,研究方向为嵌入式系统设计; 姚国良(1979-),男,东南大学电子工程系博士研究生,yuyueo@https://www.360docs.net/doc/a26355103.html,. 摘 要:介绍了由805puls 处理器和U CB1400编解码芯片构成的音频系统体系结构及工作原理,接着阐述了嵌入式Linux 操作系统下基于A C .97协议标准的音频设备驱动程序的设计与实现。其中着重讲述了采用循环缓冲区进行音频数据的DM A 传输流程以及ioctl 接口的实现。此设计方案已在嵌入式L inux 系统中得到使用,运行效果良好。 关键词:805plus;嵌入式L inux ;AC .97音频驱动;DM A;ioctl 接口中图分类号:TP391 文献标识码:A 文章编号:1005-9490(2008)02-0709-03 嵌入式音频系统广泛应用于GPS 自动导航、PDA,3G 手机等移动信息终端,具备播放、录音功能的音频系统的应用使得移动信息终端上视听娱乐IP 电话、音频录制等成为可能,并推动了移动信息终端设备的发展。 在软件上,嵌入式操作系统的新兴力量Linux 的开源性,内核可定制等优点吸引了许多的开发者与开发商。它是个和U nix 相似、以核心为基础的、完全内存保护、多任务多进程的操作系统。支持广泛的计算机硬件,包括X86,A lpha,Sparc,M IPS,PPC,ARM ,NEC,MOT OROLA 等现有的大部分芯片[1]。 本文针对805puls 微处理器选用Philips 公司的编解码芯片(CODEC)U CB1400,构建了基于Au -dio Codec .97(AC .97)标准的音频系统。并介绍了该音频系统在Linux 操作系统2.4.19内核下驱动 程序的实现技术。 1 音频系统构架 1.1 微处理器805plus 805plus 是东南大学ASIC 系统工程技术研究中心和北京大学微处理器研究开发中心共同设计和开发的32bit 嵌入式微处理器,是采用H ar vard 结构的RISC 处理器。内部采用五级流水线结构,兼容16bit 和32bit 的指令系统805plus 嵌入式微处理器集成了存储接口EMI,时钟和功耗管理PM C,中断控制器INTC,通用定时器T IM ER,脉宽调制器PWM,实时时钟RT C,通用串口UA RT,LCD 控制器LCDC,AC .97控制器,同步外设接口SPI 。1.2 AC .97协议标准[2] AC'97协议标准是一套关于A C'97数字音频处理(AC'97Digital Controller)、AC '97数字串口(AC

嵌入式学习心得体会5篇

嵌入式学习心得体会5篇 嵌入式学习心得体会(一) 首先我声明,我是基于嵌入式系统平台级设计的,硬件这个方向我相对来讲比较有发言权,如果是其它方面所要具备的基本技能还要和我们培训中心其它专业级讲师沟通。他们的方面上我只能说是知道些,但不是太多,初级的问题也可以问我。 对于硬件来讲有几个方向,就单纯信号来分为数字和模拟,模拟比较难搞,一般需要很长的经验积累,单单一个阻值或容值的精度不够就可能使信号偏差很大。因此年轻人搞的较少,随着技术的发展,出现了模拟电路数字化,比如手机的modem 射频模块,都采用成熟的套片,而当年国际上只有两家公司有此技术,自我感觉模拟功能不太强的人,不太适合搞这个,如果真能搞定到手机的射频模块,只要达到一般程度可能月薪都在15k以上。 另一类就是数字部分了,在大方向上又可分为51/arm的单片机类,dsp类,fpga 类,国内fpga的工程师大多是在ic设计公司从事ip核的前端验证,这部分不搞到门级,前途不太明朗,即使做个ic前端验证工程师,也要搞上几年才能胜任。dsp 硬件接口比较定型,如果不向驱动或是算法上靠拢,前途也不会太大。 而arm单片机类的内容就较多,业界产品占用量大,应用人群广,因此就业空间极大,而硬件设计最体现水平和水准的就是接口设计这块,这是各个高级硬件工程师相互pk,判定水平高低的依据。而接口设计这块最关键的是看时序,而不是简单的连接,比如pxa255处理器i2c要求速度在100kbps,如果把一个i2c外围器件,最高还达不到100kbps的与它相接,必然要导致设计的失败。这样的情况有很多,比如51单片机可以在总线接lcd,但为什么这种lcd就不能挂在arm的总线上,还有arm7总线上可以外接个winband的sd卡控制器,但为什么这种控制器接不到arm9或是xscale处理器上,这些都是问题。 因此接口并不是一种简单的连接,要看时序,要看参数。一个优秀的硬件工程师应该能够在没有参考方案的前提下设计出一个在成本和性能上更加优秀的产品,靠现有的方案,也要进行适当的可行性裁剪,但不是胡乱的来,我遇到一个工程师

CAN总线在嵌入式Linux下驱动程序的实现

CAN总线在嵌入式Linux下驱动程序的实现 时间:2009-11-05 09:41:22 来源:微计算机信息作者:黄捷峰蔡启仲郭毅锋田小刚 1 引言 基于嵌入式系统设计的工业控制装置,在工业控制现场受到各种干扰,如电磁、粉尘、天气等对系统的正常运行造成很大的影响。在工业控制现场各个设备之间要经常交换、传输数据,需要一种抗干扰性强、稳定、传输速率快的现场总线进行通信。文章采用CAN总线,基于嵌入式系统32位的S3C44B0X微处理器,通过其SPI接口,MCP2510 CAN控制器扩展CAN总线;将嵌入式操作系统嵌入到S3C44B0X微处理器中,能实现多任务、友好图形用户界面;针对S3C44B0X微处理器没有内存管理单元MMU,采用uClinux嵌入式操作系统。这样在嵌入式系统中扩展CAN设备关键技术就是CAN设备在嵌入式操作系统下驱动程序的实现。文章重点解决了CAN总线在嵌入式操作系统下驱动程序实现的问题。对于用户来说,CAN设备在嵌入式操作系统驱动的实现为用户屏蔽了硬件的细节,用户不用关心硬件就可以编出自己的用户程序。实验结果表明驱动程序的正确性,能提高整个系统的抗干扰能力,稳定性好,最大传输速率达到1Mb/s;硬件的错误检定特性也增强了CAN的抗电磁干扰能力。 2 系统硬件设计 系统采用S3C44B0X微处理器,需要扩展CAN控制器。常用的CAN控制器有SJA1000和MCP2510,这两种芯片都支持CAN2.0B标准。SJA1000采用的总线是地址线和数据线复用的方式,但是嵌入式处理器外部总线大多是地址线和数据线分开的结构,这样每次对SJA1000操作时需要先后写入地址和数据2次数据,而且SJA1000使用5V逻辑电平。所以应用MCP2510控制器进行扩展,收发器采用82C250。MCP2510控制器特点:1.支持标准格式和扩展格式的CAN数据帧结构(CAN2.0B);2.0~8字节的有效数据长度,支持远程帧;3.最大1Mb/s的可编程波特率;4.2个支持过滤器的接受缓冲区,3个发送缓冲区; 5.SPI高速串行总线,最大5MHz; 6.3~5.5V宽电压范围供电。MCP2510工作电压为3.3V,能够直接与S3C44B0X微处理器I/O口相连。为了进一步提高系统抗干扰性,可在CAN控制器和收发器之间加一个光隔6N137。其结构原理框图如图1: 图1.S3C44B0X扩展CAN结构框图图2.字符设备注册表 3 CAN设备驱动程序的设计 Linux把设备看成特殊的文件进行管理,添加一种设备,首先要注册该设备,增加它的驱动。设备驱动程序是操作系统内核与设备硬件之间的接口,并为应用程序屏蔽了硬件细节。在linux中用户进程不能直接对物理设备进行操作,必须通过系统调用向内核提出请求,

嵌入式学习心得

嵌入式学习心得 如何学习嵌入式系统(基于ARM平台) 前言 网上看到众多网友都问了关于嵌入式系统方面的很多问题,很多都可在这里找到答案,希望我的这篇文章能给他们以启发。也请大家不要轻易转载。 一、嵌入式系统的概念 着重理解“嵌入”的概念 主要从三个方面上来理解。 1、从硬件上,将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构下的计算机,CPU只是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的16C550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到CPU内部,还有PC 机有显卡,而多数嵌入式处理器都带有LCD控制器,但其种意义上就相当于显卡。比较高端的ARM类Intel Xscale架构下的IXP网络处理器CPU内部集成PCI控制器(可配成支持4个PCI从设备或配成自身为CPI从设备);还集成3个NPE网络处理器引擎,其中两个对应于两个MAC地址,可用于网关交换用,而另外一个NPE网络处理器引擎支持DSL,只要外面再加个PHY芯片即可以实现DSL上网功能。IXP系列最高主频可以达到1.8G,支持2G内存,1G×10或10G×1的以太网口或Febre channel的光通道。IXP系列应该是目标基于ARM体系统结构下由intel进行整合后成Xscale内核的最高的处理器了。 2、从软件上前,就是在定制操作系统内核里将应用一并选入,编译后将内核下载到ROM中。而在定制操作系统内核时所选择的应用程序组件就是完成了软件的“嵌入”,比如WinCE在内核定制时,会有相应选择,其中就是wordpad,PDF,MediaPlay等等选择,如果我们选择了,在CE启动后,就可以在界面中找到这些东西,如果是以前PC上将的windows操作系统,多半的东西都需要我们得新再装。 3、把软件内核或应用文件系统等东西烧到嵌入式系统硬件平台中的ROM中就实现了一个真正的“嵌入”。 以上的定义是我在6、7年前给嵌入式系统下自话侧重于理解型的定义,书上的定义也有很多,但在这个领域范围内,谁都不敢说自己的定义是十分确切的,包括那些专家学者们,历为毕竟嵌入式系统是计算机范畴下的一门综合性学科 二、嵌入式系统的分层与专业的分类。 嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。 1、硬件层,是整个嵌入式系统的根本,如果现在单片机及接口这块很熟悉,并且能用C和汇编语言来编程的话,从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层的基础,一个优秀的驱动工程师是要能够看懂硬件的电路图和自行完成CPLD的逻辑设计的,同时还要对操作系统内核及其调度性相当的熟悉的。但硬件平台是基础,增值还要靠软件。 硬件层比较适合于,电子、通信、自动化、机电一体、信息工程类专业的人来搞,需要掌握的专业基础知识有,单片机原理及接口技术、微机原理及接口技术、C语言。 2、驱动层,这部分比较难,驱动工程师不仅要能看懂电路图还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导至其它任务不能动行,不懂操作系统内核架构和实时调度性,没有良好的驱动编写风格,按大多数书上所说添加的驱动的方式,很多人都能做到,但可能连个初级的驱动工程师的水平都达不到,这样所写的驱动在应用调用时就如同windows 下我们打开一个程序运行后,再打开一个程序时,要不就是中断以前的程序,要不就是等上一会才能运

一个初学者的嵌入式培训体会

一个初学者的嵌入式培训体会现在嵌入式做为计算机发展的一个新的方向越来越得到社会的重视。随之而来的是很多培训班的诞生,但是如何能在琳琅满目的培训机构中找到一个能真正学到东西的培训班呢,这是摆在众多想学嵌入式的人面前的第一个问题。我在了解了众多培训机构并且试听之后,最终选择了Tocore 嵌入式培训,之所以选择,是因为我看重老师的实际能力和认真负责的态度。我非常荣幸能够成为Tocore中的一员。 嵌入式开发,做为一个新的计算机发展方向,已经越来越受到社会的重视,社会上的需要也十分巨大,可是真正懂得嵌入式开发的人才缺不是很多,归结去原因主要是一下几个方面: 一:因为它是新兴的一个发展方向,懂得的人自然不多。 二:学习嵌入式需要比较庞杂的知识结构。操作系统、微机原理、C/C++语言、数据结构等。 三:嵌入式学习,上手很困难,不知道从哪里着手去学习。 在刚开始接触的时候,我也是抱着本书,自己摸索,可是越看越迷茫,连很多书里的名词都不知道是什么意思,去网上查也没有得到答案。可是在Tocore我得到了很好的指点,在这里,由于老师都是十分有经验的项目经理,他们懂得如何去学习,从哪里开始入手,这对于我这样的背景知

识比较薄弱又接触时间比较短的人来说实在是太有帮助了。 虽然课程还没有完,可是在这段时间的学习中,我按照老师的指导在完善的课程体系下进行系统的学习,已经掌握了U-boot、kernel以及linux移植的基本框架,(我想在今后的学习中一定会对这些知识更加熟悉以至精通!)这对于2个月前什么都不懂的我来说已经是很大的提高了!用得是ARM9的板子,这也是市场上现在比较新的,比较流行的板子,很多公司在实际的产品开发中就用的是ARM9。在课堂上,老师的讲解和我们的练习相结合,理论联系实际。老师除了讲解知识外,还结合了大量的实际案例和操作,这对于我对问题的理解和知识的记忆有很大帮助。 最后谈谈对学习态度的一点看法。嵌入式学习,是比较耗时的,前期需要很多知识做铺垫,有很多人在这个过程中走了不少弯路,于是开始失去耐心、失去信心,以至最终放弃学习。所以我想有必要强调一下问题,在刚开始的时候,自己什么都不懂,可是学习的愿望很强烈,每次上课都希望上完课就能如何如何,可是下来发现自己好像离自己原本的目标还很远,于是心里着急,自己跑到网上搜了很多资料,每天乱看,可是并没有很大的帮助。我想说的是,学习嵌入式一定要有耐心和毅力,不能急躁,按照课程的安排自己多做一些总结和练习,等到知识慢慢的积累下来就会有一种豁然开朗的感觉。

嵌入式学习的八大步骤及方法(精)

嵌入式学习的八大步骤及方法 一:嵌入式 c 语言 C 语言是嵌入式领域最重要也是最主要的编程语言, 通过大量编程实例重点理解 C 语言的基础编程以及高级编程知识。包括:基本数据类型、数组、指针、结构体、链表、文件操作、队列、栈等。 二:Linux 基础 Linux 操作系统的概念、安装方法,详细了解 Linux 下的目录结构、基本命令、编辑器 VI ,编译器 GCC ,调试器 GDB 和 Make 项目管理工具, Shell Makefile脚本编写等知识, 嵌入式开发环境的搭建。 三:Linux 系统编程 重点学习标准 I/O库, Linux 多任务编程中的多进程和多线程,以及进程间通信(pipe、 FIFO 、消息队列、共享内存、 signal 、信号量等 ,同步与互斥对共享资源访问控制等重要知识,主要提升对 Linux 应用开发的理解和代码调试的能力。 四:Linux 网络编程 计算机网络在嵌入式 Linux 系统应用开发过程中使用非常广泛,通过 Linux 网络发展、 TCP/IP协议、 socket 编程、 TCP 网络编程、 UDP 网络编程、 Web 编程开发等方面入手,全面了解 Linux 网络应用程序开发。重点学习网络编程相关 API ,熟练掌握 TCP 协议服务器的编程方法和并发服务器的实现,了解 HTTP 协议及其实现方法,熟悉 UDP 广播、多播的原理及编程方法,掌握混合 C/S架构网络通信系统的设计,熟悉 HTML , Javascript 等 Web 编程技术及实现方法。 五:数据结构与算法 数据结构及算法在嵌入式底层驱动、通信协议、及各种引擎开发中会得到大量应用, 对其掌握的好坏直接影响程序的效率、简洁及健壮性。此阶段的学习要

十年经验教你如何学习嵌入式系统(基于ARM平台).

一、嵌入式系统的概念 着重理解“嵌入”的概念 主要从三个方面上来理解。 1、从硬件上,将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构下的计算机,CPU只是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的16C550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到CPU内部,还有PC机有显卡,而多数嵌入式处理器都带有LCD控制器,但其种意义上就相当于显卡。比较高端的ARM类Intel Xscale架构下的IXP网络处理器CPU内部集成PCI控制器(可配成支持4个PCI从设备或配成自身为CPI从设备);还集成3个NPE网络处理器引擎,其中两个对应于两个MAC地址,可用于网关交换用,而另外一个NPE网络处理器引擎支持DSL,只要外面再加个PHY芯片即可以实现DSL 上网功能。IXP系列最高主频可以达到 1.8G,支持2G内存,1G×10或10G×1的以太网口或Febre channel的光通道。IXP系列应该是目标基于ARM体系统结构下由 intel进行整合后成Xscale内核的最高的处理器了。 2、从软件上看,就是在定制操作系统内核里将应用一并选入,编译后将内核下载到ROM中。而在定制操作系统内核时所选择的应用程序组件就是完成了软件的“嵌入”,比如WinCE在内核定制时,会有相应选择,其中就是wordpad,PDF,MediaPlay等等选择,如果我们选择了,在CE启动后,就可以在界面中找到这些东西,如果是以前PC上将的windows操作系统,多半的东西都需要我们得新再装。 3、把软件内核或应用文件系统等东西烧到嵌入式系统硬件平台中的ROM中就实现了一个真正的“嵌入”。 以上的定义是我在6、7年前给嵌入式系统下自话侧重于理解型的定义,书上的定义也有很多,但在这个领域范围内,谁都不敢说自己的定义是十分确切的,包括那些专家学者们,历为毕竟嵌入式系统是计算机范畴下的一门综合性学科 二、嵌入式系统的分层与专业的分类。 嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。 1、硬件层,是整个嵌入式系统的根本,如果现在单片机及接口这块很熟悉,并且能用C和汇编语言来编程的话,从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层的基础,一个优秀的驱动工程师是要能够看懂硬件的电路图和自行完成CPLD的逻辑设计的,同时还要对操作系统内核及其调度性相当的熟悉的。但硬件平台是基础,增值还要靠软件。 硬件层比较适合于,电子、通信、自动化、机电一体、信息工程类专业的人来搞,需要掌握的专业基础知识有,单片机原理及接口_技术、微机原理及接口_技术、C语言。 2、驱动层,这部分比较难,驱动工程师不仅要能看懂电路图还要能对操作系

嵌入式linux android驱动工程师 面试题总汇

嵌入式linux android驱动工程师面试题总汇 1.嵌入式系统中断服务子程序(ISR)收藏中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字__interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。 2.C语言中对位的操作,比如对a的第三位清0,第四位置1.本来应该会的,一犯晕写反了,以后注意! #define BIT3 (1<<3) #define BIT4 (1<<4) a &= ~BIT3;a |= BIT4; 3.考到volatile含义并举例: 理解出错,举了很具体的例子,连程序都搬上去了,有些理解不深的没举出来…… volatile表示这个变量会被意想不到的改变,每次用他的时候都会小心的重新读取一遍,不适用寄存器保存的副本。 volatile表示直接存取原始地址 例: 并行设备的硬件寄存器(状态寄存器) 在多线程运行的时候共享变量也要时时更新 一个中断服务子程序中访问到的的非自动变量(不太清楚,正在查找资料ing……) 4.要求设置一绝对地址为0x67a9的整型变量的值为0xaa66

当时我的写法: #define AA *(volatile unsigned long *)0xaa66AA = 0x67a9; 答案: int *ptr =(int *)0xaa66; *ptr = 0x67a9; 我感觉自己写的应该不算错吧(自我感觉,还请达人指正),我写的适合裸机下用,当做寄存器用,而答案就是适合在操作系统下的写法。 1. linux内核里面,内存申请有哪几个函数,各自的区别? 2. IRQ和FIQ有什么区别,在CPU里面是是怎么做的? 3. int *a; char *b; a 和b本身是什么类型? a、b里面本身存放的只是一个地址,难道是这两个地址有不同么? 4.xx的上半部分和下半部分的问题: 讲下分成上半部分和下半部分的原因,为何要分?讲下如何实现? 5.内核函数mmap的实现原理,机制? 6.驱动里面为什么要有并发、互斥的控制?如何实现?讲个例子? 7. spinlock自旋锁是如何实现的? 8.任务调度的机制? 【二、本人碰到】

嵌入式学习心得体会

嵌入式学习心得体会 BAKYANNMYRADOV 01 这学期才接触嵌入式系统感觉还称不上入门,我通过学习知道了嵌入式的发展前景很大,各个领域都用到了嵌入式,学好嵌入式不愁没饭吃。 广义上讲,凡是带有微处理器的专用软硬件系统都是嵌入式系统。如各类单片机和DSP系统。从狭义上讲,那些使用嵌入式微处理器构成独立系统,具有自己操作系统,具有特定功能,用于特定场合的专用软硬件系统称为嵌入式系统。嵌入式系统由嵌入式硬件与嵌入式软件组成; 嵌入式硬件以芯片、模板、组件、控制器形式埋藏于设备部。理解“嵌入”的概念主要从三个方面上来理解。 1、从硬件上,将基于CPU的处围器件,整合到CPU芯片部,比如早期基于X86体系结构下的计算机,CPU只是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的16C550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到CPU部,还有PC机有显卡,而多数嵌入式处理器都带有LCD控制器,但其种意义上就相当于显卡。比较高端的ARM类Intel Xscale架构下的IXP网络处理器CPU部集成PCI控制器(可配成支持4个PCI从设备或配成自身为CPI从设备);还集成3个NPE网络处理器引擎,其中两个对应于两个MAC地址,可用于网关交换用,而另外一个NPE网络处理器引擎支持DSL,只要外面再加个PHY芯片即可以实现DSL上网功能。IXP系列最高主频可以达到1.8G,支持2G存,1G×10或10G×1的以太网口或Febre channel的光通道。IXP系列应该是目标基于ARM体系统结构下由intel进行整合后成Xscale核的最高的处理器了。

嵌入式LINUX四按键驱动

对一个具有四个按键的按键驱动的分析 源代码: /*Headers-------------------------------------------------*/ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef CONFIG_DEVFS_FS #include #endif /*V ars----------------------------------------------------*/ #define DEVICE_NAME "buttons" #define EXTINT_OFF (IRQ_EINT4 - 4) unsigned int buttons_major=0; unsigned int buttons_minor=0; unsigned int type = IRQT_FALLING; struct button_info { unsigned int irq_no; unsigned int gpio_port; unsigned int IN; int button_no; }; struct button_info realarm_button_info[4] = { { IRQ_EINT19, S3C2410_GPG11, S3C2410_GPG11_INP, 1 }, { IRQ_EINT8, S3C2410_GPG0, S3C2410_GPG0_INP, 2 },

嵌入式Linux下3G模块的驱动和应用

嵌入式Linux下3G模块的驱动和应用 1、开发资源 1.1、硬件资源: ZTE-mf637u(中国联通) ZTE-mu351(中国移动) 1.2、软件资源: 1.2.1、usb-modeswitch-1.1.3 libusb-0.1.12.tar.gz usb-modeswitch-1.1.3.tar.bz2 1.2.2、ppp-2.4.4 libpcap-0.9.8.tar.gz ppp-2.4.4.tar.gz 1.2.3、wvdial 1.2.3.1、wvdial-1.54.0(arm-linux-gcc 3.4.1) zlib-1.2.5.tar.bz2 openssl-0.9.7g.tar.gz openssl-0.9.7g-fix_manpages-1.patch wvstreams-4.0.1.tar.bz2

wvstreams-4.0.1-tcl84-1.patch wvdial-1.54.0.tar.gz 1.2.3.2、wvdial_1.60.4(arm-linux-gcc 4.2.2) zlib-1.2.5.tar.bz2 openssl-0.9.8n.tar.gz openssl-0.9.8n-fix_manpages-1.patch wvstreams-4.6.1.tar.gz wvdial_1.60.4.tar.gz 2、Linux开发环境 2.1、主机环境 2.1.1、主机linux系统 Fedora Core 6 2.1.2、主机编译环境 2.1.2.1、gcc -v Using built-in specs. Target: i386-redhat-linux Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile

嵌入式Linux课程学习心得

第一篇、嵌入式系统学习心得 嵌入式Linux课程学习心得 篇一嵌入式心得体会 这学 期才接触嵌入式系统感觉还称不上入门,我通过学习知道了嵌入式的发展前景很大,各个领 域都用到了嵌入式,学好嵌入式不愁没饭吃。 广义上讲,凡是带 有微处理器的专用软硬件系统都是嵌入式系统。如各类单片机和dsp系统。从狭义上讲,那 些使用嵌入式微处理器构成独立系统,具有自己操作系统,具有特定功能,用于特定场合的

专用软硬件系统称为嵌入式系统。嵌入式系统由嵌入式硬件与嵌入式软件组成; 嵌入式硬件 以芯片、模板、组件、控制器形式埋藏于设备内部。 理解“嵌入”的概 念主要从三个方面上来理解。 1、从硬件上,将基 于cpu的处围器件,整合到cpu芯片内部,比如早期基于x86体系结构下的计算机,cpu只 是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部 的16c550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到cpu内部,还 有pc机有显卡,而多数嵌入式处理器都带有lcd控制器,但其种意义上就

相当于显卡。比较 高端的arm类intel xscale架构下的ixp网络处理器cpu内部集成pci控制器(可配成支持 4个pci从设备或配成自身为cpi从设备);还集成3个npe网络处理器引擎,其中两个对应 于两个mac地址,可用于网关交换用,而另外一个npe网络处理器引擎支持dsl,只要外面 再加个phy芯片即可以实现dsl上网功能。ixp系列最高主频可以达到8g,支持2g内存, 1g×10或10g×1的以太网口或febre channel的光通道。ixp系列应该是目标基于arm体系 统结构下由intel进行整合后成xscale内核的最高的处理器了。 2、从软件上前,就 是在定制操作系统内核里将应用一并选入,编译后将内核下载到rom中。而

嵌入式学习心得体会例文

嵌入式学习心得体会例文 篇一 1、熟悉CPU。x86中存在实模式和保护模式,CPU一上电后进入的是实模式,要进入保护模式则需要做一定的设置,最后做一个长跳转,就能进入保护模式。对于这一处理器的熟悉和了解,使得我对于处理器有一个很好的认识。此外,还得明白什么是芯片组、PCI的原理和配置方法、SDRAM如何配置、IDE 的PIO模式如何工作。 2、熟悉uC/OSRTOS并对其进行扩展。理解任务是如何实现的、任务是如何被调度的、Mutex和Semaphore是如何实现的、对处理器进行开关中断的目的是什么且要注意什么,等等。对于RTOS的扩展则包括实现了一个采用malloc/free进行内存分配的堆管理模块,这一管理模块是参照XINU操作系统来实现的;对任务调度部分进行修改以方便中断服务程序的管理。 3、MINUX操作系统的文件系统移植到我们的DVR上。MINUX 中采用的就是UNIX中的i-node的方式来管理文件的,这种方式在现在的Linux中也能看到。由于MINUX的文件系统是针对小型存储设备的,所以对其代码要进行修改,以适应当时所采用的上G的硬盘。 4、XINU中的TCP协议栈移植到DVR上。 以上的工作内容让嵌入式技术人员对于操作系统的原理和

实现得到了很好的实操。不过在嵌入式系统开发领域中这也只 是入门级别。后续还有处理器操作、RTEMS操作系统、编译器 和C语言的使用等都需要嵌入式开发人员慢慢精通。 篇二 学期开始,我们开始学习《嵌入式系统及应用》,由于初次接触嵌入式系统,感觉蛮难的,所以收获不是很大,很多的概 念都比较模糊,等到学期结束开始做嵌入式课程设计时,真是 茫然无从下手,自从拿到设计主题后,我就像热锅上的蚂蚁, 一个字急。最后实在没有办法,逼着自己去学习,查资料,总 算对嵌入式有了浅层理解。 嵌入式系统本身是一个相对模糊的定义,一个手持的mp3 和一个pc104的微型工业控制计算机都可以认为是嵌入式系统。总体来说,嵌入式系统是用于控制,监视或者辅助操作机器和 设备的装备。一个典型的桌面linux系统包括3个主要的软件层---linux内核、c库和应用程序代码。内核是可以完全控制硬 件的层,内核驱动程序代表应用程序与硬件之间进行会话。内 核之上是c库,负责把posixapi转换为内核可以识别的形式,然后调用内核,从应用程序向内核传递参数。应用程序依靠驱 动内核来完成特定的任务。 在了解了基础知识之后,我开始进行上机操作,当然,其 中遇到很多的难题,很多东西都是第一次接触,又没有别人在 旁边指导操作,完全凭借自己去摸索练习。其中的困难可想而

嵌入式学习步骤详细解说(精)

方法是先不学arm汇编,直接根据我们的开发板提供的用户应用程序入口,参考CPU片内外围设备说明,学习一些简单的程序.这个很容易理解,然后参考我们编写的驱动程序,在没有操作系统的情况下.自己编写一些最简单的驱动.接着要看arm体系结构的书,适当学习汇编,但不需要花太多时间. 然后尝试自己写全套的驱动和应用.这个过程要4个月左右.然后你可以学习uclinux,根据基础不同时间也不一样,如果没任何基础,估计要半年时间.最后补充一句:没有压力你什么也学不会,最好自己去接个小项目,这样比较容易真正学会ARM 第一步:先学习51单片机,最好看看《10天学会51单片机》视频教程,并且亲自动手编写程序在学习板(可以参考一下TX-1C51学习板)上运行程序反复练习,达到理论和实践的结合,对于基本的C语言编程入门,在你学完51单片机后也能掌握了,另外再看看相关的C语言书籍进一步巩固。第二步:如果你对51单片机已经掌握的非常扎实,你可以跳过此步直接看第三步。如果你仅仅是看过我们的视频教程,那你还差的很远,一定要经历亲自写程序下载,亲自调试程序这个过程,一定要用51单片机来自己做点小作品。最好的办法是再来学习下我们的PIC 单片机或是AVR单片机,进一步熟练C语言在不同硬件系统下的灵活使用和代码移植过程。第三步:将《C语言程序设计》书中的数组、结构体、指针部分仔仔细细,完完整整的看的明明白白。第四步:学习S3C44B0这个芯片的自身资源,只把它当做单片机来用,熟练的掌握寄存器的配置和外围电路的硬件连接以及开发环境的使用,这个大家可以参考一下我们的TX-3A学习板,上面的外围资源都很基础,如果连芯片自身的寄存器及外围功能都无法熟练使用,那想都别想在上面跑操作系统。第五步:学习我们的TX-3C提高级学习板了,配套我们的视频教程会让大家在最短的时间内走上ARM嵌入式的道路。最后,我们这这款视频教程对大家仅起到领路者的作用,俗话说“师傅领进门,修行在个人”,它不可能采用“10天学会51单片机”那样手把手、逐字敲写代码的教学方式,随便一个操作系统文件都几百几千行,世界项级IC公司动用几百几千工程师用几十年时间写出的代码我们不可能在几十个小时内敲打给大家,我们也是移植他人成熟的代码,补充自己的内容。大家要相信自己的自学能力,单片机都能学会,只要再多下些功夫,ARM也是不难的。最后希望通过我们这款视频教程能够帮助大家掌握ARM、掌握嵌入式系统。很多人学完单片机就想学arm,但不知如何去学~现在列出一下学习这方面的步骤-----基于linux系统的学习步骤如下:(一步步来哦:)其实这也只是个基础,以后实际做项目了还要去学很多 1、Linux 基础安装Linux操作系统Linux文件系统 Linux常用命令 Linux启动过程详解熟悉Linux服务能够独立安装Linux 操作系统能够熟练使用Linux系统的基本命令认识Linux系统的常用服务安装Linux操作系统 Linux基本命令实践设置Linux环境变量定制Linux的服务 Shell 编程基础使用vi 编辑文件使用Emacs编辑文件使用其他编辑器 2、Shell 编程基础 Shell简介认识后台程序 Bash编程熟悉Linux系统下的编辑环境熟悉Linux下的各种Shell 熟练进行shell编程熟悉vi基本操作熟悉Emacs的基本操作比较不同shell的区别编写一个测试服务器是否连通的shell脚本程序编写一个查看进程是否存在的shell脚本程序编写一个带有循环语句的shell脚本程序 3、Linux 下的 C 编程基础 linux C语言环境概述 Gcc使用方法 Gdb 调试技术 Autoconf Automake Makefile 代码优化熟悉Linux系统下的开发环境熟悉Gcc 编译器熟悉Makefile规则编写Hello,World程序使用 make命令编译程序编写带有一个循环的程序调试一个有问题的程序 4、嵌入式系统开发基础嵌入式系统概述交叉编译配置TFTP服务配置NFS服务下载Bootloader和内核嵌入式Linux应用软件开发流程熟悉嵌入式系统概念以及开发流程建立嵌入式系统开发环境制作cross_gcc工具链编译并下载U-boot 编译并下载Linux内核编译并下载Linux应用程序 4、嵌入式系统移植 Linux内核代码平台相关代码分析 ARM平台介绍平台移植的关键技术移植Linux内核到 ARM平台了解移植的概念能够移植Linux内核移植Linux2.6内核到 ARM9开发板 5、嵌入式 Linux 下串口通信串行I/O的基本概念嵌入式Linux应用软件开发流程 Linux系统的文件和设备

如何学好嵌入式

如何学好嵌入式的嵌入式 近来嵌入式挺火,于是大家都往这里挤。我想提醒大家的是,嵌入式马上也会成为如今的软件业。在你进来之前请先考虑清楚。但只要我们真的学精了一样东西,不管它将来变成什么样,哪怕最后只剩下一个人,那个人也一定就是你自己。 很多人以为搞嵌入式就是随便找本书看看,在电脑上编几个程序就完事。非也,其实嵌入式的门槛是比较高的。具体如下: 1、您得有一定数量的Money。 (1)、开发板贵 (2)、培训费更贵 (3)、开发平台是贵得不能再贵。(除非您只是想玩玩而已) 2、需要学习的东西多。(1)、window环境编程;(2)、Linux环境编程;(3)、单片机 3、最后也是最重要的一点,你得有坚韧不拔之志和一颗平常之心。 (1)、自信坚强积极勤快(注:好的自信是自觉的!) (2)、成功其实就是成为最好的您自己 嵌入式门槛虽然较高,但也跟其他事物一样,并不是牢不可破。只要我们用心去对待,东雪终将化去,春风定会吹来。具体步骤如下: 1、《C语言》第二版谭浩强;《C程序设计语言》第二版徐宝文译机戒工业出版社你能区分开指针数组和数组指针吗?你知道函数指针吗? 你能区分开定义一个变量时系统给它分配的空间与用malloc()函数给一个变量分配的空间有什么不一样吗? 2、《数据结构》C语言版黄国愉、叶乃青编清华大学出版社 你能合上书本,用C语言实现书中的单链表、双链表数据结构吗? 3、《实用C++程序设计》第二板中国电力出版社Steve_Oualline著 此阶段主要是学习其面向对象的编程思想,加深对C语言和数据结构的理解。 4、学习单片机,最好能找个前辈带一带。 你能用51单片机做出一样实际的东西吗?即使它再简单! 要注意加深对中断的理解。 5、学习ARM单片机。 (1)、细读《ARM微控制器基础与实战》周立工编写(注:即使你不用书中的开发板) (2)、细读相关芯片的原版英文文档。如:arm920TE.pdf S3C2410_1.2.pdf 6、学习uCOS!!操作系统。 (1)、细读《嵌入式实时操作系统uC/OS-!!》第二版召贝贝译 你能把uCOS!!移植到自己的平台上吗? (2)、能编写在uCOS!!操作系统环境下运行的针对具体硬件的驱动程序 7、熟悉Linux环境,学习Linux环境编程,学习交叉编程 (1)、细读《linux命令大全.pdf》 (2)、细读《GNU Make 使用手册(中译版).pdf》 (3)、学习创建交叉编程环境. 8、学习Linux操作系统。 (1)、《UNIX环境高级编程》 (2)、细读“joyfire 笔记”,可在“https://www.360docs.net/doc/a26355103.html,”网站的好书下载栏目获取 (3)、细读《linux内核完全注释》 (4)、细读《understanding the linux kernel 2》 (5)、利用源代码阅读利器工具"Source Insight"进行真正的linux内核原码刨析

编写嵌入式Linux设备驱动程序的实例教程

编写嵌入式Linux设备驱动程序的实例教程 一、Linux device driver 的概念 系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能: 1、对设备初始化和释放; 2、把数据从内核传送到硬件和从硬件读取数据; 3、读取应用程序传送给设备文件的数据和回送应用程序请求的数据; 4、检测和处理设备出现的错误。 在linux操作系统下有三类主要的设备文件类型,一是字符设备,二是块设备,三是网络设备。字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了,块设备则不然,它利用一块系统内存作缓冲区,当用户进程对设备请求能满足用户的要求,就返回请求的数据,如

果不能,就调用请求函数来进行实际的I/O操作。块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待。 已经提到,用户进程是通过设备文件来与实际的硬件打交道。每个设备文件都都有其文件属性(c/b),表示是字符设备还是块设备?另外每个文件都有两个设备号,第一个是主设备号,标识驱动程序,第二个是从设备号,标识使用同一个设备驱动程序的不同的硬件设备,比如有两个软盘,就可以用从设备号来区分他们。设备文件的的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问到驱动程序。 最后必须提到的是,在用户进程调用驱动程序时,系统进入核心态,这时不再是抢先式调度。也就是说,系统必须在你的驱动程序的子函数返回后才能进行其他的工作。如果你的驱动程序陷入死循环,不幸的是你只有重新启动机器了,然后就是漫长的fsck。 二、实例剖析 我们来写一个最简单的字符设备驱动程序。虽然它什么也不做,但是通过它可以了解Linux的设备驱动程序的工作原理。把

相关文档
最新文档