|
两年前在博客上发的,看到很多网友对arm+linux很迷茫,现在把这篇文章转过来,希望能对大家有点帮助
前言,记得05年学习单片机的时候,老师跟我说学完单片机学一下arm吧,arm以后肯定很火。那时候我还不知道什么是arm。后来才知道arm是个很强大的cpu,还可以装linux。大四第二学期的时候终于把单片机搞得有声有色了,搞了个蜂鸣器唱生日歌的东东送给女孩子,还搞了个16x64点阵显示牌,可以显示汉字左移右移,当时那个开心啊,终于体会到搞电子的乐趣了。知识永远是推陈出新的,不甘落后的我只能去不断地学习新的技术,听说avr速度比51快,就学了一下avr,发现它和51差不多,于是便转向了arm。学arm要有块开发板吧,可是44b0公板出来的时候那个贵啊,一块板子就要4百多,自己是穷学生没办法只能看着别人买眼馋,后来在网上看到深圳有个网友自己做板卖,才250元,买了开发板便开始了arm的学习之路了。
然而arm的并非想象中的那么顺利,bootloader启动代码等在单片机中从未有过的概念让我困惑了好长一段时候,arm汇编指令的学习也因为没有得到实际的验证而难以理解。如今想起来如果当初能有一个项目在做,先不去弄启动代码的话,也许弯路不用走那么长。那时在学校还不怎么会利用网络,都是靠书本来学习的,但发现书上讲的并不详细,我心中对启动代码的疑惑还没能解开,arm启动代码是怎样把code从nor flash中拷贝到sdram中的,我几乎看遍了市面上所有有关arm的书,都没有一本是仔细讲这个问题的。对于从单片机汇编转向arm C语言的我来说,C语言的执行环境问题也曾困扰着我。而这些问题我在书上、网络上找了好久都没有得到理想的答案。
其实arm并不难,难只是比单片机多了启动代码bootloader的概念。那时学arm汇编最好的书是周立功出的,周围的朋友都是用他的书来学的,于是我又买了他的板子加书,书是讲得不错,但他用的芯片和三星的完全不一样,启动代码也不一样,而启动代码被我看作是最关键的地方,最终easyarm也没有学好。
这时已经是07年了,中间经历了06年毕业找工作,搞过一阵子CPLD,后来想用单片机搞U盘,MP3没搞成,中间很少去搞arm,只是偶然看看书,也看了ucosii。工作有点钱了,买过好多板子,什么都搞,51,avr也搞了一阵子,easyarm2104,easyarm2131,44b0也搞了一下,都是在流水灯蜂鸣器原地踏步。08年搞了块2410的板子,开始玩linux了,也在网上下载视频来看,照着装了个虚拟机vmware,装了个red hat 9(现在不用这个了,用ubuntu或fedora,免费且下载软件方便),开始看linux的书了,知道了很多,知道怎样编译linux内核,知道有《深》和《情》这两本书,知道《linux内核设计与实现》这本书,虽然都没怎么去看,但对系统有了一些概念。开始看arm9的书,看2410的裸机代码,对启动代码也逐渐有了清晰的概念。
09没想到我也参加了培训了,这时才开始对驱动有了更深的认识,培训和视频讲得差不多,现在视频也比那时详细多了,个人认为不是很必要去培训,培训的好处是把你的时间聚集了起来,如果平时你能花那么多时间去学习它的话相信也会很有效果的,另外就是有人给你解答问题,很遗憾关于启动代码的问题培训老师也没能给我满意的答案,但我已经差不多弄懂了。
这时候,我的嵌入式linux已经开始入门,原来搞单片机的公司已经不能满足我的兴趣爱好了,我选择了辞职。在家里闭关学习三个月再出去找工作,我从最简单的启动代码写起,然后在上面添加LED,按键,TIMER,串口,NOR FLASH,NAND FLASH,I2S,DMA,LCD等测试代码。没两三天写一个测试模块,几乎把2410所有资源都搞过一遍了。还把UCOSII加了上去,加上UCGUI,UCFS,感觉挺有成就感的。离职最主要的目标是把linux和qt移植好,所以我从头开始构建了内核,根文件系统,qtopia。离职最大的好处是自由,但最大的问题是经济,几个月花了不少钱,于是我又开始找工作了。去了一家做pda的公司,开始嵌入式生涯了。
|
|