wlawei的笔记 https://passport2.21ic.com/?294726 [收藏] [复制] [RSS]

日志

初涉嵌入式

已有 568 次阅读2008-6-20 21:50 |个人分类:嵌入式|系统分类:嵌入式系统| 嵌入式

开始初涉嵌入式系统了,之前的一些时间里也了解过一些,现在简单的总结一下吧,都是我自己的理解,肯定存在很多不正确之处,知道的帮忙给纠正一下:)


在处理器上如果只运行应用程序的话,应该可以理解为单片机,如果这些应用程序是运行在处理器上的操作系统上的话,应该可以理解为嵌入式操作系统吧。不知道我这个理解是否准确。


搞嵌入式的人员应该分为两类,一类是搞硬件的,主要是硬件的选择和布设,驱动程序的设计;另一类是搞软件的,主要是操作系统的选择和设计,应用程序的开发。我在上学的时候,专业接近弱电控制,应该是偏硬件的,所以,想来想去可能搞硬件更适合我自己,虽然,看到很多人说搞硬件要更加费力一些。


嵌入式系统可以分为以下四个层面吧:


硬件层:主要关注电子电路的设计,根据客户的需求来选择硬件的模块,比如客户需要GPS功能,那自然就需要一个GPS的硬件模块了。


驱动层:驱动程序是硬件和软件之间沟通的桥梁,操作系统要想控制硬件必须通过驱动程序与硬件进行对话。比如系统想要发出声音,软件发处指令给驱动程序,驱动程序负责让喇叭出声。


操作系统层:应用程序是能够完成某种功能的程序,它能够执行一些任务,执行任务就必然要和硬件打交道,可是,如果每一个应用程序编写时都直接面对硬件进行编程的话,那么将会给应用程序的编写带来很大的麻烦,所以需要有个个专门的程序来管理硬件,这个程序应该可以称为操作系统,操作系统通过驱动程序和硬件打交道,同时操作系统给应用程序留下一些接口,使得应用程序可以与硬件进行通话,这个东西可以成为API。


应用层:可以直接完成客户要求的程序。


做硬件的应该主要是做硬件层和驱动层,做软件的主要是做操作系统层和应用层。无论是做硬件还是做软件都有很多选择,硬件的平台有x86,ARM之类的,软件也有Win CE,Linux等可以选择,到底谁好,不能一概而论,各有各的优势。而我自己,准备选择ARM+Linux的组合。


Linux,年轻,开源和免费,很快的就进入嵌入式系统,很多人说Linux才是王道,我不知道什么是王道,也不知道为什么要这么说,我只是对Window有点烦了,想换个新东西玩玩。


因为我比较关注硬件,所以也像别人一样来谈谈BootLoader。一个朋友给我说,要做硬件的话,开始做的就是对硬件板卡进行剪裁,然后对驱动程序也剪裁一下,然后开始写写BootLoader,调试一下就OK了。等对硬件了解多了再进行深入,给我说这些话的朋友对嵌入式了解也不是很多,所以,我也不知道是不是应该这样,但无论深不深入,肯定都会写BootLoader。BootLoader是对硬件的一个初始化,它所做的工作就像我们早晨起来在出门做事之前要洗洗脸,刷刷牙,梳梳头,然后像模像样的出去做事。洗洗脸,刷刷牙,梳梳头就是对人(人好比硬件)在工作之前的一个初始化。很多人提到BootLoader就提BIOS,对他们做的工作一样,如果你了解BIOS的话,那么也就了解了BootLoader的作用。但是BootLoader除了要初始化硬件之外,还有一个作用就是要解压缩Linux内核了。Linux的内核可以直接解压到Flash中,也可以通过Flash到RAM中,而后者的速度肯定要比前者运行的快一些。要解压缩Linux内核,就要把内核从宿主机(用来写程序的电脑)下载到目标机(目标机就是你要开发的对象)上,下载的方式可以通过XModen和TFTP的方式,前者是串口,后者是网线,很明显,网线的速度要快于串口。如何下载和下载的详细内容,我现在还不是很清楚,所以暂时只能写到这个程度了。


主流的BootLoader有以下几种,这个我是从别的地方看来的,所以照抄一遍:U-Boot,PPCBoot,ARMBoot,Blob,RedBoot等


可是一个新的问题又出来了,宿主机大部分是x86平台的,目标机我们可能使用其他的硬件平台,比如ARM,x86和ARM的运行方式和汇编指令都不同,如何保证他们之间可以保持一致呢,这就需要用到交叉编译软件。


不早了,今天先写到这儿,等学了新东西,再来这儿继续写,希望各位过来人,多多指正,并给后人提些建议,谢谢!


路过

鸡蛋

鲜花

握手

雷人

发表评论 评论 (1 个评论)

回复 daoshi_000 2008-6-21 11:54
支持一下。 都是搞电子的同道中人。不知wlawei做的是什么行业?

QUOTE:
以下为wlawei的回复: 刚刚入门,还处在学徒阶段