最近有几个大三大四在校学生问我,对于一个小白,怎样学习嵌入式?听到这个问题也是相当熟悉了,当年我也是充满着好奇进入了嵌入式这一行,并在嵌入式这一行发展至今,这里我就统一给大家解读一下怎样学习嵌入式。相信很多在读学生,特别是电子、物联网、嵌入式等相关专业都对这个问题充满了困惑。希望通过下面的讲解能够对迷茫困惑的你有所帮助。
首先在学习嵌入式Linux之前,肯定要有C语言基础。可能现在在看文章的你,是物理、生物、化学或者跟理科毫不沾边的专业,没有学过C,不过没关系,因为在当前的教育体系下,就算是大学是相关专业主修C语言,那他的语言基础也是一般话(学的好的不要生气,我有了解过,大部分普通本科学校都存在的现象),所以大家相当于是统一起跑线。说了这么多,要想学习嵌入式,首先要掌握C语言,它是基础,而且C语言学会后,其他的语言像C++、java、python、html就会变的非常简单,只是语法的问题。
那C语言要学到什么程度呢?越熟当然越好,如果时间有限的话最少也要具备基本技能。数组、指针、函数、结构体是需要必须掌握的,那如果大家未来的发展方向是做底层系统的话,那函数指针、数组指针、二级/三级指针就是得相当熟了。那怎么学C语言呢?初学者不建议看书,先从视频入手,因为视频上老师讲的内容都是把书本的知识进行了提炼,所以看视频学习效率是最高的,要想学好C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决;执行出错没关系,自己去分析;多找一些数学题目锻炼自己的逻辑思维及编程能力。对于编译环境也是有众多,像vc是大学里常用的,学习嵌入式的话可以直接安装虚拟机,在linux下写程序即可。
那现在提到linux,也是学习嵌入式必不可少的,linux的基本命令,像ls、cd、cp、mv、vim、软件安装工具、网络配置、压缩解压工具、shell脚本的编写、Makefile的编写等等,掌握这些内容对后面学习嵌入式就足够了,如果还有其他的就再补充呗。
回到主题,首先我们要明白你的目的是什么,大概来说所谓嵌入式Linux可以分为两部分:底层系统、应用开发。
如果你是想做应用开发,那么你去把C语言、数据结构、进程线程、网络编程、数据库、C++、QT学好吧。嵌入式应用开发和PC上的应用开发并没有什么特别要注意的。也许你说在嵌入式上要做些优化,是的,要优化,但是未经优化的程序和PC上的程序开发没什么差别。另外,当你有能力去优化时,你已经不用来问这个问题了。具体到某个例子,比如说开发界面,在PC上我们用VC;在嵌入式Linux里也许我们用QT也许用Android,这个时候你应该去学学QT、Android的编程。但是基础还是C或JAVA,在此基础上去熟悉它们的接口。你学过VC的话,也是要花时间去了解那些类、控件的。如果你的目的是想学习底层系统,这是我的专长,倒是可以说一点。在回答这个问题之前,我先回答:不少人问我,到底是学驱动还是学应用?我只能说凭兴趣,并且驱动和应用并不是截然分开的
1. 我们说的驱动,其实并不局限于硬件的操作,还有操作系统的原理、进程的休眠唤醒调度等概念。 想写出一个好的应用,想比较好的解决应用碰到的问题,这些知识你应该懂
2. 做应用门槛低,特别是现在的ANDROID,纯JAVA。做应用的发展路径个人认为就是业务纯熟。比如在通信行业、IPTV行业、手机行业,你了解行业的需求。所以,做应用的多数会转成做业务的。
3. 做驱动,其实我不想称为“做驱动”,而是想称为“做底层系统”,做好了这是通杀各行业。我工作几年,做过手机、IPTV、会议电视,但是这些产品对我毫无差别,因为我只做底层。他们的业务跟我没关系。 当应用出现问题,他们解决不了时,我就会从内核角度给他们出主意,给他们提供工具。做底层的发展方向,个人认为是技术专家。
4. 其实,做底层还是做应用,之间并没有一个界线,有底层经验,再去做应用,你会感觉很踏实。有了业务经验,你再了解一下底层,很快就可以组成一个团队。
说了这么多,那对于嵌入式的底层系统方向需要学习什么呢?如果之前没有接触过板子,完全可以直接从ARM入手、bootloads、移植操作、内核驱动代码编写、android系统开发。
最后还是那句话,学习嵌入式还是不建议单纯的看书,像《Linux设备驱动》这本书就有上千页,书可以在有一定基础后当甜点来看,初学者还是建议如果有资源的话从网上找视频观看(但是视频缺点是不够系统连贯)或者资金允许可以参加一下系统培训。虽然嵌入式的相对难些,但学好后,行业通杀,想换行就换行;想自己做产品就自己做产品;相比做应用程序的人,不会被经常变动的需求搞得天天加班;门槛高,当然薪水相对就高。
以上就是我今天的分享,希望还在奋斗的你们有所指引。