您的位置 首页 嵌入式

根据ARM+uClinux的嵌入式体系的开发

前些日子基于arm+uClinux开发了一个网络监控系统,眼看项目马上要做完了,终于松了一口气,于是整理了一些笔记和心得想和大家针对这种开发

前些日子依据arm+uClinux开发了一个网络监控体系,眼看项目立刻要做完了,总算松了一口气,所以整理了一些笔记和心得想和我们针对这种开发形式进行一些讨论,期望对各位有所协助。
  依照我的开发进程想分以下几部分逐个介绍。
    1.开发渠道的挑选和证明
    2.开发环境的树立
    3.一般程序的开发
    4.Linux程序向ARM+uClinux渠道的移植
    5.剩余的问题
  期望诸位多多弥补自己的主意,以利于我们共同提高。

1. 开发渠道的挑选和证明

  一个项目拿到手,怎么挑选开发渠道(首要是指CPU和操作体系以及开发环境和东西)应该说至关重要,有时这不但影响进展,产品质量,可维护性等一般问题,乃至涉及到计划的可完成性。自己结合自己的网络监控体系简略概括了一些对渠道的考虑,还请各位弥补。

从体系功用完成考虑:
  (1) 是否有片上外设,专用指令或配套的软件模块直接完成体系功用要求。 感 觉这一条对很多人的决议计划影响很大
  (2) 价格
  这一点应通过CPU供给的资源归纳考虑,它供给了多少有用的资源,多少没用的资源(那可都是银子呀!),仍是那三个字,性价比,另一方面,是要抓首要矛盾,是不是有些特性是有必要的,什么特性是用户需求里的亮点(就靠这些亮点往上抬价),这时该花的就得花了。
  (3) 功耗
  本体系对CPU功耗要求不高,但对移动设备,这一点但是丧命,而且这一点不是仅针对CPU,一切简直器材都要勒紧裤腰带运转。
  (4) 处理速度
  这项不必多说,我们都理解重要性,但详细算起来但是一门学识,一方面是自己需求多快的速度,假设加上非实时操作体系这事就欠好操控,余量仍是大点保险,另一方面,CPU指令周期多少,有没有流水,有没有并行,什么体系结构,有没有专用指令(看人家DSP多牛,干这事一绝),对外部存储器和外设的存取速度等等,哪一个慢了都叫瓶颈。
  (5) 需求的硬件支撑(如外部存储器,双电源等)
  这算是杂项,但会添加额定的价格,体系体积等,不容忽视。

从开发者的视点考虑:
  (1) 是否有满意的技术支撑包含demo版及原理图,demo程序,操作体系和BSP,测验开发东西等。
  (2) 自身条件;包含对项目开发周期的要求,开发人员对器材和开发形式的了解程度以及把握的难易程度。
  (3) 可用资源是否丰厚(书本,网络等)
   以上三点首要考虑敏捷开宣布安稳的体系。
  (4) 体系的可继承性,可移植性和可扩展性。
  (5) 是否有现货。
  (6) 计划供给商的实质。(包含技术水平和服务认识)。

依据以上考虑挑选了s3c4510b(ARM7TDMI)+uClinux开发形式

(1) 以下是该渠道对我的体系的满意状况:(和上面几点对应)
本监控体系硬件部分首要要求以下部分:
  a.以太网接口 (s3c4510b自带网络操控器)
  b.串口 (自带)
  c.与数据收集芯片的接口(8位数据线,小于8位地址总线)。(自带)
本体系软件部分首要要求以下部分:
  a. 硬件接口驱动程序 (uClinux供给串口和网络操控器驱动)
  b. 网络协议栈支撑(uClinux供给TCPIP,UDP等的协议栈)
  c. 运用层程序(假设算上能够从linux移植的程序来看,那就太多了,我就用到了一个现成的)
(2) 本运用体系不是那种批量的东西,对价格要求不严苛,而且这款CPU最廉价能够到55左右,能够承受。
(3) 本运用体系有固定电源,功耗要求不高。当然,听说ARM在节约功耗上很有特色。
(4) 本运用体系速度方面要满意两方面:1。串口:115200bps 2。网络速度 能到10Mbps就行,所以对体系速度要求也不高。这款ARM内部能够到50M。
(5) 体系对体积要求也不高,加片flash和RAM仍是没问题(到现在为止感觉我的体系真是无欲无求!)

从开发者的视点考虑:
  (1) 由于时刻很紧(一个半月),所以支撑越多越好。现在从开发商那里拿到了开发板,原理图,uClinux,相应驱动,bootloader,拿来就能够用了。软件硬件并行开发。(bootloader和网络操控器驱动没供给原码,比较惋惜:-(

  (2) 其时我对嵌入式体系的开发形式和ARM都是只要耳闻,linux触摸过一个月左右。现在想起来有些后怕。
  (3) 网上的资源,十分多。
供给一些我常用的。

http://www.uclinux.org/uClinux的大本营。
http://www.ucdot.org/里边有些技术文章十分不错。
http://www.linuxdevices.com/
http://www.linuxeden.com/这是国产的linux站点。
uclinux-dev@uclinux.org这是uClinux的邮件列表,答复问题的都是大牛,十分有协助,记住把你的邮件设置成纯文本格式。 请求是在:
http://mailman.uclinux.org/mailman/listinfo/uclinux-devweb方法。

  (4) 选用以上开发形式,软件的可维护性,可移植性和可扩展性都不错。
  (5) 现在该CPU运用仍是比较遍及,现货没问题。
  (6) 计划供给商的实质吗……..还算能够吧:-)

依据以上考虑和现在的开发状况,这套计划仍是比较令人满意。

今日先回家了,下回介绍详细开发步鄹吧。

2.开发环境的树立

  先说两句废话为和我曾经相同对操作体系(特别是嵌入式操作体系)利诱的弟兄解说些概念。由于总是有人在问是不是必定要用操作体系,我的CPU能不能移植操作体系,能够移植什么操作体系,有了操作体系可不能够运转某些程序。

  从我的个人经历来讲,这其实便是许多硬件身世的弟兄对操作体系这个东西有神秘感(和我一年前相同)。说白了,操作体系便是一段规划十分奇妙的程序,和你自己的程序从实质讲没有差异,所以,以上问题转为,我是不是必定要用这段程序,我的CPU能不能运转这段程序,能够跑什么样的程序。这个程序能够跑,调用这个程序接口的另一个程序能不能跑!
  答案也就变得简略,操作体系对任何一个CPU都不是有必要的(对嵌入式体系更是如此),你能够自己编些程序在没有操作体系的PC裸机上跑(BIOS便是这样的),像玩C51相同,(尽管奢华的让人有些心痛),或许移植UCOS到上面。另一方面,现代操作体系大多需求一些硬件的支撑,(像保护形式的完成),反过来说,高端CPU中专门有针对支撑操作体系的体系结构,这样,许多操作体系的完成是挑剔硬件渠道的。其实其它程序也相同,你编的程序运用的片上外设另一CPU上没有,那这段程序就无法移植了。这便是话粗理不粗。书归正传,仍是聊聊ARM+uClinux开发形式下开发环境的树立(其实下面说到的东西不只限于这种硬件渠道和操作体系)

  很久曾经就在介绍嵌入式体系开发的书上见过“穿插编译环境”这词,其时觉得很玄,用了今后才知道,其实便是处理在谁的地盘上用谁的东西编谁的代码问题。
  编译的最首要的作业就在将你的程序转化成运转该程序的CPU所能辨认的机器代码,不同的CPU有相应的编译器,另一方面。编译器自身也是程序,当然也要在某一个CPU渠道上运转。所以穿插编译的穿插点就在那个编译器自身是CPU1上的一个程序,却在为CPU2编译代码(整个一个吃里扒外!)。这么一想,曾经用51和dsp的开发软件(大部分都是IDE-集成开发环境)开发程序时,都算是穿插编译啦。当然,假设在你的ARM体系上,操作体系现已正常运转,而且你的资源满意多,你能够把PC机上运转的ARM编译东西移植到ARM上,然后一切该体系的运用程序都直接在ARM体系上编译,这就不算穿插编译,但假设有条件这么作,程序的开发或许移植就便利多了,由于整个开发进程又回到在自己PC机上编运用程序的那种形式了,那便是在自己的地盘上用自己的编译器编自己的运用程序。

  与不运用操作体系的开发形式不同(此处的操作体系特别指供给了专门的接口函数库的操作体系,现在的UCOS就不算),在方针板(便是完成体系的板子)运用操作体系的开发形式下,穿插编译环境中还需求该对应该操作体系的库。比方uClinux供给的uClibc。此刻,开发用的主机上不但要有方针板 CPU所需的编译东西,还要有对应操作体系的库,又由于一般库文件还要在开发机上拿方针CPU的编译器从头编译一下,所以还要把操作体系的原码也放到开发机上。(唉,跟方针板没什么联系,却要帮它背这么多东西,真是上辈子欠它的!!)。

  尽管操作体系的接口库至关重要,但我们好像现已淡忘了它的存在。这些多是由于我们现已远离了刀耕火种的时代(需求告知编译器需求的include途径,lib途径,以及lib的称号),集成的编译环境让我们编译链接的一切繁琐作业化刁难BUILD按钮的洒脱一击。而且不论是windows环境,仍是 linux环境,都有环境变量去记载这些参数。。但测验将/usr/lib目录改一个姓名,你就会知道你不能无视他们的存在,由于操作体系的功用都是通过这些库来交给运用层程序运用的。当然假设你的体系不依托任何操作体系,像最原始的那种彻底自己完成一切代码,就只需求一个编译东西,少了这些罗嗦事。
  以上的东西一般时分是没有必要细心研讨,但穿插环境下开发或移植比较大的程序时,你或许就需求了解编译器,链接器等开发东西的简直一切重要参数。

  我在开发时,主机彻底运用的是linux,假设有条件,主张我们这样作,linux的运用没有幻想的杂乱(尽管我现在身边还要放一本关于linux运用的书本),而且开发程序能够先在主机上调通,然后用穿插编译东西为方针体系从头编译一遍,能够这样做是由于主机是linux,方针体系跑 uClinux,两个操作体系供给的运用程序接口简直是相同的,所以程序简直不必修正。
  在我的体系上,树立根本的开发环境进程如下。
  1) 装置gnu开发东西链(是GNU开发的针对ARM CPU的一组编译开发程序(是linux程序)。包含arm-elf-gcc,arm-elf-ld等
  (2) 将uClinux源代码源代码解压到相应途径下,依照编译内核的步鄹编译一遍(此刻运用的编译东西现已是上面说到的ARM编译东西了,由于它要在ARM CPU上运转,别的,和编译linux内核相同,此刻能够通过menuconfig来对内核供给的功用进行削减
  (3) 将库(uClibc)解压到相应途径下,用以上东西编译一遍。
这样最根本的环境就算建立好了。

  以上作业关于做过的人来说比较简略,这儿介绍一下协助没有运用或刚开始运用这种开发形式的弟兄们理清一下思路。

3.一般运用程序的开发

  由于方针板上用uClinux,它供给的程序接口和linux下的根本共同,不共同的部分首要在于uClinux 不支撑MMU(应该说是uClinux是为不带MMU的cpu定制的),最显着的便是fork函数要用vfork函数代替,这也是编程时,感觉最不爽的一点(没办法,谁让我们的CPU有生理缺点)。另一个不易察觉的差异在于uClinux供给的库uClibc是通过削减的。更适合于资源严重的嵌入式体系(上回分化现已说了,运用程序很大一部分是在和库函数打交道,而且我们最终是链在一起,所以库函数大了,你的程序也小不了)。
  所以依据这种开发形式的运用程序开发变成了linux下的程序开发。而且在实践中一般是编好了程序先在主机上拿主机渠道上的编译器编译而且调试一下(linux下的编译器便是gcc了),当然条件是被调试的程序中需求的硬件条件主机具有,例如我的程序中有一段是针对串口的,所以先在主机编一个串口程序,调通今后拿方针板的编译器从头编译一下(假设看了上一章“穿插编译环境”,这儿就不会晕了),下载到方针板上运转,一般来说就能够直接用了。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/254328.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部