腾出手来,认认真真写一篇嵌入式的文章,谈谈我的学习历程。希望对你有所帮助。
介绍一下背景,我是学计算机的,还是专升本的。大一大二上的是软件学院,然后专升本考了个二本,也就是说大一大二的时候学的是纯面向应用的开发,学了一年半的Java,都是高层开发,对底层是毫无了解的。当时也没有系统的学习过操作系统、组成原理的知识,好在我还算是上进,主要还是兴趣所致,对计算机认识比较到位,所以平时也积累了不少操作系统的知识和编程思想。到了本科,有了操作系统和组成原理的相关课程,因为之前自己的积累,学起来还是比较轻松的吧。在大三结束的这个暑假,大家都在忙着考研的时候,我感觉我嵌入式方面算是入门了吧。
开始。
萌芽:我是这么萌芽的,首先我对智能手机非常感兴趣,这也加深了我对操作系统的认识。高中就开始听别人说智能手机牛逼,放电影不用转码,有后台,当时我就充满了幻想,时时关注着dopod的新款手机,当时大多数人还不知道多普达或者HTC是什么牌子,我却在默默地关注着。高三毕业,遍拿着积攒的2000多块钱跑到郑州百脑汇买了部dopod C730,也就是HTC E650,全球第一款搭载windows mobile6.0的手机,数字键盘+侧滑QWERTY全键盘(当时智能机用户比较少,虽然现在smartphone停产了,当时还是很high的),这手机算是给我攒足了面子,我也顺道了解了什么叫主频、wifi、RAM、ROM、刷机、SPL、windows mobile ……等知识。当时我哥用的Nokia的变形金刚5700,顺道也了解了Symbian没有Mobile的系统强大。虽然有着这方面的爱好,但是只是业余的在积累相关知识,纯属兴趣。学习方面还是并没有涉及到相关知识,好在我选的专业是Java,接触了点J2ME的知识,算是相关吧。
冲动:真正决定要学这个还是受第一暑假的影响。大一暑假去学比较早,当时还没有开学,闲着无聊和路子去老师办公室转了一圈,当时看到宽哥(我的的一个比较牛逼哄哄的数据结构老师)的办公桌上放这个东西,电路板,有好多接口,还有好多线连在电脑上,我一下就被吸引了,问了老师才知道这东西叫ARM,然后的好多天,可以说从那以后我都在想这东西。离开办公室开始就在查相关的资料,摸清了ARM是什么东西,应用方向,及相关的简要知识,我更是无法自拔了。我这人比较脑热,也比较激动,也不是很恋财,当时就想着我也要买个板子,其实对于当时来说,2440的板子+Jlink是600多,不到700。是个不小的投资吧,对学单片机(其实当时我还不知道什么是单片机)的来说,更是如此,因为它较单片机来说是贵的太多了,好在那个学期我拿了3000元的奖学金,正好又碰到网上群里的伙计一块儿团购板子,要比自己买便宜个二三十吧,于是果断的买了。当时在买之前一直在看arm Linux的视频,讲的是Linux的进程创建、调度、内存管理了什么的,可以听懂但是记不住,因为这东西用的话一次就刻骨铭心,当知识点去记忆的话,也就那么一会儿。拿到板子时应该是到了大二的下学期了,当时我也没带电脑,就是用朋友电脑的超级终端连了一下板子,看了看串口输出,然后趁着五一回家,就把板子放家里了。因为还要准备专升本考试,一直在学习英语和数学知识,同时还在自修操作系统,因为只学两门课很是乏味,天天自习自习。这半年我也开始接触哲学,思想也在慢慢升华。
搁置:这板子一放家里就是半年,到专升本考完试,到大二暑假。一直在放着,但是心里边没把它忘了,毕竟六七百买的,没事还是会进到,里边的QT界面下看看。当时可能选择专升本就是想着给自己两年的时间来学这个吧。
继续。
到了大三,此时已经是换了学校,大专毕业,上的本科了(ps:我们专科两年)。想着既然选择了就必须走下去,所以买了本《嵌入式Linux应用开发完全手册》盗版的,书+运费才35。除了平时上课,自己也会抽时间看看,但是说实话,书是看了,但是都是似懂非懂的那种。大三上半年过得很快,没什么成长,好在开的有C++、操作系统、组成原理的课,这对后来的学习很有帮助。
到了大三下期,时间比较充裕,因为寒假时看了一本电子版的好书《Linux 内核设计与实现》,看了几张,很好理解。因为我已经意识到ARM嵌入式与Linux的密不可分。正好开学后,我们学校图书馆有这本书,接了出来,看完了未看的章节。也有看《嵌入式Linux应用开发完全手册》这本书,不过没有微机接口的知识,看着还是很令人费解的。往开发板上烧过几次系统,写了一个点亮LED的程序,就这么,下学期过去了,虽然没有太多的长进,但是有些细节的成长,毕竟有些东西是在不经意间发生的。 “真正的速度是看不见的,就像风起云涌日落月升,就像你不知道树叶什么时候变黄,婴儿什么时候长出第一颗牙,就像你不知道什么时候会爱上她。”
进化。
大三暑假,对考研至关重要啊,纠结了好久,我还是没有决定考研。这个暑假对不考研的人也是同等重要的。我用了大约20多天的把上边提到的两本书重新看了一遍——《嵌入式Linux应用开发完全手册》、《Linux 内核设计与实现》,说来也神奇,这次一下子全明白了。可能是到了那个份上,该有的就有了吧。于是开始编译内核,移植根文件系统。赶紧就像是在打红警一样,刚开始是黑的,一点一点在探路,什么都是探到一点是一点,没有连成一片,到后来,建了雷达,一下子就明朗,地图连成了一片。并且还发现书里学的知识和微机接口的东西基本一致,只不过是换了ARM为8086.外设、总线、串口通信等其他的都差不多,这对这学期的微机接口课也有很大帮助,并且相互作用,对后续的驱动开发应该很有帮助的。
入门。
大四,已经对嵌入式Linux开发的相关知识都有了初步认识,及从网上友人那边得到的开发流程的介绍,现在应该算是入门了。我认为,入门不仅仅是知识体系的建立,还要有行业及行情的预估能力,还有就是对发展走向的思索。到目前,我的定位是移动智能终端的开发,因为移动互联网的时代已经到来,MID产业也开始“泛滥”,并且这方面对我的吸引要比做工控、监控、路由或者物联方面要大得多。所以刚开始强化android开发方面的知识,和驱动开发。Java是我的强项,kernel也是我所爱,android把他们完美的集成到了一块儿,并且顺应着移动互联网发展的潮流,似乎看到了什么锲机,你呢?
从软件到硬件是个漫长的过程,真正明白了才发现就是那么回事,写相应的控制寄存器就可以控制硬件的动作。主要是控制逻辑的编写,这些控制逻辑的细节就是驱动程序了。如果不用跑OS,就是裸机驱动,只用提供单一接口;如果要跑OS,就按照OS的标准接口去实现相应的机构与方法就好了。原本以为神奇而牛逼的驱动开发也开始日渐明朗,其实都一样。
学习建议:感觉这和考研一样,看好多书固然重要,不过集中地吃透基本书更加重要,吃透了某方面的一本书,你会发现其他的书的知识基本类似,看起来会更加的得心应手。还有就是可能刚开始没有头绪,嵌入式是个交叉学科,知识体系却是庞大,像我,刚开始是毫无一丝硬件知识的,现在也是没有多少,要看芯片的data sheet,要看开发板配套电路图,其实就是那么回事,慢慢的就懂了。贵在坚持吧。还有就是兴趣,兴趣是学习的最大动力。
前几天和朋友聊天还在说学习这方面的事儿,他选择的考研。是在我的影响下开始涉足这个领域的,当时他说的一句话很好:“现在这么努力考研,你那么努力的学,可能最大的动力就是嵌入式的发展前景了”。是啊,就是这个,如果你也预估到了这一点,坚持下去,绝对不会后悔的。
另外,兴趣绝对是学习的第一动力,要经常培养自己对该门课程的兴趣,尝试全方位的去了解它,一些漠不相关的信息都肯能会在后边的学习中帮到你。还要保持你的好奇心,人老心不老,越具有好奇精神,你就会越具有探索精神。比如你拿着U盘去同学那里考电影,一不小心发现优盘上印了个Flash,你会想Flash是什么东西?和网页动画的Flash有关系么?突然你又发现你手机的内存卡上也印着Flash标志,甚至还有个class 2、或者class 4……你不淡定了。你有种搞不明白这个问题就睡不着觉的感觉,于是你上网搜索,然后你就积累了nand flash 、Nor flash 的知识,甚至幸运的话你还会看到RAM 、 SRAM 、ROM 、EPROM 、EEPROM……等的字眼。然后你甚至没怎么留意这些东西。但是到后来,当你看嵌入式或者组成原理、微机接口的课程时你发现这些名词你貌似都见过,这样你就没有了别人的那种看到一大批名词而产生的莫名的恐慌,然后你就是轻声的回答了一下老师的问题:“这些好像都是不同技术实现的存储器”……这一说可不得了,一群不明真相的还摸不着头脑的学生便以为你就是那个沉溺多年的高手,开始在可下向你靠拢,哪天顺便的问了你一道你前一天才看过的一个问题,你很轻松的给他讲明白了……从此以后,他就以为你很厉害,有问题就会第一个来找你,还把你的厉害告诉别人,更多的人来找你请教一些东西,你同时被动的学了很多新的知识(毕竟一个人遇到的问题要比10个人遇到的问题少得多,接触的问题的多样化程度也少很多)。。。从此,你被传为佳话……其实好学生就是这么练成的,你学要做的就是比别人提前走那么一小步,然后别人便会祝你成功。而同时,如果你足够耐心、和善,你还会交到一大批知心的朋友。不瞒你,我就是这么走过来的,到了大学我才知道怎样学习,自发的去学习。现在非常感激当年的努力,呵呵,要谨记其实你也很厉害,你不比别人差。。。
有问题可以一块儿交流,学习的路上有个伙伴很重要。哈哈,这里还要感谢李哥对我问题的耐心解答,和Tony神的多次交流,以及仰天长啸兄还把我推荐给你老弟交流思想,十分感谢你们的帮助。。。。。
这是我所经历的过程,希望对您有所帮助。