编程william hill官网
直播中

赵勇

7年用户 189经验值
私信 关注
[问答]

基于μClinux的嵌入式应用程序的开发,看完你就懂了

基于μClinux的嵌入式应用程序的开发,看完你就懂了

回帖(1)

李亮涟

2021-4-25 15:32:10
  嵌入式系统范同非常广泛,从简单的单片机系统到主频高达几百兆的使用操作系统的非计算机系统,都可以称为嵌入式系统。随着各行业电子系统应用要求的提高,嵌入式系统也越来越复杂,硬件要求速度快、集成度高、外部接口多,软件则要求功能丰富、模块化、易于扩展。ARM能够很好满足复杂嵌入式系统的要求,因此ARM芯片成为当前嵌入式应用最重要的硬件平台。嵌入式硬件平台性能的提高,使嵌入式操作系统的使用成为必然。
  1 嵌入式系统与μClinux
  基于ARM的嵌入式系统是当前最典型的嵌入式系统。嵌入式系统框图如图1所示。系统的硬件主要部件是ARM7系列的S3C44B0X处理器。当系统中需要使用各种各样的外围设备时,开发的难度相当大,使用操作系统可以提高升发的效率。因此,嵌入式操作系统是嵌入式系统极为重要的组成部分。它具有通用操作系统的基小特点,而又增加了实时高效性、硬件依赖性、应用专一性等新特点。常见的嵌入式操作系统有:VxWorks、uC/OS-II、Windows CE、μClinux等。μClinux操作系统是一种性能优良、源码公开且被广泛应用的免费嵌入式操作系统,因此很多无MMU单元的嵌入式系统都使用μClinux作为操作系统。
  μClinux是针对控制领域的嵌入式Linux操作系统,它从Linux 2.0/2.4内核派生而来,而又针对没有MMU的处理器进行设计,因此有着特别小的内核和用户软件空间,而且所有程序访问的地址都是实际的物理地址。操作系统对内存空间没有保护,各个进程实际上共享一个运行空间。
  2 μClinux的移植
  μClinux是依赖于硬件系统的,与PC上运行的Linux系统有较大的区别。因此在ARM系统中使用μClinux时,需要对内核进行裁剪,再添加一些需要的驱动程序,才能在不同的嵌入式碰件系统中运行。μClinux操作系统一般都是先在安装Linux的计算机上编译调试,然后再下载到目标系统板上运行,这一过程就是μClinux的移植。
  2.1 Bootloader的设计
  Bootloader就是在操作系统内核运行之前运行的一段程序。嵌入式系统的Bootloader程序烧录在系统地址的0x0处,即每次上电后先运行Bootloader,完成硬件系统的初始化、建立内存空间的映射图和μClinux的引导工作。完整的Bootloader引导流程描述。
  Bootloader的主要任务对时钟、中断、I/O等芯片资源进行初始化,为μClinux的运行做好准备。
  2.2 μClinux移植的方法
  2.2.1 建立交叉编译环境
  首先从网上下载GNU开发软件包arm-elf-tools-20030312.sh,然后到源码目录下执行sh arm-elf-tools-20030312.sh,这样在PC上建立了ARM体系结构的编译器、连接器、调试器,可以用来编译OS内核,制作文件系统等。
  2.2.2 在Windows下安装ADS工具
  ADS是ARM公司推出的新一代ARM集成开发工具。在硬件开发板完成后,可用ADS各硬件模块进行测试。
  2.2.3 编译μClinux
  把代码解压缩到工作目录下,运行tar xjvfμClinux-dist-51EDA.tar.bz2, 它会把全部的文件解压缩到home/μClinux-dist的目录下。然后进入目录运行menuconfig,对μClinux进行配置,订制自己的系统。
  注意对于编译uClinux,不能简单地通过make来实现。为了编译最后得到的镜像文件,我们需要linux的内核以及romfs。对于我们的S3C44B0X的移植来说,romfs是被编译到内核里面去的。因此,在编译内核前需要一个romfs。为了得到romfs的image,我们又需要编译用户的应用程序。而为了编译用户的应用程序,我们又需要编译C运行库,这里我们用的C运行库是uClibc。根据上面的分析,我们使用以下步骤编译μClinux。
  (1) make dep:建立文件之间的依赖关系,make会根据这个依赖关系来确定哪些义件需要重新编译、哪些文件可以跳过。
  (2) make lib only:编译uClibc。
  (3) make user only:编译用户的应用程序,包括初始化进程init,和用户交互的bash。
  (4) make romfs:它会在μClinux的目录下生成一个romfs目录并且把user目录下的文件、以及vendors目录下特定系统所需要的文件组织起来,以便下面生成romfs的单个镜像所用。
  (5) make image:是生成romfs的镜像文件和生成Linux的镜像。
  (6) make linux:用上面make image生成的romfs.o文件编译Linux内核。
  (7) make image:执行了这一步之后,就会在images目录下找到3个文件:image.ram,image.rom,romfs.img。其中,image.ram和image.rom就是我们需要的镜像文件。
  2.2.4 加载μClinux内核
  μClinux内核可以加载到Flash运行,也可以加载到RAM中运行。image.ram是直接下载到RAM执行的文件,加载到SDRAM后,修改PC指针寄存器的值指向image.ram的下载地址就可以执行。对于image.rom,它是一个zlmage文件,也就是自解压的内核。由于它使用了gzip将内核压缩过,所以可以减小文件的大小。这个image应该烧写到FLASH,向不能直接下载到RAM并执行。
  3 μClinux应用程序的开发
  要开发基于μClinux的应用程序,首先需要在PC上建立交叉编译环境,编写、调试应用程序,测试通过后,再重新编译μClinux内核映像,下载到目标板运行测试。具体步骤如下(在PC的Linux环境下进行)。
  (1) 在μClinux的user目录下创建新目录user/sample,用来存放应用程序源代码。编写应用程序“MyApp.c”文件。
  (2) 编辑文件user/Makefile,在Makefile文件中按照字母顺序增加以下内容:dir_$(CONFIG_USER_SAMPLE_MYAPP)+=sample。
  (3) 编辑文件config/Configure.help,增加下行:CONFIG USER SAMPLE MYAPP
  
  注意:第2行以2个空格开头,总长度小于70个字符。
  (4) 编辑文件config/config.in,在‘Games’后添加新的部分:
  
  (5) 在user/sample目录下创建应用程序的Makefile文件。
  
  
  (6) 重新编译生成image.rom。注意在运行makeconfig或make menuconfig时选择生成的应用程序“MyApp”。Makefile文件中修改如下:
  (7) 重新运行编译μClinux内核的步骤,把生成的image.ram或image.rom文件烧写到目标板,然后运行μClinux,操作系统启动后,运行应用程序MyApp,测试应用程序的功能实现。
  使用μClinux开发嵌入式应用程序,可以提高嵌入式系统开发的效率,而且易于扩展和移植,是嵌入式研发人员很好的选择。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分