您的位置:首页 > 其它

ARM从零基础到入门--告诉你这10天我都做了些什么--小白历险记--ARM之旅

2014-03-23 09:30 302 查看
如果你只懂得linux,知道它有一个终端,而且只知道两个命令,cd和ls,那恭喜你,你看这个文章的时候和我最开始做这个ARM的东西的时候基础差不多。

如果你想学学ARM,但是不知道中间会遇到什么问题,要怎么办?那也恭喜你,这边文章很可能会有你以后遇到的问题的情况

如果你想知道具体问题怎么解决,那还是恭喜你,这篇文章一点都没说,然后你可能会问,那这篇文章有什么用?我告诉你,多动手,多动脑,脸厚,心黑就能让你在10天学会怎么ARM开发。

其实写这篇文章就想让大家看看,即使咱们很笨,只要花心思,还是可以学会东西的。或许你比我聪明,都不会遇到下面的问题,如果你觉得自己不聪明,那可以往下看看,毕竟我花了一天写这玩意。不求给你带来什么实质的东西,博君一笑总可以吧。


苦逼的我不是学计算机出生的,以前玩linux都是冲着玩那华丽丽的特效,以及可以在女生面前装B才玩的,最近让我写一个ARM平台上的程序,苦了我。。

期间各种被鄙视。

“你知道串口么?。。不知道你还做个毛”

“你懂交叉编译么?。。。。不知道你搞个屁”

“你要弄一下驱动?。。。。什么,驱动都不懂。。我服了你了”

…………

……

然后就这样,买了一块开发板,然后各种崩溃,各种抓狂。现在还是什么都不懂,只能说点皮毛的。。

心得一、版本很重要

一开始没有注意到这个,结果各种抓狂,要么无法编译,要么编译了不能跑,这个下文慢慢解释

心得二、环境变量很重要

一开是连什么是环境变量都不懂(现在也只是迷迷糊糊有个概念),然后各种悲剧,弯路多多,所以不行的时候看看是不是这些变量设置有问题,下文慢慢讲我遇到的问题。

心得三、脸皮厚不厚很重要

一直扯不下脸皮问人,结果很多东西都是迷迷糊糊中给解决的,弄出来后和别人一说,结果立刻被鄙视“你居然不知道这个……”,,所以早晚都要被鄙视,不如一开始就被鄙视。

心得四、如果可以的话,千万别像我下面写的那样去做,只有我这样笨的人才会花这么久学这东西

接下来,讲讲我一开始做的时候遇到的一些担心的问题。

问:我需要看什么书?

答:我也不知道,买了什么的板子,就看他给的手册,找了一些ARM的书,感觉讲的都一样,所以到现在还没觉得什么书特别好的。尤其一点是,每个人做的时候都会遇到各种稀奇古怪的问题,这玩意没有哪本书会给你讲出来,所以个人感觉看书不如遇到问题了跑了去问人,然后去买的开发板的论坛上去问。这样来的实在一些。

问:买来的板子配了十几个光盘,几百个视频,什么时候才能看完啊,而且看完了就忘记了。

答:我也挨着看了很多,结果发觉很多用不上,个人认为,首先先自己弄出一次成功的实例后再看视频,可以加深理解,而且到时候看起来要快很多。或者一遍看视频一边做。

问:开发手册看得云里雾里,无从下手,怎么办?

答:我也一样,而且给的手册乱七八糟,也不知道先看哪个,这只能等自己成功做出几次后就会知道怎么看这些手册了,所以一开是就是一个痛苦的过程,忍一忍吧,过了前期就好受多了。

问:我按照手册上的步骤做了,但是遇到各种问题,就是不成功,怎么办?

答:这就对了,开发难的就是遇到这些问题,只能自己慢慢思考,总结经验了,一般错误都可以归结为”环境变量“错误、”版本“错误、”缺少必要依赖关系“错误,当然还有一些其他错误,有时候需要去改源代码,这些错误只能认真看编译过程中给的信息,如果看的懂,就知道怎么改,看不懂,恭喜你,问度娘吧,如果度娘也不知道,我也没招了,一般就是推到重新来几下。

废话说的很多(我就喜欢说废话),接下来转入正题:开始做开发,这边说说我做的过程,看看如何在什么都不明白的情况下跌跌撞撞。

第一天:

[html] view
plaincopy

买回板子的第一天,看着很牛逼,马上通电看板子上面有什么,然后看到了很多很”炫“的程序。再看看给的配置:一个串口线(问了别人才知道是什么的,以前一直以为是VGA的线)还有其他杂七杂八的东西。  

然后去电脑上找插口,找了半天没找到插哪里,然后被鄙视,  

朋友:“要用USB转串口“(我用的是笔记本)  

我:“原来如此……”。  

然后总算插上电脑了。  

接着迷糊了,怎么电脑没反映?  

问人。。第二次被鄙视,  

朋友:“哥,你装个minicom啊,不然怎么可以!”  

我:“什么是minicom?”  

朋友:“minicom就是minicom……%¥……%”  

我:“……”  

还是问度娘吧。度娘了一下minicom是什么东西,就去装起了。  

接下来又迷糊了,我怎么传自己的程序过去?接着又被鄙视  

朋友:“ftp啊,亏你是学网络的。。”  

我:“操,老子学的是协议,又不是应用程序…………!¥#&%”  

然后度娘半天ftp,没学会,让他过来教我,然后朋友华丽丽的一堆操作(后来证明也没那么复杂),中间各种小白问题,各种鄙视,还好我脸皮厚,熬过来了。  

最后自己就操作了一遍。  

就这样,第一天就在学这些东西的过程中过去了  

第二天:

[html] view
plaincopy

重整旗鼓,准备做开发,要做一个东西,第一反映就是做一个hello world 程序过去  

打开电脑,插上板子,然后传了一个自己写的hello world 过去,运行。。。。。操,一个提示:not found。。。。顿时无语,这啥玩意提示。  

接着找人,又一顿鄙视  

朋友:“你编译的是电脑上面的程序,放到ARM上怎么可能跑,就像电脑上面的程序用到手机上肯定不行嘛……”  

我:乖乖认错吧,然后问怎么解决。  

朋友:“要用到交叉编译工具”  

我:什么是交叉编译工具?  

朋友:“擦,这个都不懂,你还搞什么?#¥%……¥@”  

然后乖乖问度娘,大搞弄懂了,我:“我懂什么交叉编译工具,怎么装?”  

朋友:”光盘上面有,你怎么都不看看¥%¥……¥……“  

我:”……“  

然后乖乖看视频,然后找到光盘下面的交叉编译工具,开始照着做。。。顺便说一句,一开始小白,弄了两个版本的交叉编译工具,3.4.5和4.3.3的,这时候没注意这两个的区别,后面就吃苦头了。  

然后第二天就弄明白这些就过去了  

第三天:

[html] view
plaincopy

不能再被鄙视了,所以这天有什么问题我先问度娘,实在不行了再问别人。嘎嘎。  

然后看了一堆视频,讲的是什么bootloader,uboot,qtopia……,反正云里雾里,对着安装就好了,板子上面不敢动,就整电脑上面的吧,整点什么好咧?  

就qtopia吧,这个以后要用到,而且视频上面说的很神的感觉(现在感觉这玩意要不要无所谓,和我做的东西一点关系都没有)  

开始整。  

第一次编译就出问题了,为什么我知道出问题了,因为看视频的时候有讲到。  

出现的问题不一样?  

没关系,问度娘啊。  

中间各种苦逼,记不清当时吃的苦了,反正比苦草要苦,中间还被各种鄙视,最后朋友又是一堆华丽丽的操作,总算整成功了。  

晚上睡觉前,突然想起来那个hello world程序还没跑成功。但是对自己信心满满,感觉自己有一定基础了,应该木有问题了。  

第四天:

[html] view
plaincopy

(操,写了半天没了,重新写)  

第四天,用arm-linux-gcc编译了第一个arm下的hello world程序,然后又是那个可恶的错误:not found,你妹啊,就不能有些新意么!!  

或许有人说问,为什么不照手册上面的做一做咧?个人认为如果一个hello world 都不行,那个上面的肯定也不行,然后我就动手实践了一下,果然不行!!  

被鄙视多了,也会觉得难受是吧。所以这天打死不问别人。  

然后问度娘吧,结果度娘这天大姨妈来了,各种不行。。。果断抓狂了(其实是我什么都不懂,搜的方式有问题,结果没找到相关答案)。  

这样郁闷了一天,晚上2点上床,最后一次问度娘,度娘告诉我,为什么不试一试静态编译呢?然后各种兴奋,折腾了半夜,第二天早早的去了  

第五天:

[html] view
plaincopy

编译hello world的时候加入了-stable静态编译了,然后放到板子上一跑,果断木有问题,兴奋了,我找到答案了(晓得的人看这里肯定要笑了,这肯定是不行的,后来我会发现这边的问题的。)  

接着就试着照手册的做,然后一看傻眼了,用的是Makefile,怎么改Makefile啊?  

问人?还是不问?算了,还是被鄙视一下吧。。  

朋友:“送的板子上面有讲Makefile,你去看看吧”(居然没鄙视我)  

然后看视频,然后表情渐变,最后大骂,我操,还是没看懂怎么改Makefile。还是继续被鄙视吧  

朋友:“我也不会……”   

我:“……,那怎么整?”  

朋友:“没见过编程序是用静态编译的啊”  

我:“那就都是动态编译的?那怎么跑起来的”  

朋友:“动态链接库啊”  

我:“哦……”  

然后问度娘。。不过没怎么看懂。。  

第五天就这样在浑浑噩噩中度过了  

第六天:

[html] view
plaincopy

做什么都没干劲,视频不想看了,看了也不懂,程序也不想写了(我有写程序么),然后上ACFUN看文章,上BILIBILI看视频。  

调整好了心情(这也算学ARM?! 当然算了,周末不得休息啊)  

第七天:

[html] view
plaincopy

继续整我的Makefile,是不是因为我没链接上库?  

度娘又他妈大姨妈。。。。。。  

问人吧,平复好心情,厚着脸皮去问了,然后朋友一堆华丽丽(我形容词就只有这么多)的操作,结果证明是不行的,折腾半天没搞定。  

朋友:“你的思路有问题,不是这样来的,你要用的是Qt编程,建议你去看看Qt”  

我:“什么是Qt?貌似听过啊”  

朋友:“你qtopia都整了,还不知道Qt是什么,你有没有看视频啊!”  

我:“看了,可能是我忽略了吧”  

朋友:“……”  

然后果断查qtopia,最后发觉Qt它不是qtopia。。。。。  

不管了,先装Qt吧。已经开始混乱了,我都不知道自己在做什么了。问朋友Qt看什么书好?  

朋友:“……”  

好吧,我问度娘,然后买了2本书回来,开始啃  

第七天:

[html] view
plaincopy

Qt啃了大概有1个月(事实证明这玩意在ARM开发上必须用到,但是那个已经是在做开发了,和原来做的东西一点关系没有,我要的是把两边的环境给弄好,然后才能说开始开发。但是弯路已经走了,后悔也来不及了),为什么还是第7天呢,因为这一个月我除了弄明白怎么写一个Qt程序,和ARM一点关系都木有,所以不算学ARM的过程了。  

回来继续说,为什么不继续啃Qt了,因为经过一个月的折磨,我有了长足的“进步”,因为我熟悉了linux环境下的编程特点。  

弄明白了什么是动态库,什么是动态库,可执行文件的构成……中间鄙视次数没法数了。说出来自己都觉得可怜。。。  

这段时间基本就是在熟悉linux下的各种环境问题,之间还系统崩溃过一次,幸好后来找人抢救回来了。但是收获还是不少的。  

比如:  

在linux下可执行文件是ELF格式的,可以使用file <文件名>查看信息  

ELF文件里面分成各种段,什么代码段,什么数据段等等  

PC端的程序,可以使用ldd命令查看ELF使用的链接库信息  

ARM编译的程序,可以使用arm-linux-readlef -d 查询。  

在编译过程中需要注意各种环境变量,以及如何修改这些环境变量,很多细节没法说了,有空写个文说一下。  

了解了linux根目录下的目录结构,和一些常用的文件位置。  

什么是NFS,如何挂载NFS(虽然至今没挂载成功)  

……还有很多很多,有的都想不起来了,有空了整理一下吧  

上面是废话,第七天我在干嘛,哥告诉你,我在整NFS。  

然后结果怎么样? 答: 板子黑屏了,我不知道怎么改回来。  

怎么解决的? 答:还能怎么样。问度娘呗  

解决了么? 答:没有  

那打算怎么办? 答:睡觉去了。(我已经麻木了,有问题也懒得想了)  

第八天:

[html] view
plaincopy

其实也就是4月19号那天了。懒得想问题了,找人。  

我:“救命!板子罢工了”  

朋友:“格式化,重装”  

我:“哦?好的”  

然后格式化(很顺利),重装?怎么整,电脑重装还是会的,ARM上怎么整?  

用minicom?整了半天不行。被看到了。主动过来鄙视  

朋友:“哥,你连个dnw都没有,怎么可能行”  

我:“啊?dnw?”  

果断度娘,然后找了一个linux下的dnw,但是怎么整都不对。果断放弃,准备换到window下整  

没有驱动?网上下!(我用的是win7)  

没有dnw?网上下!啊!不,光盘里面有  

还要整什么?sourcecrt!网上下。  

不会配置?一个个试。不行问度娘  

经过一个中午的奋战,总算把准备工作弄好了,  

然后重装系统是要装?!不懂啊,我鬼知道要装什么。。。  

最后发现光盘里面有相关的资料,以前在linux下这些文件是乱码的,从来没看过,结果到今天才发现里面说的是什么,哭…………怎么不早点想到呢  

根据步骤一步步安装(其实是朋友在帮忙装,我在旁边看着的,之后我自己又重装了一次)就好了。  

因为送的光盘有很多已经那个编译好的了,所以免去不少时间,那些东西现在还是浮云,等有空了再弄!  

内核?选2.6.30的  

文件系统?操,看了一个月的Qt,所以无悬念选了Qt4.5  

整完这些,差不多一天又过去了。  

第九天:

[html] view
plaincopy

前天弄好了ARM板子上的东西,虽然装的过程很简单,但是很多东西一下子冲进了脑袋瓜子,版本这个词在我脑海中不断盘旋。  

以前不对是不是因为两边的版本不一样,结果不行? 然后果断找光盘,发现里面有arm-qt-4.5的源码包,拷过来,然后傻瓜安装(为什么是傻瓜安装)。因为厂商已经写好了脚本了,运行下就可以了,不过中间还是遇到问题,不过经过一个月的洗礼,这点问题还是难不到我的。秒秒钟解决。  

然后修改环境变量,编译程序  

OH,耶,编译成功了。很傻瓜的操作。  

然后检查:两本qt版本都对了,在板子上也有了对应的链接库。应该没有问题了吧!!  

或许你也猜的到结果怎么样,还是那个老错误:not found。  

啊,崩溃了。。。。我已经没办法了。  

事实证明有时候只要再坚持一下就有可能有转机,然后我冥思苦想,在消耗了一桶卷纸时,突然想到,qt库的版本能是对的,那内核的咧?  

然后果断用file命令查了一下编译出来的程序,发现是2.4.3的,而从板子上传过来的一个可以运行的版本是2.6.13的。看来原因就是在这里了啊。  

问题接囧(错字?no,后面的很囧)而来。  

后面就没想别的了,继续浪费纸了。。  

第十天:

[html] view
plaincopy

也就是昨天,到底哪里出问题了,首先,试着用arm-linux-gcc编译了一个自己的程序,发现版本是2.6.14的。结果用qt做出来就是2.4.3的  

找了很多资料,找到一个最靠谱的就是,让我改qmake.config,把里面的交叉编译工具改一下,感觉应该就是这个问题了  

结果很悲剧,编译的时候报错了,而且这个错误找了一天没找到。  

晚上的时候无意间发现,在普通用户下我的arm-linux-gcc是4.3.3版本的,但是在超级用户下就变成3.4.5的了,难道是这个原因?感觉不对,因为我改了qmake.confog了  

晚上睡觉前整理了一下自己的问题,发了人生中第一个问题贴。还把自己的思路给写出来了,结果没人回答。唉。。。。  

半夜突然想到有可能是因为我编译电脑上的qt的时候用的就是3.4.5,这样自然而然就错了。所以连夜重新编译了一次qt。  

第十一天:

[html] view
plaincopy

这天不算学习ARM,早上起来把新整的程序放板子上跑了一下,成功了。至此,一个艰辛的学习过程总算告一段落了。现在两边基本都能搞定。  

最重要的就是知道了怎么去查找问题错在哪里,花了一天时间写这些东西。就想发个牢骚,说说自己最近的苦逼生活。  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: