经验分享——嵌⼊式⼯程师必看书籍(转载)
从事嵌⼊式研发⾏业⼗年,认为学习就是要不断的吸纳知识,在研发过程中,经常会遇到⼀些问题,这种发现问题并解决问题的过程就是进步。 为什么选择学习嵌⼊式?
嵌⼊式系统⽆疑是当前最热门最有发展前途的IT应⽤领域之⼀,同时也是当今IT领域仅存的⼏个⾦领职位之⼀。当前的中国IT⼈才⾯临严重的“后继乏⼈”, ⽽且这种缺⼝由于培训缺乏、教育模式等原因造成的,⽽缺⼝最⼤的,就是⾼级IT⼈才。如果你从事的IT培训不专业,⾯对竞争越来越激烈的职场,基本不到 ⼯作。据专家预测,嵌⼊式每年⼈才缺⼝在30万左右。
嵌⼊式⾏业平均薪资分布
⼯欲善其事,必先利其器,除了推荐的书籍外,也推荐⼀下我⽤的开发板,我学习⽤的是飞凌的OK6410,感觉算是⼊门不错的板⼦,刚刚看到他们官⽅微博貌似A8的210和ARM9的2416准备促销呢,有50元的京东购物卡送,想⼊⼿的可以关注下。 ARM+Linux嵌⼊式底层内核驱动⽅向学习总体路线图 附上ARM学习路径图,希望对学习者能有所启发。
基础学习Ⅰ---Linux⼊门
⽬前嵌⼊式主要开发环境有 Linux、Wince等;Linux因其开源、开发操作便利⽽被⼴泛采⽤。⽽Linux操作系统也只是⼀个简单的操作系统,简单的使⽤对于嵌⼊式开发⼈ 员来说价值并不很⾼,真正有价值的是掌握Linux的基本服务和Linux的设计理念、思想,这对于嵌⼊式开发⼈员的长期发展是很极其重要的。Linux 系统有很多发⾏版,RedHat、Ubuntu、Fedora等。作为嵌⼊式开发⼈员,我们没有必要把精⼒放到使⽤哪个Linux发⾏版上,⽽是尽快把 Linux系统尽快安装好。如果打算坚持长期学习,那么建议您把⾃⼰的电脑做成双系统,⽽不要在虚拟机上安装。 A)经典书籍推荐:
B)经典学习视频推荐:Linux操作系统⼊门
基础学习Ⅱ---C语⾔
C语⾔是嵌⼊式开发必备的基础知识。在Linux下从事C语⾔的开发,你会觉得更为顺畅、更为⾃然,因为C语⾔是因unix的出现⽽诞⽣的,Linux内核⼏乎完全是由C语⾔编写完成的。学习C语⾔,如果不会⽤指针,那么就称不上会C语⾔。做嵌⼊式开发指针更显得尤为重要,所以做嵌⼊式开发除了掌握位操 作、限定词等,对指针的掌握是不可或缺的。⽽且要掌握多级指针、函数指针等等。涉及到指针,
那么就会讲到内存分配。在⼤学中,学习C语⾔⼀般的学习很少讲 到内存分配,但是如果期望从事嵌⼊式开发,那么就必须懂得C语⾔是怎么做内存分配管理的。指针之外,还要学习模块化编译处理、指针与数组、gcc、 Makefile、GDB、递归、结构体、宏定义使⽤等。C语⾔是整栋嵌⼊式⼤厦的基础,所以在学习嵌⼊式时,必须把C语⾔重视起来,多敲代码,多练。⼀ 名优秀的程序员必定是通过“体⼒劳动”再转向“脑⼒劳动的”,这也是为什么我们要有“写不出代码=0”思想的原因所在。
如果说C语⾔相当于⽂字,那么数据结构就相当于在造句、写⽂章。代码质量有⼀部分取决于对数据结构的掌握程度。在数据结构部分我们要把链表、树、排序作 为学习重点。⽽且我们也可以查看⼀些⽐较常见的函数(如strcopy、strcat、printf等)在内核中是如何实现的,以及编写代码模拟堆栈,这 不仅有利于编写代码质量的提⾼,⽽且还可以初步了解Linux内核精髓,为今后⼯作打下坚实的基础。
C++、QT在嵌⼊式开发领域,是⽤来开发图形界⾯的,希望从事上层应⽤开发及图形界⾯,那么在C++、QT⽅⾯需要⽐较深⼊的学习。
A)经典书籍推荐:
B)经典学习视频推荐:C语⾔⼊门
C)经典学习案例:
1、学员成绩管理系统
2、计算器
3、电⼦词典
4、⽂件压缩器
基础进阶---Linux应⽤程序设计
Linux的思想源于Unix。Linux继承了Unix的优点,但 是没有⽤UNIX的代码,所有程序都是重新编写的,⽽且Linux与Unix的源码级兼容。Linux 是类Unix操作系统。Linux 不仅符合 POSIX 标准,⽽且还包括其它 UNIX 标准的多种特性,例如,UNIX 的 System V 接⼝⽂档(System V Interface Document,SVID)和伯克利软件发布(Berkeley Software Distribution,BSD)版本。Linux 采⽤了折衷的策略,包含了 UNIX ⼏个典型特性当中最实⽤的⼀些功能:
Linux 采⽤了 SVR4 的进程间通信(IPC)机制:共享内存、消息队列、信号。
Linux ⽀持 BSD Socket ⽹络编程接⼝。
许多 Linux 发⾏版采⽤ SysV init 机制,⽀持运⾏级别。
此阶段的学习是从事嵌⼊式上层应⽤开发以及底层开发⼈员的必修课程。进程、线程、信号、⽂件锁、socket是这部分内容的重点。要把这些内容学的透彻⾮ 要下些苦功夫不可。⽽且函数是系统提供给我们的,难免要对计算机系统深⼊理解⼀番。TCP/IP协议也是要涉及到的。有问题建议⽤Google搜索及登陆 chinaunix论坛。通过这个阶段的学习,我们就可以初步实现⼀些应⽤程序的开发了,如做⾃⼰的shell命令解析器、简单的聊天软件、视频多播等。
A)经典书籍推荐:
B)经典学习视频推荐:Linux环境⾼级编程
C)经典学习案例:
1、串⼝监听程序
2、图⽚浏览器
3、MP3播放器
4、聊天程序
5、 ftp程序
6、⾳频⼴播程序
7、ping的实现
8、DDos攻击程序
9、ARP攻击程序
6、⾳频⼴播程序
7、ping的实现
8、DDos攻击程序
9、ARP攻击程序
嵌⼊式⼊门---ARM体系结构
从这部分开始,我们将真正进⼊嵌⼊式开发学习阶段。⾸先我们要知道采⽤哪种处理器。⽬前通⽤嵌⼊式处理器有ARM、MIPS、PowerPC、X86等。 从市场产品占有率上看,ARM处理器远远领先于同类其它处理器,并逐步掠夺传统51单⽚机和英特尔市场份额。据招聘⽹站统计,⽬前⽤⼈单位在技术
⽔平上要 求开发⼈员掌握ARM9及以上平台的开发技术。ARM公司在发布ARM11产品后,更改以往的数字标记更新⽅式,转为发布ARM
Cortex。但是Cortex并不是更⾼端,⽽是全新系列的处理器,⽐如Cortex M3,它主要应⽤于机械加⼯、⼯控领域,⽬的是取代以前的ARM7处理器。 在开始学习前,建议有⼀块⾃⼰的开发板,⽬前ARM9 2440的开发板价格在400-600元之间,ARM11 6410的开发板价格要⾼⼀些,最便宜的也要1200元以上。在此,提醒⼤家尽量不要买mini开发板,虽然mini开发板的价格要便宜些,但是与正常开 发板相⽐,mini板功能是不完善的。嵌⼊式汇编有别于X86汇编,所以如果以前没有接触过汇编语⾔,那么没有必要先去学X86汇编再学嵌⼊式汇编,可以 直接学习嵌⼊式汇编。除了汇编我们还要学习ARM指令集。有了开发板,我们要下载相对应处理器的DataSheet及开发板电路原理图。ARM体系结构的 学习我们是不能完全照抄别⼈代码的,因为我们⾃⼰⼿中的开发板及处理器与别⼈是不同的,除⾮所⽤的代码是根据你⼿中的开发板来编写的。所以,我们要先去看 书、看视频资料理解原理及⼯作⽅式等,然后根据⾃⼰开发板的电路原理图和DataSheet来编写代码,达到理解外围设备⼯作原理和操作硬件的⽬的。
B)经典学习视频推荐:
1) 嵌⼊式扫盲篇——⼗问嵌⼊式
2)ARM体系结构与Bootloader开发
3)嵌⼊式ARM Linux开发——ARM汇编
C)经典学习案例:
1. ARM模拟器开发
2. Watchdog控制程序
3. RTC时钟控制程序
4. Uart控制程序
5. LCD控制程序
6. 触摸屏控制程序
7. DMA控制程序 8. ⾳频控制程序 9. ⽹卡控制程序
10. ⽂件系统制作 11. ARM-Linux移植
嵌⼊式提升---Linux内核、驱动
众所周知嵌⼊式开发包含⾄少两个级别,⼀个是嵌⼊式内核驱动级别,另外⼀个是嵌⼊式应⽤层开发,⽽薪酬⾼的、最具价值的⽆疑是嵌⼊式内核驱动级别的开发 者。真正的嵌⼊式⾼⼿或者企业中的核⼼开发⼈员,⼀定是嵌⼊式底层的内核驱动开发⼯程师,这些⼯程师成长⽐较缓慢,造成对内核驱动⼈才的⼤量需求,所以这 些⼈才是真正企业需要的⾹饽饽。掌握驱动开发会让⾃⼰的核⼼能⼒有极⼤的飞跃,真正实现嵌⼊式最有价值的就业。
由于Linux内核更新速度很快,书籍和视频不可能及时更新,所以我们再看书和视频后,要⾃⼰动⼿下载内核源码包,去看内核中的代码,在这⾥可以充分检验 C语⾔、数据结构等基础知识的掌握程度。⽽驱动的编写还是要借助外设硬件电路原理图和芯⽚⼿册。内核和驱动的知识是让我们根据不同的硬件,编写对应的驱 动、合理剪裁内核、制作⽂件系统,并移植到硬件开发板上。如果⼿⾥有ARM11 6410及以上的开发板,可以试试在裸板上编写驱动并移植Android系统到开发板上吧。
B)经典学习案例:
1. GPIO驱动
2. RTC时钟驱动
3. WatchDog驱动
4. Udev移植
5. 触摸屏输⼊设备驱动
6. LCD显⽰设备驱动
7. DMA驱动
8. ⾳频设备驱动
9. Nand Flash块设备驱动
10. ⽹络设备驱动
硬件⼯程师的书籍(等等)
, ,