目前嵌入式系统采用的操作系统主要有LINUX、WINCE、VxWorks等。
值得尝试的路线
路线一:C语言是所有编程语言中最强的,单片机、DSP、以及各种类似ARM的芯片的编程都可以用C语言来完成),所以必须掌握的非常熟练。

推荐书籍:《C程序设计语言》这本经典教材是外国人写的,还有中文翻译版。
路线二:操作系统原理必不可少。如果你是计算机专业毕业的,那无所谓。如果你不是计算机专业,那一定要找一本比较简单的计算机原理书看,了解什么是“进程”、“线程”、“系统调度”等基本问题。
路线三:Linux操作系统是用C语言编写的,所以也应该先学习Linux编程,能够应用之后才能进一步理解其内核的精髓。
推荐书籍:《UNIX环境高级编程》(第2版)
路线四:了解ARM的架构、原理、汇编指令。在嵌入式开发中,我们很少会写汇编,但最低要求是能看懂ARM汇编。
路线五:移植系统的时候,需要从底层开始。
它从bootloader开始,然后是内核移植,文件系统移植等,移植部分对硬件的依赖性很强,而且其配置步骤相对复杂,目前没有太多详细的资料。
路线六:驱动程序开发。
Linux驱动程序设计既是一个非常具有挑战性的领域,也是一门深奥的学科。
Linux驱动设计本质属于Linux内核编程的范畴,所以对Linux内核和内核编程都有要求。学习之前需要了解Linux内核的组成,因为如果要详细研究每个部分,那可以展开成一本厚厚的书。
以上只是大致的框架,实际开发中会涉及到很多东西,比如交叉编译,makefile,shell脚本等等,所以嵌入式系统学习周期长,门槛高,自学需要很强的学习能力和专业技能,只要你能坚持下去,就一定能成功!
嵌入式的四个分支
对于我们初学者来说,应该首先学习以51为代表的单片机,掌握了51之后,再去深入学习更难的东西。
当然不是说你只需要学单片机;如果想学好单片机,还得学C语言,汇编语言,以及大量的应用软件;当你掌握了单片机之后,还需要自己设计原理图,PCB板;还要掌握系统设计的工程管理等等。
ARM+LINUX路线,专注于嵌入式Linux操作系统及其应用软件开发目标:
(1)掌握主流嵌入式微处理器(初步定义为ARM9)的结构与原理。
(2)必须掌握一种嵌入式操作系统(初步为uclinux或者linux,版本待定)。
(3)熟悉嵌入式软件开发流程,并完成过至少一个嵌入式软件项目。
从事嵌入式软件开发的好处有:
(1)目前国内外该领域的人才短缺,一方面该领域的准入门槛较高,非专业IT人员很难进入该领域;另一方面由于该领域比较新,目前发展速度过快,大多数人还不具备接触该领域的条件。
(2)不同于企业计算等应用软件,嵌入式领域人才的工作强度通常较低(但收入也不低)。
(3)如果要创业,开发自己的产品,嵌入式系统不像应用软件那么容易被盗版。硬件设计一般都是找其他公司定制(这就叫“OEM”),都是通用硬件,我们只要把软件设计出来,就成了自己的产品。
(4)兴趣最重要。
从事嵌入式软件开发的缺点是:
(1)入行门槛比较高,用到的技术往往比较难,如果你没有很好的软件和硬件基础,尤其是没有很深的操作系统级软件功底,可能不太适合干这一行。
(2)该领域的公司数量远少于企业计算领域的公司数量。
(3)少数公司做嵌入式往往要求硕士以上学历,主要是因为嵌入式比较难,但大部分公司没有这个要求,只要有经验就可以。
(4)平台依赖性强,更换平台困难。
兴趣来源:
1、成功的概念不同,没有浪费生命就是我的成功。
2.喜欢思考并挑战逻辑思维。
3.喜欢C语言
4、喜欢低级开发,讨厌VB类型的开发工具(并不是说VB不好)。
5、发展前景好,适合创业,不想快要死了才去做工程师。
方法步骤:
1.基础知识:
目的:能够理解硬件的工作原理,但重点关注嵌入式软件,尤其是操作系统级软件,这将是我的优势。
学科:数字电路、计算机组成原理、嵌入式微处理器结构。汇编语言、C/C++、编译原理、离散数学。数据结构与算法、操作系统、软件工程、网络、数据库。
方法:科目虽然多,但都是比较简单的基础,大部分都掌握了,不需要全部学,可以根据需要选择选修课。
2.学习Linux:
目的:深入了解Linux系统。
方法:用Linux—〉LINXU系统编程开发—〉Linux内核驱动开发与分析。先看深入版,再看主要原理。看几遍后再看情景分析,与深入版对比。两本书是交叉的,深入版是提纲,情景是目的。分析版是0.11,适合学习。最后再深入代码。
主要图书:Linux内核完全解析、Unix环境高级编程、Linux内核深入理解、场景分析及源代码。
3.学习嵌入式Linux:
目的:掌握嵌入式处理器和系统。
方法:
(1)嵌入式微处理器结构及应用:直接学ARM原理与汇编就行,不用复习x86了。
(2)嵌入式操作系统:ucOS/II简单,开源,适合初学者。然后深入研究uClinux。
(3)你必须有开发板(arm9以上),并且如果可以的话能够参加培训(你会进步很快,还会交到一些朋友)。
主要书籍:毛德操《嵌入式系统》及其它arm9手册和arm汇编说明等。
参考网站:嵌入式Linux中文站:
4.深度学习:
A.数字图像压缩技术:主要掌握MPEG、MP3等编码、解码算法与技术。
B.通讯协议及编程技术:TCP/IP协议、802.11、蓝牙、GPRS、GSM、CDMA等。
C.网络与信息安全技术:如加密技术、数字证书CA等。
D.DSP技术:数字信号处理,DSP处理器通过硬件实现数字信号处理算法。
注:太多细节就不解释了,可以根据实际情况调整。重点是1和3,不必严格按照顺序。对于学习C++,原因是C++不仅仅是一种语言,一种工具,更是一门艺术,一种文化,一种哲学,而不是用来炫耀的东西。对于Linux内核,学习编程,阅读一些优秀的代码也是必要的。
注意:一定要学会举一反三,基础扎实,看一看就能学到很多东西。要想成为一名合格的程序员,必须精通至少一门编程语言,有良好的逻辑思维,理论联系实际。
不要只研究技术。虽然挤出时间很难,但你还是应该留出一些空间来发展其他爱好,比如太空、素描、机械、管理、心理学、游戏、科幻电影。还有一些事情你不想做但必须做!
技术是通过编程和编程创造出来的。永远不要梦想一步登天,不要浮躁,不要觉得路很长。而是应该编程、编程,再编程、再编程!
等待机会来临,去创业(不要相信奇迹,盲目创业很难成功,即使成功,发展空间也未必很大)。
推荐一些嵌入式书籍:
Linux 基础
1. Linux 和 Unix Shell 编程指南
C 语言基础
1. CPrimer Plus,第 5 版(作者:Stephen Prata)
2.《C 编程语言》第二版,作者:Brian W. Kernighan Dav
作者:idM.Rithie (K&R)
3. UNIX环境高级编程,第2版(APUE)
4.《嵌入式Linux应用开发详解》
Linux 内核
1.《深入理解Linux内核》(第3版)
2.《Linux内核源代码情景分析》毛德操、胡希明著
研发方向
1. UNIX 网络编程(UNP)
2. TCP/IP详解
3. Linux内核编程
4. Linux设备驱动程序开发(LDD)
5. 杨宗德的《高级Linux编程》
硬件基础知识
1. ARM架构与编程(杜春雷著)
2.S3C2410数据表
英语基础
1.《计算机与通信英语》
系统教程
1.嵌入式系统:架构、编程和设计
2.《嵌入式系统——使用开源代码和StrongARM/Xscale处理器》作者:毛德操、胡希明
3.构建嵌入式Linux系统
4.杨宗德著《嵌入式ARM系统原理与案例开发》
理论基础
1.算法简介
2.数据结构(C语言版)
3.计算机组织与架构性能分析
4.《深入理解计算机系统》作者:Randal E. Bryant David O''Hallaron
5.操作系统的本质与设计原则
6. 编制原则
7.数据通信和计算机网络
8.数据压缩原理及应用
推荐一些C语言方面的书籍
1. C 编程语言
2. PointersonC《C和指针》
3. C 陷阱和陷阱
4. ExpertCLanuage《专家C编程》
5. 编写干净的代码-----微软开发无缺陷 C 程序的技术《编程精要--微软编写高质量无缺陷 C 程序的秘诀》
6. 使用 Can 和 C++ 编写嵌入式系统程序
7.《C语言嵌入式系统编程》
8.《高质量C++/C编程指南》作者:林睿
综上所述
尽可能多地编写代码。你需要学好 C,而不仅仅是 C 本身。算法、架构等都很重要。这里的许多书只是推荐,所以不要太在意它们。关键是基础知识,这是最重要的!