您的位置:首页 > 其它

嵌入式学习入门 转

2006-08-23 20:28 246 查看
明:这是我总结了自己学习这门学问的一些体会,尽量把问题说明白。作为菜鸟,我很清楚,往往 在技术论坛问一个问题,高手回答一句,自己得琢磨半天。不能怪回答问题的人,人家又不是非得回答你,能给点提示已经很不容易了。因此,我尽量把文章写得让 以前一无所知的同学能够明白。如果有什么不明白的,一定提出来,我再详细解释。
还有,非常重要的一点,我不能保证文章里的所有东西都是对的。
再有,可能会不知不觉地引用别人的文章,以节省自己的打字时间,请大家理解。
PS: 既然说到嵌入式,肯定会说到Linux,不过我并不打算把这个文章写成Linux入门。我只会告诉你,你不会Linux?先找本入门的书看。
又PS: 通信工程专业是不会开设嵌入式课程的,电子的同学在大四上的时候周金和老师会开一门课。所以通信工程专业的同学有点可惜啊。不过我也是通信工程的,呵呵,一直缠着周老师争取机会吧。
再PS(大家不要打我):我在文中提到的软件包,过一阵我会尽量把它们整理出来,放到59.64.74.100里面给大家下载的。

那么开始吧。

先 介绍一下自己学习嵌入式的历程。大三上学期选修了C51,51芯片就是嵌入式系统,算是开端吧。大三下学期的,正好周金和老师招人参加Intel赞助的嵌 入式竞赛。我和班上的另两位牛人(pft和我宿舍的大哥)一起报名参加了。他们两个人都很有特点。pft学习非常好,理论基础特别扎实。经常有学弟学妹问 我,学这些专业课有什么用。我觉得pft的经历就告诉了大家,你信号与系统学好了,就是非常非常有用。在竞赛中,pft负责图像和语音压缩,如果没有信号 处理的知识,你编程能力再强也是屠龙之技罢了。大哥呢,则是非常卖命的一个人,只要他想做一件事,那真是没日没夜的钻研。大三下,大家都在准备考研。我们 三个也不例外,时间很紧张。要抽时间去实验室,要抽时间复习,要抽时间上课。那时候,大四的学长带着我们,当时他们在周老师手下做毕业设计。我个人的学习 过程是这样的:因为大一的时候我就选修过Unix,对Linux算是有了基础。所以,那个时候就熟悉硬件开发板,自己尝试写一些程序到板子上运行。就这样 慢慢地进入状态了。到后来就水到渠成了。2004年5月,比赛正式开始。到9月份结束。最后我们学校获得了3等奖。应该是非常不错了。因为去看过获奖作品 演示,有些学校的作品真是XXX,全是靠学校的招牌。当然,也有做得非常好的,跟他们比有很大差距。

上面的经历涉及到的术语(如果有出现),你看不懂也没有关系,下面我来谈谈一些基本问题。

1. 我什么基础都没有,该怎么学习嵌入式?

没关系的,只要你有兴趣!

1.1 在我谈到具体技术之前,先给大家一些建议:
a 好好利用搜索引擎。在碰到问题后,最先想到得应该是去网上找找答案。百度和google应该是经常去的地方。比如说装Linux出现了n多问题,最好的办法是上网找答案,而不是去找个nb的学长帮你装完。真正山穷水尽了,那就不要怕羞或者怕人笑话,尽管找人问吧。
b 好好利用学校的图书馆。大家都在抱怨学校书少,真正利用了图书馆资源的没有几个。常去借书绝对是应该的。在此,强烈推荐大家使用超星电子图书。这个电子图书的具体使用我就在这儿啰嗦几句。先访问学校的超星主页 :http://211.68.37.141/bookhtm/index.asp 。下载浏览器和注册机。浏览器要在注册之后才能使用的。有不少同学打开超星浏览器后,就去外网的超星公司主页去找书了,结果是看不了——因为这个需要自己去买超星的充值卡才行的。大家要看书,还是访问学校的超星主页 :http://211.68.37.141/bookhtm/index.asp, 然后在信息检索那输入书名,比如输入Linux,就会出现好多书供你选择。你想阅读,点“阅读”,下载呢,就点“下载”。好了,说完了。听说不少同学装好 了浏览器,但是点了“下载”,就是不出现下载页面。这种问题我没遇到过。大家如果碰到这类问题,不妨从同学的电脑下载,然后传到自己电脑上看。
学校的维普电子期刊也非常不错,平常写论文什么的,基本上能够在那儿找到范文。嘿嘿。
c 好好利用外网的技术论坛以及我们学校的发达网络。我觉得最好的嵌入式或者Linux论坛就是这个:http://www.linuxforum.net/forum/ubbthreads.php
还有,当你从事某个具体项目是,最好加入邮件列表。我们学校的邮箱好像收不到许多国外的邮件(也有同学在论坛上说只要设置好自己的邮箱就行)。我的做法是,去申请一个国外的邮箱。在此也推荐一个印度的1G免费邮箱:http://in.rediff.com/index.html
很多外国网友都挺热心的。跟他们通信也可以提高自己的e文水平。

1.2 从技术层面回答
接 着,说说技术学习。现在,你一无所知是吧,那我介绍的这些东西,今后你就该开始学了。我觉得,一直到大三下复习考研前的这么多时间,在本专业学习之余,完 全是有余力掌握一两门技术的,寒假和暑假都是很好的机会。如果能参加个竞赛什么的那就更好了。还有,在学技术之前,最好认清自己——你是否真得喜欢技术工 作?还是因为自己专业课学得不好,想学技术混口饭吃?还是看到别的同学也学自己也随大流?我只想提醒一句:真正学好一门技术,并坚持下去——这个难度不比 学模电数电小。因此,兴趣是最好的老师。

好,大家想明白了吧。那么,进入正题。

我认为首先必须掌握C语言。以前也学过是 吧?可能是混过去的,现在什么都不会。那么,找本谭浩强的书看看吧,在Windows下编编程序。积累这个基础不用很长时间的。至于掌握C的水平高低咱就 不管了——今年去找工作的时候,我被一家公司先笔试后鄙视,他给的一份题,考得全是指针、数据结构、堆栈算法,然后对我下结论:“你对C一窍不通”。#@ $%^&*。我就FT。

C语言的重要性我就不多说了,大家应该对此不会有什么疑义吧?

1.3 安装Linux
现 在说说Linux。这个也是必须要掌握的。我想,困扰大家的是安装问题。按理说RedHat是最适合初学者的。问题是现在大家的电脑都是那么高级,很多硬 件RedHat 9都不支持。有一个办法,市面上出了一个Fedora Core 3,是由Red Hat公司赞助的发行版,可以买一个来装。硬件支持性应该还不错。(声明:该发行版销售商与我素不相识,没给我任何好处,如果买了发现用的不爽不要找 我)。
我使用的是Debian 。它的优点是可以不断升级,这样就能支持各种硬件了。缺点是不很适合初学者。Debian安装包请到我在学校的个人网页那儿下载。至于Debian的一些资料,大家可以搜索,或者访问我的个人网页,那儿有些资料不妨看看。
等等,你刚才说的Redhat和Debian是什么?跟Linux有什么关系?
呃,Redhat和Debian都是Linux操作系统的发行版本。如果有这方面疑问的同学,请先到图书馆找本入门的书看。以后我就假定你已经掌握了这些知识,仅仅是在安装系统碰到问题而已。
如 果你的配置不是特别奇怪,嗬嗬,Redhat 9 绝对是个不错的选择。安装包在学校的Ftp有,图书馆的ftp有6个iso文件,只要前三个就可以了,后面3个是源代码包。这个iso文件呢,可以放在硬 盘上,从硬盘上安装Linux。背心论坛的Unix板有这个贴子,大家可以搜出来看看。也可以把iso刻录到光盘上从光盘上安装。刻录时注意了,有同学刻 录了之后无法自启动,原因是刻录时没选对选项。刻录Redhat的盘跟刻录XP系统盘的方法是一样的。这个过程并不难,大家不要怕。
好,有 Redhat或者Debian的盘了。我的经验是,先在Windows中留出一个空盘。比如我把E盘的文件都先拷贝到别的盘上,然后用PQ (Partition Magic 8.0,学校ftp里有)从E盘分出ext3和swap分区(注意:千万别选安装另一个操作系统,仅仅是选择创建一个分区)。这样做速度最快,最安全。如 果你用PQ分区时是选择的是安装另一个操作系统,最有可能出现的情况是要求你重启电脑,然后是不能进入windows了。呵呵。这个问题我碰到过N次。
呃,删掉Linux分区。我的做法是,用PQ把分区删除,然后格式化就可以了。呵呵,可能这样做后不能进入系统了。没有关系,找张DOS启动盘(软盘或者光盘),带fdisk的那种,输入命令fdisk /mbr 就可以了。肯定有更好的办法,我只说一下我的做法。

不行,安装了之后,要么没声音,要么进不了图形界面,要么分辨率只能是800X600……
那么,何不试试虚拟机。如果你的内存足够大,用虚拟机也是非常好的选择。VMware和Connectix Virtual PC都不错。软件学校ftp有,去外网下也很快。

Cygwin也不妨用一下。这个更简单。点击安装就可以了,然后出来类似Linux的字符界面。不过,好多命令都没有。

说了那么多Linux。其实,你只要看看书,然后实践几次就可以了。比如在虚拟机下感觉感觉Linux就行了。以后有机会进入学校实验室,这些电脑安装RedHat 9都没有问题,到时候你就可以大干一场。所以说,Linux可以说重要也可以说不重要。

总结一下这个问题的答案。那就是掌握C和Linux。

下一讲,我会举例说明嵌入式开发的具体流程。大家看了之后就会比较感性的了解嵌入式的开发工作,就不会再觉得Embedded System深不可测了。

2. 嵌入式到底是什么东西?

这个问题,我从以下几个方面说明:嵌入式的概念;嵌入式中的一些重要术语;嵌入式的具体开发过程。至于嵌入式的前途之类的不再赘述。反正在实验室搞这些的找工作是不成问题。

什 么是嵌入式呢?我觉得这个东西出现的不比计算机晚。比如控制某些机床使用了一些程序,那么这个控制系统就是嵌入式系统。像我们的电梯,它能接受大家的指 令,把大家送到目的地,这也是一个嵌入式系统。一开始,嵌入式系统并不需要有操作系统。许多嵌入式系统根本就没有操作系统,对很简单的嵌入式系统来说,这 可能已经足够。不过,随着嵌入式系统在复杂性上的增长,一个操作系统显得重要起来,因为否则的话,将使(控制)软件复杂度变得极不合理。像我们学的51单 片机,上面就没有用操作系统(想用也用不了)。对嵌入式系统很难下定义,只能说嵌入式的特点是:小巧、轻便、成本低(这个是最重要的)。我不知道这样说, 大家是不是了解了嵌入式系统这个概念。北航的何立民教授是这样定义嵌入式的:嵌入到对象体系中的专用计算机系统。嵌入性、专用性、计算机系统是嵌入式 (Embedded System)的三个要素。

嵌入式上使用的操作系统。在嵌入式系统中流行的操作系统太多了。比较有名的是 WinCE,Linux,以及仿Linux的eCos(这个可能是将来的主流)。还有什么uCOS、Palm、VxWorks、QNX等等。由于 Linux免费且公开源代码,成为了大家的首选。电子的同学大四学嵌入式的时候,使用的是uCLinux。这跟Linux有什么区别呢?首先声明一点我没 有用过uCLinux。据我所知,uCLinux不带MMU(内存管理单元。嗬嗬,这个术语不好理解。我也没有真正搞懂核心机理。不过,可以说一下它的作 用:1把物理地址转换为连续的虚拟地址2 保护某些地址空间,限制对空间的访问。大家不懂也没有关系),所以uClinux使用在那些不带MMU功能的处理器芯片里,如s3c44X0。

嵌 入式系统使用的处理器。如果你学习嵌入式,肯能经常会碰到ARM、StrongARM、Xscale、S3C2410、ARM9、PXA255。是不是晕 了呢?我来解释一下吧。ARM(Advanced RISC Machine。RISC指精简指令集,简单得说就是x86汇编指令的进化改进版)是一个公司的名字,于1990年11月在英国剑桥成立,它本身不生产芯 片,它设计出嵌入式微处理器核心,然后卖给Intel等厂商,它们生产的处理器类型就是ARM,所以ARM也是这类处理器的俗称。ARM处理器有很多家 族,如ARM7、ARM9、ARM11,数字越大越高级。Intel公司买了ARM核之后,融合了Intel的一些设计,给出了StrongARM、 Xscale等架构,具体生产时,加一些外围线路、元件啊,封装成为具体的处理器芯片,如PXA255。同样的s3c2410也是芯片的型号,韩国三星的 产品,同时也是ARM9。大家再看一下结构图就会明白这么多名字的关系了。通俗的说,ARM是最里面的核心,加点东西构成了Xscale,在Xscale 外面又加点东西就变成芯片了。



像PXA255芯片,是个17mmX17mm的正方形芯片,256个管脚(好像是)。

嵌 入式开发板。学校实验室目前有两块开发板——三星的SMDK2410和Intel的Sitsang板。这儿要炫耀一下,Intel的Sitsang板是李 眈率领的团队在西藏开发的,Intel公司有这么一个习惯:哪儿开发的东西就以地名命名,所以叫Sitsang。这位李眈先生,00年于北京理工大学博士 毕业,嘿嘿,他的导师即将是我的导师。开发板就是以ARM处理器为核心,添加了一些外围资源,比如说ROM、RAM、USB口、LCD液晶显示屏、LED 灯等等,其实跟一台PC机差不多。只是价格不菲,比如Sitsang,价值RMB 2w。所以一般小公司能买得起开发板算是很不错了,更不用说更贵的调试设备了。所以学校还是花了不少money在实验室的。不过都得归功于周老师和苏进老 师的努力啊。
这张图就是三星的SMDK2410。它的CPU是s3c2410,200M的主频,32MB的内存,32MB的ROM。(说一下,嵌入式中的ROM通常是flash芯片,价格比较便宜)。



Sitsang 板。也是2004年竞赛的指定开发板,是Intel免费赠送的。这个竞赛可不是哪个大学都可以参加的。嗬嗬,背心不容易啊。Sitsang使用的是 Intel的PXA255作为处理器,主频400M。RAM、ROM都是64MB。性能超过了98年的PC机了。



实际开发在开发板上进行,成功后,对开发板进行裁减。一些没有用到的硬件就可以不用了。比如做一个会议系统,只要一部分硬件,Sitsang板上的加速度传感器、红外口啊,在新系统中就可以不用了。画PCB板,制版,移植软件,成品。大概就这么个研发流程。

3. 在ARM开发板上运行我们的第一个程序

如果你已经安装好Linux,那么可以跟着一起做。如果你没有装Linux,也没有关系,看一遍也就了解了。以后修炼自己的技术在Windows下用VC即可。

其实所有的工作都可以在Windows下完成的,这个稍后再说。现在我们的工作环境是Linux。

首先用任意的文本编辑工具写一段程序(我喜欢用Vi):

#include <stdio.h>
void main()
{
printf(“Hello World!/n”);
}

保存为hello.c。
然后我们使用gcc编译这个c文件。(如果你是刚接触Linux,没编过程序的话,可以找本Linux编程方面的书来看)。绝大多数Linux发行版都是已经默认安装好gcc的。
我们在Windows下编写C程序,然后编译、链接,生成可执行文件。gcc就是完成这个功能。
我们在终端使用gcc命令:
$ gcc –o hello hello.c
如果程序没错,应该顺利通过编译,生成可执行文件hello。大家要编译别的文件,可以仿照这行命令:
$ gcc –o 生成文件 c源文件
我们用file命令察看这个hello。
$ file hello
这是你就可以看到hello是386平台上的可执行文件。
现在我们执行一下这个文件:
$ ./hello
(注意:前面应该加上当前路径,即 ./ 表示当前目录)
屏幕上是不是显示了 “ Hello World!” ?

现在开始介绍本节的重点内容。
大 家知道ARM使用的是精简指令集,也就是说它用的汇编指令跟我们386平台的指令是不同的。从现象上看,就是我们在386电脑(就是使用赛扬、奔腾、迅驰 处理器的电脑)上的可执行文件不能在ARM平台上运行。怎么办呢?由此引出“交叉编译”这个名词。交叉编译的意思是:我们在i386平台上编译出ARM可 执行文件。也就是说,同样的hello.c,我用类似于gcc的交叉编译工具来编译,生成的文件能够在ARM平台上运行。
就是这么简单。嵌入式开发,我们一般都是在PC上写好程序,然后交叉编译生成可执行文件,通过数据线(如串口线、网线)下载到ARM开发板上运行。
网上可以下载到好多现成的交叉编译工具链(Toolchain)。我在下节会提供下载地址。我使用的是intel提供的。大家下载的文件是:xscale-arm-linux-toolchain.tgz
把它解压:
$ tar zxvf xscale-arm-linux-toolchain.tgz
然后会在当前目录出现一个usr的文件夹。它的目录结构是这样的:usr/local/arm-linux,里面有很多目录。把arm-linux这个目录移动到/usr/local下。
$ mv arm-linux /usr/local
然后修改环境变量:
$ echo “export PATH=/usr/local/arm-linux/bin:${PATH}” >>~/.bashrc
$ source ~/.bashrc
其实这么做仅仅是为了省事,你也可以在命令前加上长长的一串地址。
还是上次的hello.c。
我们这次用交叉编译工具arm-linux-gcc来编译:
$ arm-linux-gcc –o hello hello.c
如果没有修改.bashrc,你也可以这样:
$ /usr/local/arm-linux/bin/arm-linux-gcc –o hello hello.c
现在再用file命令看看,有什么区别:
$ file hello
是不是ARM可执行的?
然后我们通过串口或者网线把hello下载到ARM开发板上,就可以执行了。
至于怎么下载,这个涉及到具体平台,如果有机会去实验室尝试一下,不用几分钟就学会了。所以这个不是很重要。大家只需要在自己电脑上修炼编程功夫和熟悉Linux就可以了。

前面也说了,这些工作都可以在Windows下做的。有兴趣的同学可以用用cygwin。cygwin是在windows下模仿linux的一个软件。也有在cygwin环境下的交叉编译工具。
很多同学会问ARM开发板怎么和PC连接啊。
我 在这儿说一下。通过串口线,把电脑和开发板相连。然后通过PC上的接口程序就可以和ARM板交互通信了。接口程序在Windows下使用超级终端(附件- >通讯->超级终端)。做好一些设置,则会在程序上显示ARM板通过串口传过来的信息。在Linux下使用minicom,你只要运行 minicom命令就可以进入界面。这个界面(超级终端或者minicom)其实就相当于Linux的一个终端。因为ARM板上用的是Linux,所以这 个终端上可以接受你输入的命令,跟Linux上是一样的。

下节将会介绍一下软件下载地址和推荐几本书。

前面提到的操作系统,如Redhat、Debian、Fedora Core 3在外网都有下载,大家就没有必要自己去市场上买了。我要澄清一下:Linux是没有正版盗版这个概念的。比如Redhat,你可以去买,也可以去下载。 不同的是你花钱买的能够得到Redhat公司的技术支持。
大家可以登陆: ftp.tsinghua.edu.cn , 在OS下面后很多资源的。比如Linux发行版,cygwin等等。进入Linux文件夹,在distribution下面有debian、redhat 等。推荐大家使用redhat下面的fedora-core3,以及hiweed下面的hiweed-debian- desktip_0.55_i386.iso。下载速度挺快的。大家可以刻盘安装。
校内的同学,欢迎你访问我的资源网站:
http://59.64.74.100/quanhua/
首页里放了大量一位计算机系的超级n人b1gm0us搜集的资料。包括了linux/c/c++/嵌入式等等资料。大家认真看看应该还是很有收获的。
http://59.64.74.100/quanhua/downloads
这个目录放了一些软件。其中有上节提到的toolchain。
http://59.64.74.100/quanhua/kaoyan
通信考研的一些资料。
如果你有兴趣,可以看看我的毕业设计。

书:
《Linux上的C编程》 中国电力出版社 怀石工作室
关于ARM的书大家就不用去买了,有点浪费钱,看看学校图书馆有没有,借来看看,或者看电子版就可以了。
其它的书就不推荐了,都是特别贵,而且没什么用。Linux的学习呢,网上搜资料看看就可以了。推荐一个页面:http://www.etc.edu.cn/blog/archives/000323.html Linux入门学习。在百度搜索“北师大 Linux”,第一个结果就是这个。

学习方向:
周老师的实验室里需要这几类人才:
(1)信号与系统、DSP学得特别好,理论功底扎实。老师会让你钻研图像和语音的压缩算法。这个很难哦。既要有编程能力,专业课又要学得很好才行。不过,钻这个绝对钱途无量。
(2) 纯粹的程序写手。往这方面发展,你需要精通Linux上的C语言编程,C++熟练,网络编程熟练。也就是计算机系同学的特长。如果你想往这方面发展的话。 先学好C++,然后学网络,最后把阵地转移到Linux上去编程。嵌入式系统的图形界面很多用的是qt。简单的理解呢,就相当于VC++的MFC。只要掌 握了C++,用qt还是很容易上手的。学校超星有电子书,你可以搜索”qt ”看看。
(3)研究底层硬件。你需要掌握ARM汇编,C是不用说了。Linux内核编程。硬件驱动程序等等。可以从分析Linux源代码做起(很难啊)。
(4)暂时想不起来。
想进入嵌入式实验室?周老师喜欢那种肯钻研、能拼命干活那种。如果你不强,老师可有n多借口拒绝哦。进不了也没事,争取跟他作毕设。大家千万别说是我推荐的啊。这可跟我没有任何关系。

(完)
以后想到什么再写吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: