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

文章作者 100test 发表时间 2007:03:14 16:16:58
来源 100Test.Com百考试题网


  掌控进程和应用程序
  
  1.进程
  
  有虚拟内存的Linux和uClinux的另一个区别在于后者没有fork()系统调用。这就要求开发者在移植时对使用了fork()的应用程序做一些工作。uClinux下惟一的选择是使用vfork()。尽管vfork()与fork()有很多共同点,但是它们之间的区别影响很大。
  
  对于不熟悉fork()和vfork()的人来说,这两个系统调用都是允许将一个进程分裂成一个父进程和一个子进程。当一个进程调用fork()时,子进程是父进程的一个完全拷贝,但是它不共享父进程的任何东西,并且能够单独执行,就和父进程一样。vfork()调用就不同了,首先,父进程被挂起直到子进程调用exec(),或者子进程退出才能继续。
  
  由此可见,这个系统调用是用来启动一个新的应用程序。其次,子进程在vfork()返回后直接运行在父进程的栈空间,并使用父进程的内存和数据。这意味着子进程可能破坏父进程的数据结构或栈,造成失败。
  
  为了避免这些问题,需要确保一旦调用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)。

           

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



相关文章


LINUX的集群系统简介及现状
七款嵌入式Linux操作系统的简介
教你轻松控制uClinux嵌入式开发过程(上)
如何配置Linux操作系统的安全服务管理
教你轻松控制uClinux嵌入式开发过程(下)
linux服务器-架设安全的CVS服务器
Linux入门时必学60文件处理个命令之一
Linux入门时必学60文件处理个命令之二
用qmake快速生成makefile
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛