您的位置:控制工程论坛网论坛 » 嵌入式系统 » 基于Arm-μClinux应用开发的简介

mcumao

mcumao   |   当前状态:离线

总积分:1503  2024年可用积分:0

注册时间: 2006-01-20

最后登录时间: 2007-06-11

空间 发短消息加为好友

基于Arm-μClinux应用开发的简介

mcumao  发表于 2006/3/14 11:53:11      1445 查看 0 回复  [上一主题]  [下一主题]

手机阅读

摘  要:μClinux作为嵌入式系统的优势在于:开源,免费,稳定及强大的网络功能!与标准LINUX的主要区别在于不支持MMU及文件系统的不同!自己组建ARM+μClinux软件开发平台的过程:下载编译工具(arm-elf-tools)并安装,下载内核源码(uClinux-Samsung-20020318.tar),解压,根据需要裁减功能模块,编译,最终生成BIN文件!举例说明了添加设备驱动的过程,主要为通过registerchrdev()函数注册设备,利用fileoperations数据结构实现open()、read()等设备操作功能!举例说明添加应用程序的过程!
 关键词:嵌入式;μClinux;ARM

  近年来随着信息家电和手持设备的应用,嵌入式系统得到了极大的发展。全球每年生产的CPU中有超过80%是应用于专用性很强的各类嵌入式系统,而最初,这类CPU仅进行一些简单的控制,系统大多在超级循环加中断的方式下工作,而随着32位高性能专用CPU的出现(如ARM),嵌入式系统能够适应复杂的控制,进行多任务的处理,极大的提升了效率。当然这一切还需嵌入式操作系统的支持。嵌入式Linux以其特有的魅力在市场中逐渐赢得了众
多用户的青睐,本文即介绍了μClinux的开发环境的组建流程,及应用程序和驱动程序的开发过程。

1 ARM-μClinux的简介  
  Linux是在90年代初出现,近几年渐受欢迎的操作系统,其最大特点是开放源代码。它原本被设计为桌面系统,现在广泛应用于服务器领域。而在嵌入式系统的领域中,linux逐渐成为新的热点。
  μClinux即是目前嵌入式linux中最流行的一种。μClinux是Micro-Control-Linux的缩写,字面上的理解就是”针对微控制领域而设计的Linux系统”,它和标准的linux的区别,也即μClinux的小型化体现在以下几点:
  首先,μClinux不支持MMU(内存管理单元),这是μClinux最显著的特征。μClinux采用实存储器管理策略进行存储器的分页管理,这有别于标准linux使用的虚拟存储器技术,从易用性上来说是一种倒退,因为这对开发人员提出了更多的要求。但是MMU需要相应的硬件支持,而在嵌入式系统中出于成本和应用的考虑,许多微控制器并没有相应支持MMU的硬件,所以没有MMU并不影响许多嵌入式系统选择μClinux操作系统。
  其次,μClinux默认文件系统为romfs,相对于标准linux一般采用的ext2文件系统要求更少的空间,这主要体现在两个方面,一是内核支持romfs文件系统所需的代码相对更少;二是romfs本身比较简单,在建立文件系统超级块时所需存储空间较小。但是romfs不支持动态擦写保存。
  再次,μClinux重写了程序库,对标准linux日益庞大的应用程序库和驱动程序库做了相应的删改。值得一提的是,μClinux对程序库采用静态连接的形式,这是由μClinux内存管理形式决定的。
  由此,μClinux的容量有了大幅度的减小,整个操作系统的代码甚至小于900 K。即使如此,μClinux仍然保持了linux的主要优点,如稳定性,强大的网络功能和出色的文件系统支持等。同时μClinux已经成功移植到大部分嵌入式处理器中,国内已有公司成功推出带μClinux操作系统的产品。
  在嵌入式领域中,32 bit嵌入式处理器的内核基本采用RISC指令集,其中以ARM公司的ARM核和MOTOROLA公司的68 K/COLDFIRE系列最为流行,而在手持设备领域上更是ARM核的天下。
  本文对μClinux开发应用的简介即是基于μClinux-Samsung-20020318.tar+readhat9.0+arm-elf-tools-20030314.sh软件平台,配套的ARM芯片是三星4510。
2 开发平台的建立  
  建立μClinux的开发环境不外乎两种情况:一是购买商家发行的套件;二是利用网上资源自己组建。而后者省钱且能学到更多东西,是许多爱好者或学生的首选,下面列出自己组建步骤,以供参考:
    1) 首先安装reahat9.0,具体见其他相关资料;
  2) 在mac.os.nctu.edu.tw网站(台湾交大的一个专门针对sumsung4510芯片的μClinux网站)上下载源码,μClinux-Samsung-20020318.tar和arm-elf-tools-20030314.sh;
  3) 然后解压文件:在redhat的终端中切换到源码目录下执行以下命令:
  sh arm-elf-tools-20030314.sh  //即安装ARM-GCC工具
  tar xzfμClinux-Samsung-20020318.tar.gz //即解压源码
  4) 编译内核:进到解开的μClinux目录中,依次执行以下命令:
  make menuconfig在出现的对话框选中Samsung/4510B和uC-libc及其它所需选项
    make dep
    make clean
    make libonly
    make useronly
    make romfs
  make image在这步会出现错误报告,可忽略继续下面的命令make
  最后在/images目录下可看到二进制的内核文件,即image.ram和image.rom,前者是未经压缩的RAM版本内核,后者相反。把image.rom烧录到flash中,重新上电,在串口1中即可看到启动信息,串口的波特率为19 200。这样Arm-μClinux的开发环境就搭建成功。
3 μClinux的应用开发:  
  在实际项目开发中,对μClinux的应用开发集中在两个方面,即驱动程序和用户程序的编写。
μClinux的驱动程序库不可能包括实际项目系统中所有外围硬件的驱动,所以在应用开发中,编写驱动程序是一个重要步骤,驱动程序设计的好坏直接影响系统运行的稳定性和运行效率。而嵌入式操作系统的卓越功能最终是由应用程序体现出来的,所以应用程序的优劣是影响嵌入式产品的重要因素,稳定高效的应用程序取决于开发人员对μClinux系统的熟悉程度和自身的编程经验。下面对这两个方面作个简介:
  A.驱动程序的编写:
  设备驱动程序是内核和机器硬件之间的接口。
根据不同的设备驱动程序分为两类:字符设备和块设备;前者是直接读取数据,即I/O接口的请求直接被送到设备上;而后者的数据是通过内核缓冲区进行传输的!linux驱动程序的编译有两种方式:即静态编译进内核,和编译成模块供动态加载或卸载!由于μClinux不支持动态加载或卸载,故只能采取静态编译的方式!因为涉及到对硬件的操作而容易使系统崩溃,所以编写设备驱动程序时除了强调高效,同时还要求安全!
  一个典型的驱动程序,大体上可以分为以下两个方面:
  1) 注册设备:在系统初启时,必须将设备登记到相应的设备数组,例如 :对于字符驱动设备来说,要使用registerchrdev()来注册设备的驱动号,然后对这个设备的所有调用都用这个设备号来实现;
  2) 定义功能函数:对于每一个驱动函数来说,都有一些和此设备密切相关的功能函数,就最常用的字符设备来说,都存在着诸如open()、read()、write()、ioctrol()这一类的操作。当系统调用这些操作时,将自动的使用fileoperations结构中对应的函数来实现具体的操作;
  在编写驱动程序前,不得不提fileoperations这个结构,每个设备都有自己的fileoperations结构,它定义了设备的基本入口点,即上面提到的功能函数。  下面以一个简单的演示例子,说明编写字符设备驱动程序的具体过程,设备取名为“test”,设备号定为254,当然这个设备并没有涉及真正的硬件,仅是从内核空间拷贝了一些特定数据到用户空间:
  第一步:在目录/linux-2.4/drives/char编写源程序test.c,源码如下:
头文件和全局变量:






  4) 修改vendor/Samsung/4510b/Makefile,建立设备节点:
  在12---35行间,DEVICE部分添加如下内容test,c,254,0
  5) make menuconfig,在character device选中testdevice
  这样在重新编译的内核中,就包含了名为“test”的设备驱动,下面的例子是用于验证这个设备驱动程序的,至于怎样运行这个验证程序将在下面“应用程序的编写”一节中讲解:


    B.应用程序的编写
  在μCLinux的/user目录下提供许多资源供开发者参考。下面以上节提到的源程序为例,说明在
μCLinux中加入自己应用程序的过程。
  第一步:首先在/user/目录下建立自己的文件夹如,取名apptest,然后在新建文件夹(apptest)下编辑自己的应用程序apptest.c(源码为上面的设备驱动验证程序),然后参照user目录下其他应用程序编写自己的makefile,同样保存在文件apptest下;
  第二步:在/user/Makefile中适当位置加入下行语句:
  dir$(CONFIGUSERAPPTESTAPPTEST)+=apptest
  第三步:在/config/Configure.help的适当位置添加以下语句:
CONFIGUSERAPPTESTAPPTESTThis programdoes APPTESTthingsto your bars.
  第四步:在/config/config.in的适当位置添加以下语句:
  bool’apptest’CONFIGUSERAPPTESTA-PPTEST
  最后再重新编译内核,在make menuconfig时,选中自己的应用程序,完成后在/bin目录可以看见ap-ptest的可执行文件,通过控制台直接输入该文件名即可运行该程序!当然也可以在文件vendor/Sam-sung/4510B/rc中添加文件名apptest,重新编译,在uclinux启动后自动执行该应用程序!
4 结束语  
  嵌入式系统已逐渐成为后PC时代的主导,而嵌入式操作系统μClinux凭其出色的性能和广泛的技术支持应该有更广阔的应用前景。本文举例说明了μClinux的开发应用的过程,可作为入门指导。

参考文献

[1] Alessandro Rubini和Jonathan Corbet著,魏永明等译LINUX设备驱动程序(第二版)中国电力出版社.2002年10月.
[2] 邹思轶主编.嵌入式Linux设计与应用.清华大学出版社.2002.
[3] 王学龙著.嵌入式Linux系统设计与应用.清华大学出版社.2001.
[4] Rick Grehan,Robert Moote,lngo Cyliax著,许汝峰译.32位嵌入式系统编程.中国电力出版社.2001年3月.

1楼 0 0 回复