`
cloudtech
  • 浏览: 4605505 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

学嵌入式必须掌握的经验

 
阅读更多

本文节选自王洪辉老师的《嵌入式系统Linux内核开发实战指南(ARM平台)》一书

前言(序)

  2007年8月,我从上家公司辞职出来,放弃了刚上市公司骨干中层干部的职位,放弃了丰厚的待遇。

自1996年毕业以来,我一直从事嵌入式系统和Linux内核一线技术开发工作,我所承担的任务和项目基本都是由自己独立完成,即使担任了硬件部主管或技术总监职务,我对自己专长的工作仍是亲历亲为的;一方面,自己热爱这项工作,每攻克一个难题都能体验到莫大的成就感(相信技术工程师都有过这种体会);另一方面,目前国内做嵌入式系统和Linux内核开发的工程师供不应求,水平高的更是奇缺,相关职位的待遇相对其他职位的偏高,少招一个新员工就为公司节省一笔开支,减轻一份负担,所以对于比较简单和事务性的工作我会安排给其他员工,而难度大的工作我几乎都亲自上阵;我习惯加班,来了兴致甚至通宵达旦,凭着这股干劲,经过多年实践积累,自己常能在短时间内解决很多人长时间没有解决的问题;在我工作中接触到Linux之初,为了更好更深入地学习嵌入式系统和Linux内核开发技能,我在业余时间自己花钱设计制作了MC68VZ328和S3C4510两种开发板以及简易JTAG下载、烧写线缆,并成功移植、固化mClinux到这两个开发板上——到目前为止,我已经在当今流行的各种嵌入式硬件平台(包括单片机、MC68K、PowerPC、ARM、MIPS、DSP)和嵌入式操作系统(包括VRTX、VxWorks、PSOS、Linux)上都做过实际开发工作,编写、移植或者调试过UART、Ethernet、I2C、HDLC+E1、LCD、Keyboard、VFD、SCSI、SATA、IDE、CVBS、VGA、PCI、USB等接口和设备的驱动程序。

在与Linux打交道的这么多年里,我一心想把这个开放源码的优秀操作系统吃透,并理所当然地觉得,随着时间的推移和所做项目的增多,自己一定会逐渐认识Linux内核的真实面目;可是一直以来,每当我想在脑海中对Linux内核各组件及其原理进行全面系统概括描述时却总是如鲠在喉,不得其解,这让我心里一直潜藏着一丝隐忧和茫然:由于不了解Linux内核原理,尽管自己能凭借10多年的工作经验通过适当方法很快把任务完成、把难题解决,但却不能在碰到难题一开始就从原理上把握应该从哪儿下手,怎样做、做什么,缺乏全局预见性和高瞻远瞩的能力,这种心中“没底”的感觉驱使我去更深入钻研、发掘,去力争做到心中“有底”;这也让我意识到,虽然经过10多年的勤奋工作,自己已经积累了足够的工作经验,不过由于平时很少阅读理论书籍和Linux内核源代码,Linux内核原理知识并没有象我原来想象的那样自然而然地装进自己的大脑,所以自己的理论水平仍然很欠缺,要想提高就必需经过一个艰苦的沉淀过程;由于平时工作忙、任务紧,我很少有时间来做系统的总结和归纳,在这种情况下,出于对公司和自己负责任考虑,我决定辞去工作,在家专心、系统研读Linux内核源代码,同时也对自己10多年的工作进行一次全面概括和总结。

我花了半年多时间阅读针对ARM处理器平台的Linux 2.6.10内核源代码,记了2000多页的源代码阅读笔记和心得。2008年4月,我在家坐不住想去找工作—— 辞职前,我常开车去兜风或带家人郊游,辞职后不久,为了节省支出,我把车卖了,这半年多时间里,我除了早晨出去锻炼外,一天难得出门,没有娱乐,没有朋友交流,没有旅游,这对于一个身处物欲横流的繁华都市闹市区的人来说会是一种怎样的生活体验呢?更何况对于英俊潇洒、才华横溢、热情好动的本人呢(J)——于是我在脑海中总结半年多来的学习成果和收获,虽然感觉眼前比以前亮堂了许多,但仍是朦朦胧胧,似是而非,不得已只好强迫自己继续坐下去。我把以前的工作笔记、工作总结、自制的开发板全部找出来,又买了几本介绍Linux内核原理、驱动程序编写方面的理论书籍,把所有这些与半年多来阅读Linux 2.6内核源代码的笔记和心得进行交叉学习,相互印证,加深理解,同时对这些资料再次进行总结、归纳、记笔记、写心得;到08年6月,当我再次回头清理头绪,翻看新的笔记时,顿然感觉Linux2.6内核的轮廓渐渐清晰起来,我很兴奋并突发想象:何不将新的笔记、心得整理完善一下,那样不就可以编辑成一本介绍嵌入式系统硬件原理及软硬件设计流程与方法、嵌入式Linux内核原理及开发方法与技能、常见设备工作原理及其驱动程序的编写方法的完整的书了?联想到现在越来越多的年轻人开始热衷于嵌入式系统Linux内核开发这项高科技、高薪工作,却苦于找不到一本从实战出发全面深入介绍这方面技术的指导书,他们有的不惜花重金去参加培训,可是当这些培训后的部分人到我那面试时,我却发现他们所学甚浅,不懂原理,不懂技能,只了解一点操作流程,有的甚至连基本的开发流程都不熟悉;加上以前在一些嵌入式系统和Linux论坛中看到很多网友呼吁有经验的开发人员把自己的工作经验总结一下写出来供大家参考,这更让我有了写这本书的冲动。于是我又耐心坐了3个多月,继续总结、归纳、提炼、整理、完善,到了08年9月,原来的笔记和心得就浓缩成了《嵌入式系统Linux内核开发实战指南(ARM平台)》,我也实现了一次自我超越,从“摸着石头过河”的尴尬与无奈走向了“不管风吹浪打,胜似闲庭信步”的潇洒与从容!

《嵌入式系统Linux内核开发实战指南(ARM平台)》包含了我11年的工作笔记、经验总结,1年多来对ARM处理器平台Linux 2.6内核源代码的阅读心得和体会以及对几本理论参考书的阅读笔记和心得,这本书是从这些内容中提炼出来的,是我对自己12年工作和学习的概括与总结。

《嵌入式系统Linux内核开发实战指南(ARM平台)》以嵌入式系统Linux内核开发的整个过程为线索,按照先硬件后软件、先易后难的顺序编写。书中内容覆盖了嵌入式系统Linux内核开发的各个方面,全书由“嵌入式系统硬件开发(共10章)”、“Linux内核开发初步(共6章)”、“Linux 2.6内核原理(共9章)”、“Linux内核开发高级指南(共7章)”四部分组成,共32章。其中“嵌入式系统硬件开发”部分主要以ARM处理器为例介绍了嵌入式处理器的特点、内部原理以及硬件开发调试流程和方法,还介绍了如何制作简易JTAG线缆和编写烧写程序;“Linux内核开发初步”部分主要介绍各种bootloader、Linux开发环境的创建、Linux内核的配置和编译以及根文件系统的制作,还简单介绍了uClinux;“Linux 2.6内核原理”部分是本书的核心,该部分以Linux 2.6.10内核源代码为基础深入剖析了Linux 2.6内核的各个组成部分及其实现原理,包括Linux启动过程、内存管理、进程调度、文件系统、模块设计、异常中断处理、软中断和工作队列、并发和竞态、设备驱动程序等,是以源代码阅读心得和体会+参考书阅读笔记和心得+源代码详细注释方式编写的,因为Linux源代码是Linux操作系统理论的实践成果,讲解Linux内核理论的同时加上必要的源代码注释就会非常直观,否则恐怕又会是乏味的天书;“Linux内核开发高级指南”部分则介绍了一些比较高级的技能和开发人员平时很少关注的方面,这部分包括Linux系统参数设置、内核调试、内核移植、内核优化、定时器、杂项以及编译链接文件说明等。

《嵌入式系统Linux内核开发实战指南(ARM平台)》适合已经或者志愿从事嵌入式系统Linux内核开发各阶段、各层次的人员阅读。初级开发人员包括在校大学生可以从中找到努力的方向;中级开发人员可以从中找到更深层细致的内容和有效的方法;高级开发人员可以从中发现不少解决难题的点睛之笔——总之我希望并相信这本书能对爱好或从事嵌入式系统和Linux内核开发的读者有一定帮助,使他们在技术开发的道路上少走一些弯路!

当然,一本书不可能包括全部细节,Linux 2.6内核源代码本身就远不是一本1000多页的书所能容纳的。事实上,随着写作的深入,我发现要写和想写的东西越来越多,这或许就是知识的扩张效应吧:当我们了解的东西很少的时候,未知领域和已知领域的分界线只是一个很小的圈,随着我们知识的增加和积累,这个圈慢慢向外伸展,越来越大,于是我们就感觉到不懂的东西越来越多而不是越来越少。正是这种感觉激发了人们的求知欲,有多少科学家特别是我们中国的科学家,把自己的一生都默默奉献给了国家的科学发展事业,成就了中国世界科技大国的地位!他们从不奢望也不屑获得所谓的“诺贝尔”!——但是无论如何,这本书只能就此告一段落,如果有可能,我会把更多内容和细节写入下一本书中。

由于书中内容太多,其中难免出现一些错别字或文笔不通的现象,也可能会有错误,如果读者碰到这种情况,请在广泛查阅相关资料并亲自实验的基础上得出并坚持正确的结论,不要迷信书本和权威,要敢于怀疑,勤于思考和验证,这样才能更快地进步,这才是科学态度。我诚挚期望读者能向我指出书中的错误和不足,这样我就能与读者共同进步和提高!

最后我要特别提到,在学习和写作的整个过程中,我常看《恰同学少年》——想到那么多平凡而壮丽的人生,自己一年多来吃的这点“苦”又算得了什么呢?呵呵,毛毛雨而已!

2008年12月26日

该书详细目录请访问:http://www.931226.com

分享到:
评论

相关推荐

    牛人,十年经验教你如何学习嵌入式系统

    如何学习嵌入式的知识

    十年经验教你如何学习嵌入式系统

    十年经验教你如何学习嵌入式系统,硬件层比较适合于,电子、通信、自动化、机电一体、信息工程类专业的人来搞,需要掌握的专业基础知识有,单片机原理及接口技术、微机原理及接口技术、C语言

    系统学习嵌入式Linux几点非常实用的建议

    学习掌握嵌入Linux的开发与移植现在非常流行。各种学习文章与培训班,充斥书店街头。本文给出了几点学习嵌入式Linux几点非常实用的建议。

    嵌入式系统入门学习必须掌握的资料

    嵌入式系统设计内部资料,有了这些资料,你应该可以很快学会嵌入式系统的设计

    嵌入式学习过程大纲

    本文档详细描述了嵌入式开发学习从菜鸟到大神的学习过程,具体的列出了每一个过程需要掌握的知识和专业技能,按着此路径学习,一定会如虎添翼。

    嵌入式ARM系统实战开发

    通过本课程的学习,学员可以掌握ARM开发环境的搭建、ARM的汇编程序设计、ARM的C程序设计、嵌入式硬件设计、ARM的裸板驱动设计等能力,引导学员进入嵌入式开发的精彩世界,为后续深入学习嵌入式Linux驱动编程打下坚实...

    学习嵌入式Linux需要掌握的基础课程.pdf

    随着越来越多的企业和研发机构都转向嵌入式Linux的开发和研究,嵌入式Linux在新兴的嵌入式操作系统领域内也获得了飞速发展和广泛

    嵌入式的学习路线该怎么学习

    嵌入式学习路线,doc文档,是学习嵌入式的过程要掌握的东西,但并不是都要求要掌握

    (自学笔记)最全嵌入式Linux学习手册.docx

    本书从最简单的点亮 一个led开始,由浅入深地讲解,使读者最终可以配置、移植、裁剪内核,编写驱动程序,移植gui系统,掌握整个嵌入式linux系统的开发方法。本书由浅入深,循序渐进,适合刚接触嵌入式linux的初学者...

    有关嵌入式编程的经验

    在嵌入式编程领域掌握三门语言应该就算是无敌了,汇编,C,C++,精力有限掌握前两个也凑合,再不行C一定要精通,否则只有当老大了,呵呵,进入这个行业一年多时间了,有些感受,学到了很多,也走了不少弯路,在这里...

    嵌入式LINUX学习指南

    高手总结出来的学习嵌入式Linux的指南,其中介绍了一些经典的书籍,掌握嵌入式Linux的学习方向,少走弯路,需要的朋友可以参考参考

    嵌入式数据结构基础学习

    嵌入式数据结构是指将一个数据结构嵌入到另一个数据结构中,以实现复杂的数据组织和关联。它在嵌入式系统开发中非常常见,可用于表示硬件寄存器、设备驱动程序和网络协议等。 嵌入式数据结构的学习包括以下方面: ...

    嵌入式硬件工程师必读

    想成为一名优秀的嵌入式硬件工程师需要掌握哪些知识呢?必备的技能有哪些,学习方向如何以及工作职责是什么,都是我们这些嵌入式硬件工程师必须了解的内容……下面就跟随小编的步伐来了解吧。

    嵌入式基础与实验

    嵌入式基础与实践,有助于你学习嵌入式,更好的帮助你快速入门掌握

    嵌入式系统基础及应用

    本书主要介绍了嵌入式系统领域研究和开发所涉及的基本知识,结合嵌入式系统理论和实践方面的最新进展,以嵌入式系统工程...同时,本书还安排了丰富的实验内容与课后实践,使读者能够边学边用,更快更好地掌握所学知识。

    嵌入式Linux开发环境的搭建

    掌掌握嵌入式交叉编译环境的搭建 掌握嵌入式主机通信环境的配置 学会制作交叉编译工具链 学会配置Linux下的minicom和Windows下的超级终端 学会在Linux下和Windows下配置TFTP服务 学会配置NFS服务 学会编译Linux内核 ...

    嵌入式系统及应用 PPT 课件 PDF版.zip

    课程配套有深度有内容的实验实践活动,由浅入深,实用性强,具有较强的产业开发背景,加深学生对理论知识的理解和掌握,提高嵌入式系统相关工程软件的开发能力。 嵌入式微处理器方面,我们详细解读了ARM处理器的编程...

    [嵌入式软件].拉伯罗斯.扫描版

    《嵌入式软件》体系完整、内容翔实,注重实用经验和技巧的分析、讨论,各章各有侧重又相辅相成,主要面向具有嵌入式系统基础知识的、从事嵌入式软件设计与开发的专业技术人员,对其他嵌入式技术领域的从业人员也颇具...

    嵌入式linux内核驱动学习大全

    希望掌握 ARM 平台底层编程技术的学员;以及希望从事移动终端开发的爱好者、工程师、程序员、 已及相关行业的工程技术人员;有志于从事嵌入式核心研发的软件开发技术人员和正在学习计算机、软 件、通信专业的学生,...

    嵌入式 系统概论

    嵌入式技术是近年来日渐普及...通过本课程的学习,使学生了解嵌入式体系结构及嵌入式系统操作系统、嵌入式产品设计等方面的知识,需要掌握嵌入式系统设计的典型开发工具,使学生初步具备嵌入式系统软、硬件的开发能力。

Global site tag (gtag.js) - Google Analytics