微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 教你轻松控制uClinux 嵌入式开发过程

教你轻松控制uClinux 嵌入式开发过程

时间:04-19 来源:互联网 点击:

意味着子进程可能破坏父进程的数据结构或栈,造成失败。

  为了避免这些问题,需要确保一旦调用vfork(),子进程就不从当前的栈框架中返回,并且如果子进程改变了父进程的数据结构就不能调用exit函数。子进程还必须避免改变全局数据结构或全局变量中的任何信息,因为这些改变都有可能使父进程不能继续。

  通常,如果应用程序不是在fork()之后立即调用exec(),就有必要在fork()被替换成vfork()之前做仔细的检查。

  2.应用程序

  尽管uClinux的Flat可执行格式并不会直接影响应用程序和它们的执行,但是它允许许多普通Linux下的ELF可执行格式所不允许的选项。比如,Flat可执行格式带来两个衍生系统—完全重定位和位置无关代码(Position-Independent Code,简称PIC)的变体。完全重定位系统将对应用程序的代码和数据进行重定位,而PIC系统通常只需要对数据进行部分重定位。

  对嵌入式开发者最有用的特性就是运行时空间大小不变(Execute-In-Place,简称XIP)。这样应用程序可以直接从闪存(Flash)或ROM 中运行,因为只需要应用程序所需占用的内存即可。不是所有的uClinux平台都实现了XIP,因为它需要编译器的支持以及Flat可执行格式的PIC形式。

  uClinux下的Romfs是惟一支持XIP的文件系统。要实现XIP,应用程序就必须被连续地装载到文件系统。 Flat格式还在它的头部定义了应用程序的栈大小。要增加分配给应用程序的栈,只需要简单地修改该部分,可以使用flthdr命令实现,格式如下:

  flthdr -s flat-executable

  Flat格式还允许整个可执行文件被压缩,以尽量缩小占用ROM的空间。它还有一个次要的作用就是使应用程序完全地装载到一个连续的RAM块中。既想节省ROM空间,又想使用XIP的时候,还可以选择Data-Segment-Only压缩形式。

  生成一个完全压缩的可执行文件:

  flthdr -z flat-executable

  只是生成压缩数据段:

  flthdr -d flat-executable

  特别小心共享库

  uClinux下的共享库各有不同。目前可用的解决方法需要修改编译器,并需要开发者特别小心。其实,当前的uClinux发行版本中提供了uC-libc和uClibc库,最好的方法是以这两个库为例子来创建自己的共享库。

  另外,uClinux下的共享库必须是Flat格式的可执行文件,并且要真正实现共享,必须实现XIP。如果不实现XIP,共享库就会为每个使用它的应用程序创建一份拷贝,这还不如使用静态链接应用程序。

  小结

  uClinux趋向于更深入的嵌入式系统,它需要更少的内存,并可直接在ROM上运行。如果初次在uClinux下开发的人遇到没有硬件驱动、有严格的资源限制,以及没有内存保护等一系列的情况,最好的入手方法就是使用uClinux仿真器(见图2)。

  图2 uClinux仿真器Xcopilot

  强调以上这些问题有助于开发者提前做好准备,避免在uClinux下工作时常遇到陷阱和误解。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top