打印

嵌入式的入门介绍

嵌入式的入门介绍

虽然很气愤 为什么我吆喝了这么久的板面 现在才开张
不过还是准备做点实事

怎么玩转嵌入式1
在很多人的眼里,大概嵌入式这个字眼还是很陌生和神秘的事物。今天我这个菜鸟就来写一篇关于嵌入式的菜鸟入门。个人经验所限,有什么错误还请老鸟指正。
实际上,所谓的emb不过是一个小型的微机系统,或者说一个残缺的微机系统。通常被排除掉的部分有:显示(别以为nvidia ati在桌面上多牛b 这儿可没有它们什么事情)声音(有也不过是个小喇叭 手机和弦才出来的吧)完整意义上的键盘(当然小小的输入键盘还是可能的)鼠标(没见过)硬盘(实际上有时候会有 不过象使用ide那样
驱动的硬盘还没有见过)
那么留下来的是那些呢?cpu,内存(没有它们二位也别想做什么事了)串口(开发板的绝对标配)网卡(现在的开发板很多都有 不过也许和我自己做的东西有关系吧)
当然么 如果你去买块专门的开发板来,上面的东西会多得多,大多数的实际应用都需要特殊的硬件:usb口 微硬盘接口 算是比较普通的了 如果你做的监控系统也许还有并口和附加的串口来联摄像头 如果你做的无线设备那么还会有gsm cdma中频芯片和天线 如果你是玩玩还会有什么电机啊lcd啊
所以呢 如果你把你的主板好好拆一拆你就可以自己尝试一下嵌入式开发了。(不要试哦,我只是随便说说)
从自己知道的看来,现在常用的开发芯片有:arm这好像还是老大,片子多板子也多,ppc用过不错不过片子板子几家垄断,intel开发起来会比较熟悉板子类型也比较多,不知为什么好像不是很流行,支持intel的系统也多半是为了让用户可以在pc上调试.性能功耗问题?不熟悉不乱说了。
当然实际上市场上的处理器多如牛毛,不过大多数是这么几个厂家的或者基于这么几个构架的,同样的构架下指令通常是很类似的使用中也比较的类似。小小的差异不是我们菜鸟要解决的问题。
说到arm和ppc就不能不说到atmel和motorola.基本上我用到的板子都是这两个厂家的。自己做cpu,自己做周边芯片。不过用到的atmel的板子都是通用的,(外边厂家出的)基本支持jtag,而motorola允许你去定制,常常是奇怪的构架拿出来。(也就是不要偷拿了公司的板子和jtag卡然后发现板子上不支持jtag接口哦。:)
然后通常的板子上都会有闪存,由于一般嵌入式系统不会要用到硬盘那么夸张的夸张的存储设备,闪存通常是你存储小数据的唯一选择,你也会看到一个机遇flash的文件系统是多么常见。
除了这块板子(想自己买?价格不菲啊!后面会讲到穷人的办法的)通常你还需要一个jtag卡,当然也有很多系统支持串口网口的下载,不过jtag通常还是你的不二选择。原因是要编译一个支持串口网口的启动img还是有些麻烦,更何况小系统上通常只支持rom启动。
有了这些,你踏上堕落的第一步了(什么?我说了什么?)下面你需要选择一下你的系统,实际上同时你也选择了你的开发工具,开发语言和用途。

TOP

good! go on.
Time is always not enough!

TOP

探头出来看看,你就会发现这个世界上被用在嵌入式开发的操作系统数不胜数。
如果以我们最关心的资源消耗量来分类这些系统:
块头大的:windowce,linux,...
中等个头:vxworks,uc/os,palmos,epoc...
小号的:psos,neaucles,q-dos,...

虽然上面的分类只是我的一家之见,不过很不幸,我们都很喜欢的linux内核系统通常都不得不和它的死敌window放在最大最耗费资源的一类里。
也许你很奇怪,linux这样一个看上去不应该是很庞大的内核却需要很大的资源。问题在于1:linux内核的几个模块结合紧密,这种紧密结合带来的pc上的高效,但是在你不需要其中的几个部分的时候却很难将它们“干净的”丢弃 2:linux的支持的功能太多,大量的缓冲机制,大量的ipc机制,用户,权限,不同规范的api接口,为了裁减这些嵌入式上几乎不会使用到的功能,我们又需要做大量的工作。3:linux的资源管理理念,作为pc和服务器上的强大系统,linux更加倾向于的是统一管理。包括各种设备,内存空间。这在一些比较高层的嵌入式应用中会使你的开发非常的方便,但是在一些基础应用中实际上是为了作到这种通用管理付出了不小的代价,而且往往一些移植的老应用更倾向于自己管理物理内存空间。
也许又有人会说,资源的增加不是随着硬件的发展正在很快的增加么?
这种情况在pc和服务器上表现的很明显,但是在嵌入式系统的发展上表现的远没有那么明显。几年来,当台式机的主流配置从32m内存发展到了512m内存的时候,手机中sdram的主流配置不过是从128k增加到了1m左右。往往嵌入式开发中资源的匮乏和尽力榨取硬件每一点能力是贯穿你设计开发的主题。
当然也有很多应用中出现的夸张的资源跳跃,比如交换机上的单板sdram量从4m左右跳跃到了软交换时代的2g以上。当然这带来的除了单机处理能力大大增加外是单板的价格飞涨。
实际上,还有很重要一种分类方法-是否支持实时。也许实时这个名词听上去非常的酷,但它绝对不是大多数人需要的功能。如果你真的需要这个功能,你需要仔细的挑选你的硬件指标,你的操作系统并且精心打磨你的代码和中断系统。如果你不够牛,你就耐心忍受它给你带来的麻烦好了。至少我这么说的意思是,不要过分主动的向你的老板或者导师提出:我要做一个真正毫秒响应的实时系统!

除了考虑选用系统的消耗和你的应用的差异以外,你还需要考虑的就是系统的硬件支持。最中心的,你选中的系统是否支持你的cpu,它是否有内建的微硬盘/flash硬件接口和文件系统,它是否支持你想要使用的特殊硬件比如usb?
哈哈,这里恐怕是linux爱好者最容易抬起胸膛的地方了。linux有可能是这种支持性最广泛的一个作业系统了。这里我就不多说了,看看arch下面支持的架构数目和你方便的挂载一个驱动,一个文件系统的情况。(哦,当然了,资源消耗,资源消耗)

TOP

写得太好了,我是刚进入嵌入式Linux的新手,迫切需要你这样的大侠指点,希望多多指教

TOP

有点意思!
我初学LINUX,想学嵌入式、实时方面的东西!
老大加油啊!
以后多多指点啊!
还我一个LINUX的梦想!

TOP

To be continued?
从来没有用过VMware, 我宁愿关机切换到另一个操作系统. 用VMware给我的感觉就是:"明明拥有了这个美女, 却不敢去碰她, 非要隔着帐篷来意淫一样."

TOP

wsm,你也当斑竹吧,这样就不气氛了。

TOP

i agree,      
Time is always not enough!

TOP

偶不是这个意思
偶不做老大已经好几年了...

TOP

hehe, redo.

and this is not a "lao da" this is a responsibility.
Time is always not enough!

TOP

多谢美意啦
其实我不是这个抱怨的意思啦 当然更不会是什么“大材小用”(本人真正转行到软件不过两年 实在是菜啊)
不过我这个人做事喜欢随便 而且个人主义严重(逼我批判自己啊~~~)现在在工作又想要考研(矛盾啊)常常有时间没时间的 而且自己家里还没有上网条件(小猫上网的痛苦!) 考率以前在学校里做板主也是当了一半就不想当了 不希望自己影响到这里的发展 所以还是作普通社员比较好

TOP

写得太好了!!!!!

TOP

现在的linux版本多如牛毛,即使只算上使用在嵌入式开发的那些“小”linux版本也是为数不少。所以虽然理论上来说,或者说从实际的学习上来说最佳的方式是在一个标准内核的基础上编译出一个适用的嵌入式linux来使用,不过在实际应用中就大可不必这样费时费力的来的得到一个内核。
说到这里,突然想停下来说说vxwork,这个和我们交情最深的嵌入式的实时系统。相信了解过这一行的人不会不知道windriver和vxworks这两个词。作为实时系统的王者,vxwork的可靠性和效率确实是非常的优秀。
(我们试过一个psos到vxwork的移植)对于它的什么什么好处,我就不想多说了,反正踏入这一行的人或多或少都回接触到的(是不是有些夸大?我也不知道它到底是不是象微软在pc上一样牛啦)。要提的是vxwork的弱点。
1.硬件的支持 对周边设备的支持上,vxworks可谓困难。记得为了作一个支持3com的一款网卡的bsp,费尽周折,反正是n个高人做了n多的修改才搞定。还有一个什么ntsim包,号称可以在x86上模拟ppc的,反正还没有听说公司里什么人用的起来的。
2.接口 尽管比起以前的嵌入式系统那种全人工的方式来说,vxworks提供的功能接口已经很完整了。不过如果你是一个作了几年标准c或者unix下开发的人来说,那种object module下面的memory managerment接口还有那些wtx的使用,总也是让人感到摸不着头脑。
3.命名 vxwork下有很多无论怎么也想不到的名字 比如一个com口会被叫做/tyco/0 tyco也就算了为什么是tyco下面的0呢?还有一种很很简单的循环:FOREVER,简单到我怎么也不适应这种用法:
FOREVER{
  taskwait(5000);
}好象和MFC的宏大战有的一拼了。
另外,至今不理解为什么把内存区叫做db,mb,data block,memory block?
平心而论,这些复杂的接口和开发方式是有理由的,需要实时,需要模块化,允许网卡调试等等都是vxwork的理由。不需要目标板,在普通pc上就可以做调试完全是一大创举.总之vxwork的东西都是很复杂深奥,我窥豹一斑就张嘴而已。
为什么vxworks会和linux来比呢?
首先,他们在posix标准上是统一的。只不过对于vxworks来说posix不过是一种实现而不是基本的思路。但至少它们在某些层次上是相通的。
其次,他们用的都是gnu的编译器。作为一个菜鸟,我不知道这有多大的意义,但至少可以让linux的狂热拥护者们高兴一点。(不过windriver确实也有自己的编译器)
再次,vxworks是嵌入式行业的大哥,而(我想)linux会成为它的一个对手。
实际上,看看linux,前面的问题在linux也存在,无论如何,编译一个bsp都不会是简单的,只不过如果你在pc上编译过什么东西100遍了,再来做一件很类似的事情怎么都回变得容易一些。linux下的异步io接口看上去也不怎么友好,大量的参数,只不过用在一个铁定有内存管理的系统上怎么也比用一个不知道会帮你做些什么的系统来的简便。linux下的古怪名字也不少,谁能说他一看见time和times就分辨得出来这两个截然不同的用法?只不过吐啊吐啊也就习惯了。
如何省钱?我想一块开发板加上配套软件的钱即使不是每个人都承受不起,也是99.99%的人承受不起的。而且就算在我国这样一个软件费用很容易降下来的地区...也很难找到这样的专业的软件d版。
(喂喂,特此通告,谁有tornado2 for x86,ets, singlestep,trace32等等 一定要好好发放出来!)更不用说那些常常会用到而又非常昂贵的第三方工具啊,协议站啊之类的东东了。所以基本上想学一学,玩一玩的人只能在自己的电脑上下功夫了。
就我所知呢,可以在pc上作模拟不外乎这么几个途径。非常好的直接模拟工具,tornado for x86真正工作在pc上的vxwork。你可以让这个系统和你样板上完全一样的工作调试。但是这个工具太难找了,基本上除了找公司里的弟兄给你偷一个出来还没有什么办法弄到。即使弄到了你还需要面临巨大的挑战。基本上可以自己第一次搞定bsp的人已经不需要这么偷偷漠漠的玩了。你的没用的什么转接卡,scsi卡,声卡最好拔掉。网卡是必需的,但决不能太新,否则压根没有支持的包,可也不能太旧,不然也没有。硬盘的第一个分区还是毁了吧,软盘的启动是可怕的,可是记住这第一个分区不能太大,这不是fat32......
还有一种呢是模拟别的系统,这好像也不多,既然这里是中国的linux社区,理所当然要说说sky eye这个东东。一帮牛人做的一个linux下面的模拟器。(免费啊!ads,embest也得不少钱哪!)还在不断的推出新的模块,至少支持uclinux,ucos在mips,arms的一些硬件的模拟了。简单,开源,免费,绝对有足够的理由让你尝试一下了。

TOP

hehe, i have tornado2 for p4 and arm.  
Time is always not enough!

TOP

还是给点更加实在的东西,这些我们初学这还有点虚

TOP