书签 分享 收藏 举报 版权申诉 / 77
上传文档赚钱

类型嵌入式Linux编程入门与开发实例-第3章资料课件.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:2518760
  • 上传时间:2022-04-28
  • 格式:PPT
  • 页数:77
  • 大小:310KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《嵌入式Linux编程入门与开发实例-第3章资料课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    嵌入式 Linux 编程 入门 开发 实例 资料 课件
    资源描述:

    1、 【学习目标】l熟悉嵌入式系统开发环境的构建 l熟悉U-Boot的移植l掌握嵌入式Linux操作系统内核编译 嵌入式系统开发环境的构建嵌入式系统开发环境的构建3.1U-bootU-boot的移植的移植3.2嵌入式Linux操作系统内核编译3.3习题与练习习题与练习3.4 所谓交叉编译,就是利用运行在某台计算所谓交叉编译,就是利用运行在某台计算机(宿主机)上的编译器编译某个源程序,生机(宿主机)上的编译器编译某个源程序,生成在另一台机器(目标机)上运行的目标代码成在另一台机器(目标机)上运行的目标代码的过程。使用交叉编译的原因主要有两个,一的过程。使用交叉编译的原因主要有两个,一是目标平台所需要

    2、的是目标平台所需要的Bootloader以及操作系统以及操作系统核心没有建立起来时,需要做交叉编译;二是核心没有建立起来时,需要做交叉编译;二是一般目标板的资源都比较有限,不具备一定的一般目标板的资源都比较有限,不具备一定的处理器能力和存储空间,需要有强大的宿主处理器能力和存储空间,需要有强大的宿主PC机为它完成大部分的调试编译任务。机为它完成大部分的调试编译任务。binutils : 是一组二进制处理工具的集合,包是一组二进制处理工具的集合,包括连接器,汇编器和其他用于目标文件和档案的括连接器,汇编器和其他用于目标文件和档案的工具工具 。binutils的主要工具介绍如下:的主要工具介绍如下

    3、: addr2line:把程序地址转换为文件名和行号。在命令:把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。个文件以及行号。 ar:建立、修改、提取档案文件。档案文件是包含多:建立、修改、提取档案文件。档案文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。始文件内容。 as:主要用来编译:主要用来编译GNU C编译器编译器gcc输出的汇编文件

    4、,输出的汇编文件,产生的目标文件由连接器产生的目标文件由连接器ld连接。连接。 c+filt:连接器使用它来过滤:连接器使用它来过滤 C+ 和和 Java 符符号,防止重载函数冲突。号,防止重载函数冲突。 gprof: 显示程序调用段的各种数据。显示程序调用段的各种数据。 ld:是连接器,它把一些目标和归档文件结合:是连接器,它把一些目标和归档文件结合在一起,重定位数据,并链接符号引用。通常在一起,重定位数据,并链接符号引用。通常,建立一个新编译程序的最后一步就是调用,建立一个新编译程序的最后一步就是调用ld。 nm:列出目标文件中的符号。:列出目标文件中的符号。 objcopy:把一种目标文

    5、件中的内容复制到另一:把一种目标文件中的内容复制到另一种类型的目标文件中种类型的目标文件中. objdump: 显示一个或者更多目标文件的信息显示一个或者更多目标文件的信息。使用选项来进行控制。使用选项来进行控制。 ranlib:产生归档文件索引,并将其保存到这:产生归档文件索引,并将其保存到这个归档文件中。在索引中列出了归档文件各成个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件。员所定义的可重分配目标文件。 readelf:显示:显示ebf格式可执行文件的信息。格式可执行文件的信息。 size: 列出目标文件每一段的大小以及总体的列出目标文件每一段的大小以及总体的大小。默

    6、认情况下,对于每个目标文件或者一大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。个归档文件中的每个模块只产生一行输出。 size: 列出目标文件每一段的大小以及总体的列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。个归档文件中的每个模块只产生一行输出。 strings:打印某个文件的可打印字符串,这些:打印某个文件的可打印字符串,这些字符串最少字符串最少4个字符长,也可以使用选项个字符长,也可以使用选项-n设设置字符串的最小长度。默认情况下,它只打印置字符串的最

    7、小长度。默认情况下,它只打印目标文件初始化和可加载段中的可打印字符;目标文件初始化和可加载段中的可打印字符;对于其它类型的文件它打印整个文件的可打印对于其它类型的文件它打印整个文件的可打印字符,这个程序对于了解非文本文件的内容很字符,这个程序对于了解非文本文件的内容很有帮助。有帮助。 strip:丢弃目标文件中的全部或者特定符号。:丢弃目标文件中的全部或者特定符号。 libiberty:包含许多:包含许多GNU程序都会用到的函数程序都会用到的函数,这些程序有:,这些程序有: getopt, obstack, strerror, strtol 和和 strtoul等。等。 libbfd :二进制

    8、文件描述库。:二进制文件描述库。 libopcodes: 用来处理用来处理opcodes的库的库, 在生成一在生成一些应用程序的时候也会用到它。些应用程序的时候也会用到它。windres:一个一个windows资源的编译器。资源的编译器。GCC :工具是编译程序的最为主要的工具。工具是编译程序的最为主要的工具。GCC包括以下几个主要的工具:包括以下几个主要的工具:Cpp:C预处理器。预处理器。g+:C+编译器。编译器。gcc:C编译器。编译器。gccbug:创建:创建bug报告的报告的Shell脚本。脚本。gcov:分析在程序中哪里做优化效果好。:分析在程序中哪里做优化效果好。libgcc*:

    9、gcc的运行库。的运行库。libstdc+:标准:标准C+库,包含许多常用函库,包含许多常用函数。数。libsupc+:提供支持:提供支持C+语言的库函数。语言的库函数。 Glibe:是提供系统调用和基本函数的是提供系统调用和基本函数的 C 库,库,比如比如open(), malloc(), printf()等等。所有动态连等等。所有动态连接的程序都要用到它接的程序都要用到它 。Glibc 中主要有以下程序:中主要有以下程序:l catchsegv:当程序发生:当程序发生segmentation fault的的时候时候, 用来建立一个堆栈跟踪。用来建立一个堆栈跟踪。l gencat:建立消息列

    10、表。:建立消息列表。l getconf:针对文件系统的指定变量显示其系:针对文件系统的指定变量显示其系统设置值。统设置值。l getent:从系统管理数据库获取一个条目。:从系统管理数据库获取一个条目。l glibcbug:建立:建立glibc的的bug报告并且发送到报告并且发送到bug报告的邮件地址。报告的邮件地址。l iconv:转化字符集。:转化字符集。l iconvconfig:建立快速读取的:建立快速读取的iconv模块所使模块所使用的设置文件。用的设置文件。l ldconfig:设置动态链接库的实时绑定。:设置动态链接库的实时绑定。l ldd:列出每个程序或者命令需要的共享库:列出

    11、每个程序或者命令需要的共享库。l lddlibc4: 辅助辅助 ldd 操作目标文件。操作目标文件。l locale: 是一个是一个 Perl 程序,可以告诉编译器程序,可以告诉编译器打开或关闭内建的打开或关闭内建的locale支持。支持。l localedef: 编译编译locale标准。标准。l nscd:提供对常用名称设备调用的缓存的守护:提供对常用名称设备调用的缓存的守护进程。进程。l nscd_nischeck:检查在进行:检查在进行NIS+侦查时是否侦查时是否需要安全模式。需要安全模式。l pcprofiledump:打印:打印PC profiling产生的信息产生的信息。l pt

    12、_chown:是一个辅助程序,帮助:是一个辅助程序,帮助grantpt设设置子虚拟终端的属主,用户组和读写权限。置子虚拟终端的属主,用户组和读写权限。l rpcgen:产生实现:产生实现RPC协议的协议的C代码。代码。l rpcinfo:对:对RPC服务器产生一个服务器产生一个RPC呼叫。呼叫。l sln:用来创建符号链接,由于它本身是静态:用来创建符号链接,由于它本身是静态连接的,在动态连接不起作用的时候,连接的,在动态连接不起作用的时候,sln仍然仍然可以建立符号链接。可以建立符号链接。l sprof:读取并显示共享目标的特征描述数据:读取并显示共享目标的特征描述数据。l tzselect

    13、:对用户提出关于当前位置的问题:对用户提出关于当前位置的问题,并输出时区信息到标准输出。并输出时区信息到标准输出。l xtrace:通过打印当前执行的函数跟踪程序:通过打印当前执行的函数跟踪程序执行情况。执行情况。l zdump:显示时区。:显示时区。l zic:时区编译器。:时区编译器。l ld.so:帮助动态链接库的执行。:帮助动态链接库的执行。l libBrokenLocale:帮助程序处理破损:帮助程序处理破损locale,如,如Mozilla。l libSegFault:处理:处理 segmentation fault 信号,信号,试图捕捉试图捕捉segfaults。l libanl

    14、:异步名称查询库。:异步名称查询库。l L ibbsd-compat:为了在:为了在linux下执行一些下执行一些BSD程序程序,libbsd-compat提供了必要的可移植性提供了必要的可移植性。llibc:是主要的:是主要的C库库-常用函数的集成。常用函数的集成。llibcrypt:加密编码库。:加密编码库。llibdl:动态连接接口。:动态连接接口。llibg:g+的运行时。的运行时。llibieee:IEEE浮点运算库。浮点运算库。llibm:数学函数库。:数学函数库。llibmcheck:包括了启动时需要的代码。:包括了启动时需要的代码。llibmemusage:帮助:帮助 memu

    15、sage 搜集程序运行搜集程序运行时内存占用的信息。时内存占用的信息。llibnsl:网络服务库。:网络服务库。llibnss*: 是名称服务切换库,包含了解释主机是名称服务切换库,包含了解释主机名,用户名,组名,别名,服务,协议等等的名,用户名,组名,别名,服务,协议等等的函数。函数。llibpcprofile:帮助内核跟踪在函数:帮助内核跟踪在函数, 源码行和源码行和命令中命令中CPU使用时间。使用时间。llibpthread:POSIX 线程库。线程库。llibresolv:创建:创建,发送及解释到互联网域名服务发送及解释到互联网域名服务器的数据包。器的数据包。llibrpcsvc:提供

    16、:提供RPC的其他服务。的其他服务。llibrt: 提供了大部分的提供了大部分的POSIX.1b实时扩展的实时扩展的接口。接口。llibthread_db: 对建立多线程程序的调试很有对建立多线程程序的调试很有用。用。llibutil: 包含了在很多不同的包含了在很多不同的 Unix程序中使用程序中使用的的“标准标准”函数。函数。 Bootloader 就是在操作系统内核运行之前运就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个

    17、合适的状态,以便为最终的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。调用操作系统内核准备好正确的环境。 针对针对ARM处理器,常见的处理器,常见的Bootloader有有U-Boot、RedBoot、ARMBoot等:等:lU-Boot :它是它是sourceforge上的一个开放源代码的项上的一个开放源代码的项目,可对目,可对PowerPC、ARM、MIPS、x86等处理器提供等处理器提供支持,它支持的嵌入式操作系统有支持,它支持的嵌入式操作系统有Linux、VxWorks、NetBSD、QNX、RTEMS等,是目前支持最广泛、使用等,是目前支持最广泛、使用最多

    18、的最多的Bootloader。 3.2.1 Bootloader3.2.1 Bootloader概述概述lRedBoot : RedBoot是是Redhat公司随公司随eCos (Embedded Configurable Operating System)发布的)发布的一个一个Boot方案,是一个开源项目。方案,是一个开源项目。lARMBoot:是是sourceforge上的一个开放源代码的项上的一个开放源代码的项目,它最初的设计只是针对目,它最初的设计只是针对ARM处理器体系结构,所处理器体系结构,所以它可以很容易地被移植到各种以以它可以很容易地被移植到各种以ARM为核心的平台为核心的平台

    19、上。上。 图图3-1是一个同时装有是一个同时装有 Bootloader、内核的启动参数、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空内核映像和根文件系统映像的固态存储设备的典型空间分配结构图。间分配结构图。 图3-1 固态存储设备的典型空间分配结构3.2.2 Bootloader3.2.2 Bootloader的启动流程的启动流程 Bootloader 的启动过程有单阶段(的启动过程有单阶段(Single Stage)和多)和多阶段(阶段(Multi-Stage)两种形式。通常多阶段的)两种形式。通常多阶段的 Bootloader 能提供更为复杂的功能,以及更好的可移植性。从

    20、固态存能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的储设备上启动的 Bootloader 大多都是大多都是2 阶段的启动过程,阶段的启动过程,也即启动过程可以分为也即启动过程可以分为 stage 1 和和 stage 2 两部分。两部分。 stage1 通常包括以下步骤(按执行的先后顺序):通常包括以下步骤(按执行的先后顺序): (1)硬件设备初始化。)硬件设备初始化。 这是这是 Bootloader 一开始就执行的操作,其目的是为一开始就执行的操作,其目的是为 stage2 的执行以及随后的的执行以及随后的 kernel 的执行准备好一些基本的执行准备好一些基本的硬件环境。

    21、它通常包括以下步骤:的硬件环境。它通常包括以下步骤: l屏蔽所有的中断。为中断提供服务通常是屏蔽所有的中断。为中断提供服务通常是OS 设备驱动设备驱动程序的责任,因此在程序的责任,因此在Bootloader 的执行全过程中可以不的执行全过程中可以不必响应任何中断。中断屏蔽可以通过写必响应任何中断。中断屏蔽可以通过写 CPU 的中断屏的中断屏蔽寄存器或状态寄存器(比如蔽寄存器或状态寄存器(比如 ARM 的的 CPSR 寄存器)寄存器)来完成。来完成。 l设置设置 CPU 的速度和时钟频率。的速度和时钟频率。 l RAM 初始化。包括正确地设置系统的内存控初始化。包括正确地设置系统的内存控制器的功

    22、能寄存器以及各内存库控制寄存器等制器的功能寄存器以及各内存库控制寄存器等。 l初始化初始化 LED。典型地,通过。典型地,通过 GPIO 来驱动来驱动 LED,其目的是表明系统的状态是,其目的是表明系统的状态是 OK 还是还是 Error。如果板子上没有。如果板子上没有 LED,那么也可以通,那么也可以通过初始化过初始化 UART 向串口打印向串口打印 Bootloader 的的 Logo 字符信息来完成这一点。字符信息来完成这一点。 l 关闭关闭 CPU 内部指令数据内部指令数据 cache。 (2)为加载)为加载 Bootloader 的的 stage2 准备准备 RAM 空间。空间。 为

    23、了获得更快的执行速度,通常把为了获得更快的执行速度,通常把 stage2 加载到加载到 R A M 空 间 中 来 执 行 , 因 此 必 须 为 加 载空 间 中 来 执 行 , 因 此 必 须 为 加 载 Bootloader 的的 stage2 准备好一段可用的准备好一段可用的RAM 空空间范围。间范围。 (3)拷贝)拷贝 Bootloader 的的 stage2 到到 RAM 空间中。空间中。 拷贝时要确定拷贝时要确定stage2 的可执行映象在固态的可执行映象在固态存储设备的存放起始地址和终止地址一级存储设备的存放起始地址和终止地址一级RAM 空间的起始地址。空间的起始地址。 (4)

    24、设置好堆栈。)设置好堆栈。 堆栈指针的设置是为了执行堆栈指针的设置是为了执行 C 语言代码作好准语言代码作好准备。此外,在设置堆栈指针备。此外,在设置堆栈指针 sp 之前,也可以关闭之前,也可以关闭 LED 灯,以提示用户准备跳转到灯,以提示用户准备跳转到 stage2。经过上述。经过上述这些执行步骤后,系统的物理内存布局应该如下图这些执行步骤后,系统的物理内存布局应该如下图3-2所示。所示。图3-2 Bootloader 的 stage2 可执行映象刚被拷贝到 RAM 空间时的系统内存布局(5)跳转到)跳转到 stage2 的的 C 入口点。入口点。 在上述一切都就绪后,就可以跳转到在上述一

    25、切都就绪后,就可以跳转到 Bootloader 的的 stage2 去执行了。比如,在去执行了。比如,在 ARM 系统中,可以通过修改系统中,可以通过修改 PC 寄存器为合寄存器为合适的地址来实现。适的地址来实现。 stage2 通常包括以下步骤(按执行的先后顺序):通常包括以下步骤(按执行的先后顺序):(1)初始化本阶段要使用到的硬件设备。)初始化本阶段要使用到的硬件设备。 通常包括:初始化至少一个串口,以便和终通常包括:初始化至少一个串口,以便和终端用户进行端用户进行 I/O 输出信息;初始化计时器等。在输出信息;初始化计时器等。在初始化这些设备之前,也可以重新把初始化这些设备之前,也可以

    26、重新把 LED 灯点亮灯点亮,以表明已经进入,以表明已经进入 main()函数执行。设备初始化函数执行。设备初始化完成后,可以输出一些打印信息,程序名字字符完成后,可以输出一些打印信息,程序名字字符串、版本号等。串、版本号等。 (2)检测系统内存映射()检测系统内存映射(memory map)。)。 所谓内存映射就是指在整个所谓内存映射就是指在整个 4GB 物理物理地址空间中有哪些地址范围被分配用来寻地址空间中有哪些地址范围被分配用来寻址系统的址系统的 RAM 单元。单元。 (3)将)将kernel 映像和根文件系统映像从映像和根文件系统映像从 Flash 上读上读到到 RAM 空间中。空间中

    27、。 首先规划内存占用的布局,这里包括两个方面:首先规划内存占用的布局,这里包括两个方面:内核映像所占用的内存范围;根文件系统所占用的内核映像所占用的内存范围;根文件系统所占用的内存范围。在规划内存占用的布局时,主要考虑基内存范围。在规划内存占用的布局时,主要考虑基地址和映像的大小两个方面。地址和映像的大小两个方面。 对于内核映像,一般将其拷贝到从基地址开始对于内核映像,一般将其拷贝到从基地址开始的大约的大约1MB大小的内存范围内。大小的内存范围内。(4)为内核设置启动参数。)为内核设置启动参数。 在将内核映像和根文件系统映像拷贝到在将内核映像和根文件系统映像拷贝到RAM空间中后,就可以准备启动

    28、空间中后,就可以准备启动 Linux 内核了。但是内核了。但是在调用内核之前,应该作一步准备工作,即设置在调用内核之前,应该作一步准备工作,即设置 Linux 内核的启动参数。内核的启动参数。 (5)调用内核。)调用内核。 Bootloader 调用调用 Linux 内核的方法是直接跳内核的方法是直接跳转到内核的第一条指令处,也即直接跳转到转到内核的第一条指令处,也即直接跳转到 MEM_START0 x8000 地址处。在跳转时,下列地址处。在跳转时,下列条件要满足:条件要满足: lCPU 寄存器的设置:寄存器的设置:R00;R1机器类型机器类型 ID;关于;关于 Machine Type N

    29、umber,可以参见,可以参见 linux/arch/arm/tools/mach-types;R2启动参启动参数标记列表在数标记列表在 RAM 中起始基地址。中起始基地址。 lCPU 模式:必须禁止中断(模式:必须禁止中断(IRQs和和FIQs););CPU 必须必须 SVC 模式。模式。 lCache 和和 MMU 的设置:的设置:MMU 必须关闭;指必须关闭;指令令 Cache 可以打开也可以关闭;数据可以打开也可以关闭;数据 Cache 必须关闭。必须关闭。Bootloader的系统启动方案流程如图3-3所示。图3-3 Bootloader系统启动方案流图3.2.3 U-Boot 3.

    30、2.3 U-Boot 分析与移植分析与移植 U-Boot (Universal Bootloader),即),即通用通用Bootloader,是遵循,是遵循GPL条款的开放条款的开放源码项目。从源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其前身逐步发展演化而来。其前身是 由 德 国是 由 德 国 D E N X 软 件 工 程 中 心 的软 件 工 程 中 心 的Wolfgang Denk基于基于8xxROM的源码创建的源码创建的的PPCBOOT工程。工程。 U-Boot不仅仅支持嵌入式不仅仅支持嵌入式Linux系统的系统的引导,当前,它还支持引导,当前,它还支持

    31、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS嵌入式操作嵌入式操作系统。其目前要支持的目标操作系统是系统。其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris, Irix, SCO, Dell, NCR, VxWorks, LynxOS, pSOS, QNX, RTEMS, ARTOS。 U-Boot有如下特性:有如下特性:l开放源码开放源码,支持多种嵌入式操作系统内核支持多种嵌入式操作系统内核,如,如Linux、NetBSD, VxWorks, QNX, RTE

    32、MS, ARTOS, LynxOS;l支持多个处理器系列,如支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale;l较高的可靠性和稳定性较高的可靠性和稳定性;l高度灵活的功能设置,适合高度灵活的功能设置,适合U-Boot调试、操作调试、操作系统不同引导要求、产品发布等;系统不同引导要求、产品发布等;l丰富的设备驱动源码,如串口、以太网、丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;、键盘等;l较为丰富的开发调试文档与强大的网络技术支较为丰富的开发调试文档与强大的网络技术支持;持;l支持支持NFS挂载、挂载、

    33、RAMDISK(压缩或非压缩)(压缩或非压缩)形式的根文件系统;形式的根文件系统;l支持支持NFS挂载、从挂载、从Flash中引导压缩或非压缩系统内核中引导压缩或非压缩系统内核;l可灵活设置、传递多个关键参数给操作系统,适合系可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤其对统在不同开发阶段的调试要求与产品发布,尤其对Linux支持最强;支持最强;l支持目标板环境变量多种存储方式,如支持目标板环境变量多种存储方式,如Flash、NVRAM、EEPROM;lCRC32校验,可校验校验,可校验Flash中内核、中内核、RAMDISK镜像文镜像文件是否完好。件

    34、是否完好。l上电自检功能:上电自检功能:SDRAM、Flash大小自动检测,大小自动检测,SDRAM故障检测,故障检测,CPU型号。型号。l特殊功能:特殊功能:XIP内核引导。内核引导。 U-Boot源码结构:源码结构: 从网站上下载得到从网站上下载得到U-Boot源码包,例如:源码包,例如:U-Boot-1.1.26tar.bz2,解压就可以得到全部,解压就可以得到全部U-Boot源程序。在源程序。在顶层目录下有顶层目录下有26个子目录,分别存放和管理不同的源个子目录,分别存放和管理不同的源程序。这些目录中所要存放的文件有其规则,可以分程序。这些目录中所要存放的文件有其规则,可以分为为4类。

    35、类。l第第1类目录与处理器体系结构或者开发板硬件直接相关类目录与处理器体系结构或者开发板硬件直接相关;l第第2类目录是一些通用的函数或者驱动程序;类目录是一些通用的函数或者驱动程序;l第第3类目录是通用的设备驱动程序。类目录是通用的设备驱动程序。l第第4类目录是类目录是U-Boot的应用程序、工具或者文档。的应用程序、工具或者文档。目 录特 性解 释 说 明board平台依赖存放电路板相关的目录文件,例如:RPXlite(mpc8xx)、smdk2410(arm920t)、sc520_cdp(x86) 等目录cpu平台依赖存放CPU相关的目录文件,例如:mpc8xx、ppc4xx、arm720

    36、t、arm920t、 xscale、i386等目录lib_ppc平台依赖存放对PowerPC体系结构通用的文件,主要用于实现PowerPC平台通用的函数lib_arm平台依赖存放对ARM体系结构通用的文件,主要用于实现ARM平台通用的函数lib_i386平台依赖存放对X86体系结构通用的文件,主要用于实现X86平台通用的函数include通用头文件和开发板配置文件,所有开发板的配置文件都在configs目录下common通用通用的多功能函数实现表3-1 U-Boot顶层目录说明lib_generic通用通用库函数的实现Net通用存放网络的程序Fs通用存放文件系统的程序Post通用存放上电自检程

    37、序drivers通用通用的设备驱动程序,主要有以太网接口的驱动Disk通用硬盘接口程序Rtc通用RTC的驱动程序Dtt通用数字温度测量器或者传感器的驱动examples应用例程一些独立运行的应用程序的例子,例如helloworldtools工具存放制作S-Record 或者 U-Boot格式的映像等工具,例如mkimageDoc文档开发使用文档U-Boot的编译:的编译: U-Boot的源码是通过的源码是通过GCC和和Makefile组织组织编译的。顶层目录下的编译的。顶层目录下的Makefile首先可以设置首先可以设置开发板的定义,然后递归地调用各级子目录下开发板的定义,然后递归地调用各级子

    38、目录下的的Makefile,最后把编译过的程序链接成,最后把编译过的程序链接成U-Boot映像。映像。表3-2 U-Boot编译生成的映像文件文件名称说明System.mapU-Boot映像的符号表u-bootU-Boot映像的ELF格式u-boot.binU-Boot映像原始的二进制格式u-boot.srecU-Boot映像的S-Record格式U-Boot的移植:的移植: U-Boot能够支持多种体系结构的处理器,能够支持多种体系结构的处理器,支持的开发板也越来越多。因为支持的开发板也越来越多。因为Bootloader是是完全依赖硬件平台的,所以在新电路板上需要完全依赖硬件平台的,所以在新

    39、电路板上需要移植移植U-Boot程序。程序。移植移植U-Boot的基本步骤如下:的基本步骤如下:(1)在顶层)在顶层Makefile中为开发板添加新的配置选项。中为开发板添加新的配置选项。(2)创建一个新目录存放开发板相关的代码,并且添加)创建一个新目录存放开发板相关的代码,并且添加文件。文件。(3)为开发板添加新的配置文件)为开发板添加新的配置文件(4)配置开发板)配置开发板(5)编译)编译U-Boot(6)添加驱动或者功能选项。在能够编译通过的基础上)添加驱动或者功能选项。在能够编译通过的基础上,还要实现,还要实现U-Boot的以太网接口、的以太网接口、Flash擦写等功能。擦写等功能。(

    40、7)调试)调试U-Boot源代码,直到源代码,直到U-Boot在开发板上能够正在开发板上能够正常启动。常启动。3.2.4 VIVI 分析 VIVI是韩国是韩国MIZI Research公司为其开发的公司为其开发的SMDK2410开发板编写的一款开发板编写的一款Bootloader。VIVI也有前面说过的两种工作模式,启动加载模式可也有前面说过的两种工作模式,启动加载模式可以在一段时间(这个时间可更改)后自行启动以在一段时间(这个时间可更改)后自行启动Linux内核,这是内核,这是VIVI的默认模式。在下载模式的默认模式。在下载模式下,下,VIVI为用户提供一个命令行接口,通过该接为用户提供一个

    41、命令行接口,通过该接口可以使用口可以使用VIVI提供的一些命令,见表提供的一些命令,见表3-3。表3-3 VIVI的命令命令功能Load把二进制文件载入Flash或RAMPart操作MTD分区信息Param设置参数Boot启动系统Flash管理Flash配置VIVI使用的命令如下:make distclean; make menuconfig; 编 译 之 前 , 要 先 指 定 M a k e f i l e 文 件 中 的LINUX_INCLUDE_DIR、CROSS_COMPILE和ARM_GCC_LIBS。配置并保存后,使用make命令开始编译VIVI。 VIVI的代码包括的代码包括a

    42、rch, init, lib, drivers和和include等几个目录,共有等几个目录,共有200多个文件。多个文件。VIVI包括下面几个目录。包括下面几个目录。l arch:此目录包括了所有:此目录包括了所有VIVI支持的目标支持的目标板的子目录,这里只有板的子目录,这里只有s3c2410目录。目录。l drivers:其中包括了引导内核需要的设备:其中包括了引导内核需要的设备的驱动程序(的驱动程序(mtd和串口)。和串口)。mtd目录下的目录下的maps、nand和和nor三个目录分别是内存映射、三个目录分别是内存映射、NAND Flash驱动和驱动和NOR Flash驱动。驱动。li

    43、nit:这个目录只有:这个目录只有main.c和和version.c两个文件两个文件。和普通的。和普通的C程序一样,程序一样,VIVI将从将从main函数开函数开始执行。始执行。llib:一些平台公共的接口代码,比如:一些平台公共的接口代码,比如time.c里里的的udelay( )和和mdelay( )。linclude:头文件的公共目录,其中的:头文件的公共目录,其中的s3c2410.h定义了这块处理器的一些寄存器,以及定义了这块处理器的一些寄存器,以及NAND Flash的一些寄存器等。的一些寄存器等。platform/smdk2410.h定义了与开发板相关的资源配置参数,我们往定义了与

    44、开发板相关的资源配置参数,我们往往只需修改这个文件就可以配置目标板的参数往只需修改这个文件就可以配置目标板的参数,如波特率、引导参数、物理内存映射等。,如波特率、引导参数、物理内存映射等。 Linux内核是指内核是指Linux源代码经过编译和链接源代码经过编译和链接生成的映像文件(生成的映像文件(Image)。通常编译嵌入式)。通常编译嵌入式Linux内核都是通过不同的内核都是通过不同的make命令来实现的命令来实现的,它的执行配置文件就是通常所说的它的执行配置文件就是通常所说的Makefile,而而不同的不同的Makefile又通过互相的依赖关系构成一又通过互相的依赖关系构成一个统一的整体去

    45、完成建立依存关系、建立内核个统一的整体去完成建立依存关系、建立内核等功能。等功能。3.3.1 Linux3.3.1 Linux内核结构内核结构1、进程调度(、进程调度(SCHED) 控制进程对控制进程对CPU的访问。当需要选择下一个进程运的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待实际上是仅等待CPU资源的进程,如果某个进程在等待资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。其它资源,则该进程是不可运行进程。Linux使用了比使用了比较简单的基于优先级的进程调度算法选择新的进程。较

    46、简单的基于优先级的进程调度算法选择新的进程。2、内存管理(、内存管理(MM) 允许多个进程安全的共享主内存区域。允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存,即在计算机中的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块则保用的程序块保留在内存中,其余的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬内存间交换程

    47、序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关供了进程的映射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。的部分为内存管理硬件提供了虚拟接口。3、虚拟文件系统(、虚拟文件系统(VirtualFileSystem,VFS) 隐藏了各种硬件的具体细节,为所有的设备隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,提供了统一的接口,VFS提供了多达数十种不提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑

    48、文件系统指件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如所支持的文件系统,如ext2,fat等,设备驱动程等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。序模块。4、网络接口(、网络接口(NET) 提供了对各种网络标准的存取和各种网络硬提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件网络传输协议。网络设备驱动程序负责与硬件设备通讯,每

    49、一种可能的硬件设备都有相应的设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。设备驱动程序。5、 进程间通讯进程间通讯(IPC) 支持进程间各种通信机制。支持进程间各种通信机制。 各个子系统之间的依赖关系如下:各个子系统之间的依赖关系如下:l 进程调度与内存管理之间的关系:这两进程调度与内存管理之间的关系:这两个子系统互相依赖。在多道程序环境下个子系统互相依赖。在多道程序环境下,程序要运行必须为之创建进程,而创,程序要运行必须为之创建进程,而创建进程的第一件事情,就是将程序和数建进程的第一件事情,就是将程序和数据装入内存。据装入内存。l进程间通信与内存管理的关系:进程间通信子进程间通信与内

    50、存管理的关系:进程间通信子系统要依赖内存管理支持共享内存通信机制,系统要依赖内存管理支持共享内存通信机制,这种机制允许两个进程除了拥有自己的私有空这种机制允许两个进程除了拥有自己的私有空间,还可以存取共同的内存区域。间,还可以存取共同的内存区域。l虚拟文件系统与网络接口之间的关系:虚拟文虚拟文件系统与网络接口之间的关系:虚拟文件系统利用网络接口支持网络文件系统件系统利用网络接口支持网络文件系统(NFS),也利用内存管理支持也利用内存管理支持RAMDISK设备。设备。l内存管理与虚拟文件系统之间的关系:内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持交换,内存管理利用虚拟文件系统支

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:嵌入式Linux编程入门与开发实例-第3章资料课件.ppt
    链接地址:https://www.163wenku.com/p-2518760.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库