嵌入式操作系统uClinux及其源代码分析(ZT)

(太原理工大学 计算机与软件学院 中国 太原030024)
摘要:建立在uClinux-2.4.x及兼容三星SNDS100实验板基础之上,对嵌入式操作系统的源代码文件的作用及目录构成进行了分析,并深入分析了嵌入式操作系统的编译过程和系统启动过程。
关键词:嵌入式操作系统 编译 启动 uClinux
Analysis of embedded operation system uClinux
& its source code
 
(Taiyuan University of Technology, College of computer and software,
Taiyuan, 030024 China)
Abstract: Based on uClinux-2.4.x and compatible board with Samsung SNDS100, uClinux source code and directory are analyzed and interpreted. Meanwhile, more attention is paid on the process of compile and startup procedure, with thorough analysis and interpretation.
Key words: embedded operation system, compile, startup, uClinux
1       前言
嵌入式技术飞速发展,其高端微控制器已有九成是建立在ARM体系结构之上,可选用的嵌入式操作系统则主要是VxWorks和uClinux。由于开源、免费和可裁减等诸多优点,uClinux逐渐成为科研和应用的首选。uClinux源自Linux,它们的内核核心部分基本相同
2       源代码文件及目录构成
在系统源代码根目录uClinux-dist下,原始子目录主要有:config、linux-2.4.x、lib、tools、user和vendors,还有文件Makefile。另外,在编译后生成子目录images和romfs,以及文件autoconfig.h、config.in和两个隐含文件:.config和.depend。
config子目录包含文件及下一级子目录,所有这些文件及子目录均与系统配置有关;linux-2.4.x子目录是嵌入式操作系统uClinux-2.4.x的核心目录,包括下一级子目录arch、include、init、drivers、fs、ipc、kernel、lib、mmnommu、scripts和关键文件Makefile、rules.make,编译后还要生成新文件romfs.o、linux和system.map;lib子目录为嵌入式操作系统提供压缩和改进了的函数库支持;tools子目录包含romfs-inst.sh文件,通过调用此文件,可以把目录或文件加入到romfs子目录中;user子目录包含各种驱动程序文件目录,根据用户的配置情况,不同的驱动程序会被编译进最后形成的操作系统中;vendors子目录包括与特定硬件平台相关的分类目录组。
3       编译过程分析
标准编译过程分为八步:make menuconfig通过执行脚本文件来调用函数显示用户配置文件中的选项,完成系统及内核配置,最后生成系统配置文件;make dep读取系统配置以创建编译时可依赖的关系树,结果被存储在隐含文件.depend中,makefile通过包含.depend文件来包含这种依赖关系树,用于指导编译;make clean清除以前配置和编译后生成的一些目录和文件;make user_only根据配置递归进入各子目录,编译所需的驱动程序,结果生成了user目录的各级子目录下的目标文件(*.o)和执行文件(*.exe)等;make romfs根据配置在根目录uClinux-dist下生成Romfs子目录及下属目录和文件;make image在根目录uClinux-dist下生成images子目录及下属文件;最后,make命令生成images子目录下的嵌入式操作系统及内核文件。
对最后一步make命令详细分析如下:
[uClinux-dist/makefile]                                        /*根目录下的入口*/
21 all:subdirs romfs modules modules_install image        /*检查依赖项,从subdirs开始*/
259 .PHONY: subdirs                                              
260 subdirs: linux                                         /*转向检查依赖项linux*/
249 linux linux%_only:                   
250 略4行,判断不是2.5内核又没有.depend文件则报错。
254         $(MAKEARCH_KERNEL) -C $(LINUXDIR) $(LINUXTARGET) || exit 1
   /*引导进入linux-2.4.x/子目录,做make bzImage。LINUXTARGET=bzImage*/
[uClinux-dist/linux-2.4.x/makefile]:          /* 此makefile文件中并没有bzImage项!*/
301 include arch/$(ARCH)/Makefile                      /*但却有包含(include)文件!*/
/*在arch/armnommu/Makefile文件中有bzImage项,继续make bzImage*/
[uClinux-dist/linux-2.4.x/arch/armnommu/Makefile]
269 bzImage zImage zinstall Image bootpImage install: $(LINUX)          /*先检查linux*/
[uClinux-dist/linux-2.4.x/makefile]             /*linux在原makefile中,返回原makefile*/
328 $(LINUX):include/linux.version.h $(CONFIGURATION) init/main.o inot/version.o
      Init/do_mounts.o linuxsubdirs            /*检查各依赖项,并生成相应目标文件*/
329        $(LD) $(LINKFLAGS) $(HEAD) init/main.o init/version.o init/do_mounts.o /
330 --start-group /            /*内核头文件HEAD=kernel/head-armv.o kernel/init_task.o*/
331 $(CORE_FILES) /            /*LINKFLAGS=-P –X –T arch/armnommu/vmlinux.lds*/
332 $(DRIVERS) /       /*CORE_FILES=kernel/kernel.o mmnommu/mmnommu.o fs/fs.o
333 $(NETWORKS) /                       ipc/ipc.o arch/armnommu/mach-snds100.o */
334 $(LIBS) /                /*DRIVERS:=$(DRIVERS-y),NETWORKS=net/network.o*/
335 -end-group//*LIBS=$(TOPDIR)/lib/lib.a /*(无此文件,因是静态链接,不用提供)*/
336  -o $(LINUX)         /*根据链接文件的安排,生成内核linux,包括Romfs.o文件*/
337$(NM)$(LINUX)|grep-v'/(compiled/)/|/(/.o$$/)/|/([aUw]/)/|/(/./.ng$$/)/|/
(LASH[RL]DI/)'|sort>System.map                        /*生成内核映像图文件*/
/*以上linuxsubdirs项引导分目录编译了内核文件,生成了相应的目标文件。注意这时引用的SUBDIRS是被arch/armnommu/Makefile扩充了的,包括12项,分别覆盖标准linux内核程序和与硬件相关的内核类程序。而CORE_FILES、DRIVERS、NETWORKS、LIBS分别引用了这些目标文件,从而构成了内核组(group)。内核组前附有内核头文件和内核初始化文件,后则附有系统文件目录romfs.o,三部分共同构成了系统内核。链接前生成链接文件arch/armnommu/vmlinux.lds */
[uClinux-dist/linux-2.4.x/arch/armnommu/Makefile]:         /*返回armnommu/Makefile*/
270 @$(MAKEBOOT) $@ /*展开为make arch/armnommu/boot LINUX=linux bzImage*/
/*已定义MAKEBOOT=$(MAKE) –C arch/$(ARCH)/boot LINUX=$(LINUX) */
[uClinux-dist/linux-2.4.x/arch/armnommu/boot/Makefile]:        /*忽略LINUX=linux */
129 bzImage: zImage                 /*实际执行make arch/armnommu/boot bzImage*/
131 zImage: $(CONFIGURE) compressed/$(LINUX)
137 compressed/$(LINUX): $(TOPDIR)/$(LINUX) dep
138 @$(MAKE) -C compressed $(LINUX)     /*转入compressed/子目录,做make linux*/
[uClinux-dist/linux-2.4.x/arch/armnommu/boot/compressed/Makefile]            
72 $(LINUX):$(HEAD)$(OBJS)piggy.o$(LINUX).lds /*系统HEAD=head.o,OBJS=misc.o*/
              /*首先要逐项检查更新依赖文件,条件如后所附。完成后,做下面的链接*/
73   $(LD) $(ZLDFLAGS) $(HEAD) $(OBJS) piggy.o -o $(LINUX)
/*根据链接文件linux.lds,链接生成嵌入式操作系统映像文件linux*/
75 $(HEAD):$(HEAD:.o=.S)                  /*以下12行为上面依赖文件的检查条件*/
76          $(CC) $(AFLAGS) -traditional -c $(HEAD:.o=.S)
78 piggy.o:$(SYSTEM)          /*SYSTEM=linux-2.4.x/linux内核文件,已在前面生成*/
79          $(OBJCOPY)-O binary -R.note -R.comment -S $(SYSTEM)    /*拷贝成piggy文件*/
80          g*** $(GZFLAGS) < piggy > piggy.gz               /*压缩piggy
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容简介:<br>在Linux或μClinux源代码中,Make文件是一种重要的文件,它担当着编译生成系统目标代码的重任。本书立足于μClinux源代码,通过分析其中的Make文件,以及与这些Make文件密切相关的部分源代码,给出一种在源代码水平上理解系统目标代码生成过程和生成原理的方法。这不仅是一本关于 Make文件编写、学习、组织、应用的书籍,也是一本基于ARM技术进行μClinux嵌入式系统开发的工程技术人员不可缺少的参考书,同时也是高等院校中有志于学习和应用Linux或μClinux师生们的良好教材。<br><br>目录:<br>前言<br>第1章 基于ARM的μClinux简介<br>1.1 嵌入式系统<br> 1.2 嵌入式系统与Unux<br> 1.3 Linux、μClinux与ARM<br> 1.4 Make文件的学习实验环境<br> 1.5 小结<br> 1.6 习题<br>第2章 Make文件的理解和阅读入门<br> 2.1 编写Make文件的例子<br> 2.2 Make文件的编写说明<br>  2.2.1 编写Make文件的要素<br>  2.2.2 具体规则的编写和使用概要<br>  2.2.3 静态格式规则<br>  2.2.4 双冒号规则<br>  2.2.5 自动生成#include中头文件依赖<br>  2.2.6 命令的使用技巧<br>  2.2.7 变量的定义和使用<br>  2.2.8 条件语句<br>  2.2.9 函数<br>  2.2.10 运行Make文件<br>  2.2.11 隐含规则<br>  2.2.12 用make更新档案文件<br> 2.3 Make文件中的惯例<br> 2.4 make产生的错误信息<br> 2.5 小结<br> 2.6 习题<br>第3章 Linux中Make文件及其相互关系<br> 3.1 核心Make文件传递下来的变量<br> 3.2 结构Make文件的变量<br> 3.3 子目录Make的结构<br> 3.4 Rules.make变量<br> 3.5 新方式变量<br> 3.6 小结<br> 3.7 习题<br>第4章 基于ARM的μClinux源代码中Make文件综述<br> 4.1 Make文件分布<br> 4.2 Make文件的分析<br>  4.2.1 Make文件的分类及相互关系<br>  4.2.2 Make文件在系统编译中的地位和作用<br>  4.2.3 Make文件表现出的功能和方法<br>  4.2.4 源代码、Make文件和系统目标的关系<br> 4.3 小结<br> 4.4 习题<br>第5章 核心Make文件功能与分析<br> 5.1 核心Make文件功能及其说明<br> 5.2 核心Make文件与其他Make文件的关系<br> 5.3 核心Make文件源代码分析与说明<br>  5.3.1 核心Make文件分析<br>  5.3.2 核心Make文件总体说明<br>  5.3.3 一个通用核心Make文件例子 <br> 5.4 小结<br> 5.5 习题<br>第6章 结构Make文件功能与分析<br> 6.1 结构Make文件功能与实现<br> 6.2 一例:ARM结构Make文件<br>  6.2.1 ARM结构Make文件说明<br>  6.2.2 ARM结构Make文件分析<br>  6.2.3 ARM结构Make文件总体说明<br> 6.3 二例:i386结构Make文件<br>  6.3.1 i386结构Make文件说明<br>  6.3.2 i386结构Make文件分析<br>  6.3.3 i386结构Make文件总体说明<br> 6.4 小结<br> 6.5 习题<br>第7章 Rules.make功能与分析<br>第8章 子目录Make文件功能与分析<br>第9章 μClinux系统配置源代码分析<br>第10章 自动确立依赖的分析<br>第11章 Make文件执行情景<br>参考文献<br>
### 回答1: 嵌入式操作系统是专门设计用于嵌入式系统的操作系统,通常具有小巧、高效、实时性等特点。以下是常用的嵌入式操作系统: 1. FreeRTOS:这是一款非常流行的开源实时操作系统,它适用于多种处理器架构,并提供了丰富的功能和工具。 2. uC/OS-II:这是一个非常流行的商业实时操作系统,它具有小巧、高效、可裁剪、可移植等特点。 3. eCos:这是一个开源的实时操作系统,它具有小巧、可移植、可裁剪、支持多种处理器架构等特点。 4. VxWorks:这是一个商业实时操作系统,它具有高可靠性、高实时性、可裁剪等特点。 5. ThreadX:这是一款商业实时操作系统,它具有高效、小巧、可裁剪等特点。 除了以上几款操作系统之外,还有其他嵌入式操作系统,如Nucleus RTOS、QNX Neutrino等,开发者可以根据项目的需求选择适合的操作系统。 ### 回答2: 常用的嵌入式操作系统包括实时操作系统(RTOS)和Linux内核。 实时操作系统是一种专门用于嵌入式系统的操作系统,它能够以实时的方式对任务进行调度和处理。常见的实时操作系统包括VxWorks、FreeRTOS、μC/OS等。这些操作系统具有快速响应、高效稳定的特性,适用于对实时性要求较高的嵌入式系统,如航空航天、汽车电子、工业控制等领域。 另外,Linux内核也被广泛应用于嵌入式系统。Linux内核具有良好的可移植性和开放性,可以适应各种硬件平台和应用场景。在嵌入式系统中,通常会选择精简版的Linux内核,如uClinux或BusyBox,以满足资源有限的嵌入式设备的需求。 除了实时操作系统和Linux内核外,还有其他一些嵌入式操作系统也值得关注。例如,Windows Embedded系列操作系统提供了丰富的图形界面和开发工具,适用于需要友好的用户界面和复杂应用功能的嵌入式系统。嵌入式实时操作系统QNX适用于高可靠性和高安全性需求的嵌入式设备。 总结起来,常用的嵌入式操作系统包括实时操作系统,如VxWorks、FreeRTOS、μC/OS等,Linux内核,以及其他一些操作系统如Windows Embedded和QNX等。根据具体的应用需求和资源限制,选择适合的嵌入式操作系统可以提高系统的性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值