最新嵌入式Linux编程入门与开发实例-第3章PPT课件.ppt
《最新嵌入式Linux编程入门与开发实例-第3章PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新嵌入式Linux编程入门与开发实例-第3章PPT课件.ppt(78页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、嵌入式嵌入式Linux编程入门与开发编程入门与开发实例实例-第第3章章第第3 3章章 构建嵌入式构建嵌入式LinuxLinux开发环境开发环境 嵌入式系统开发环境的构建嵌入式系统开发环境的构建3.1U-bootU-boot的移植的移植3.2嵌入式Linux操作系统内核编译3.3习题与练习习题与练习3.4 strip:丢弃目标文件中的全部或者特定符号。:丢弃目标文件中的全部或者特定符号。libiberty:包含许多:包含许多GNU程序都会用到的函数,程序都会用到的函数,这些程序有:这些程序有:getopt,obstack,strerror,strtol 和和 strtoul等。等。libbfd:
2、二进制文件描述库。:二进制文件描述库。libopcodes:用来处理用来处理opcodes的库的库,在生成一在生成一些应用程序的时候也会用到它。些应用程序的时候也会用到它。windres:一个一个windows资源的编译器。资源的编译器。GCC:工具是编译程序的最为主要的工具。工具是编译程序的最为主要的工具。GCC包括以下几个主要的工具:包括以下几个主要的工具:Cpp:C预处理器。预处理器。g+:C+编译器。编译器。gcc:C编译器。编译器。gccbug:创建:创建bug报告的报告的Shell脚本。脚本。gcov:分析在程序中哪里做优化效果好。:分析在程序中哪里做优化效果好。libgcc*:g
3、cc的运行库。的运行库。libstdc+:标准:标准C+库,包含许多常用函库,包含许多常用函数。数。libsupc+:提供支持:提供支持C+语言的库函数。语言的库函数。Glibe:是是提提供供系系统统调调用用和和基基本本函函数数的的 C 库库,比比如如open(),malloc(),printf()等等等等。所所有有动动态态连连接的程序都要用到它接的程序都要用到它。Glibc 中主要有以下程序:中主要有以下程序:l catchsegv:当程序发生:当程序发生segmentation fault的的时候时候,用来建立一个堆栈跟踪。用来建立一个堆栈跟踪。l gencat:建立消息列表。:建立消息列
4、表。l getconf:针对文件系统的指定变量显示其系:针对文件系统的指定变量显示其系统设置值。统设置值。l getent:从系统管理数据库获取一个条目。:从系统管理数据库获取一个条目。l glibcbug:建立:建立glibc的的bug报告并且发送到报告并且发送到bug报告的邮件地址。报告的邮件地址。l iconv:转化字符集。:转化字符集。l iconvconfig:建立快速读取的:建立快速读取的iconv模块所使模块所使用的设置文件。用的设置文件。l ldconfig:设置动态链接库的实时绑定。:设置动态链接库的实时绑定。l ldd:列出每个程序或者命令需要的共享库。:列出每个程序或者命
5、令需要的共享库。l lddlibc4:辅助辅助 ldd 操作目标文件。操作目标文件。l locale:是一个是一个 Perl 程序,可以告诉编译器程序,可以告诉编译器打开或关闭内建的打开或关闭内建的locale支持。支持。l localedef:编译编译locale标准。标准。l nscd:提供对常用名称设备调用的缓存的守护:提供对常用名称设备调用的缓存的守护进程。进程。l nscd_nischeck:检查在进行:检查在进行NIS+侦查时是否侦查时是否需要安全模式。需要安全模式。l pcprofiledump:打印:打印PC profiling产生的信息。产生的信息。l pt_chown:是一
6、个辅助程序,帮助:是一个辅助程序,帮助grantpt设设置子虚拟终端的属主,用户组和读写权限。置子虚拟终端的属主,用户组和读写权限。l rpcgen:产生实现:产生实现RPC协议的协议的C代码。代码。l rpcinfo:对:对RPC服务器产生一个服务器产生一个RPC呼叫。呼叫。l sln:用来创建符号链接,由于它本身是静态:用来创建符号链接,由于它本身是静态连接的,在动态连接不起作用的时候,连接的,在动态连接不起作用的时候,sln仍然仍然可以建立符号链接。可以建立符号链接。l sprof:读取并显示共享目标的特征描述数据。:读取并显示共享目标的特征描述数据。l tzselect:对用户提出关于
7、当前位置的问题:对用户提出关于当前位置的问题,并并输出时区信息到标准输出。输出时区信息到标准输出。l xtrace:通过打印当前执行的函数跟踪程序:通过打印当前执行的函数跟踪程序执行情况。执行情况。l zdump:显示时区。:显示时区。l zic:时区编译器。:时区编译器。l ld.so:帮助动态链接库的执行。:帮助动态链接库的执行。l libBrokenLocale:帮助程序处理破损:帮助程序处理破损locale,如,如Mozilla。l libSegFault:处理:处理 segmentation fault 信号,信号,试图捕捉试图捕捉segfaults。l libanl:异步名称查询库
8、。:异步名称查询库。l L ibbsd-compat:为了在:为了在linux下执行一些下执行一些BSD程序程序,libbsd-compat提供了必要的可移植性。提供了必要的可移植性。llibc:是主要的:是主要的C库库-常用函数的集成。常用函数的集成。llibcrypt:加密编码库。:加密编码库。llibdl:动态连接接口。:动态连接接口。llibg:g+的运行时。的运行时。llibieee:IEEE浮点运算库。浮点运算库。llibm:数学函数库。:数学函数库。llibmcheck:包括了启动时需要的代码。:包括了启动时需要的代码。llibmemusage:帮助:帮助 memusage 搜集
9、程序运行搜集程序运行时内存占用的信息。时内存占用的信息。llibnsl:网络服务库。:网络服务库。llibnss*:是名称服务切换库,包含了解释主机是名称服务切换库,包含了解释主机名,用户名,组名,别名,服务,协议等等的名,用户名,组名,别名,服务,协议等等的函数。函数。llibpcprofile:帮助内核跟踪在函数:帮助内核跟踪在函数,源码行和源码行和命令中命令中CPU使用时间。使用时间。llibpthread:POSIX 线程库。线程库。llibresolv:创建:创建,发送及解释到互联网域名服务发送及解释到互联网域名服务器的数据包。器的数据包。llibrpcsvc:提供:提供RPC的其他
10、服务。的其他服务。llibrt:提供了大部分的提供了大部分的POSIX.1b实时扩展的实时扩展的接口。接口。llibthread_db:对建立多线程程序的调试很有对建立多线程程序的调试很有用。用。llibutil:包含了在很多不同的包含了在很多不同的 Unix程序中使用程序中使用的的“标准标准”函数。函数。3.2 3.2 移植移植U-bootU-bootBootloader就就是是在在操操作作系系统统内内核核运运行行之之前前运运行行的的一一段段小小程程序序。通通过过这这段段小小程程序序,可可以以初初始始化化硬硬件件设设备备、建建立立内内存存空空间间的的映映射射图图,从从而而将将系系统统的的软软
11、硬硬件件环环境境带带到到一一个个合合适适的的状状态态,以以便便为为最最终终调用操作系统内核准备好正确的环境。调用操作系统内核准备好正确的环境。针针 对对 ARM处处 理理 器器,常常 见见 的的 Bootloader有有 U-Boot、RedBoot、ARMBoot等:等:lU-Boot:它是它是sourceforge上的一个开放源代码的项上的一个开放源代码的项目,可对目,可对PowerPC、ARM、MIPS、x86等处理器提供等处理器提供支持,它支持的嵌入式操作系统有支持,它支持的嵌入式操作系统有Linux、VxWorks、NetBSD、QNX、RTEMS等,是目前支持最广泛、使用等,是目前
12、支持最广泛、使用最多的最多的Bootloader。3.2.1 Bootloader3.2.1 Bootloader概述概述lRedBoot:RedBoot是是Redhat公司随公司随eCos(Embedded Configurable Operating System)发布的)发布的一个一个Boot方案,是一个开源项目。方案,是一个开源项目。lARMBoot:是是sourceforge上的一个开放源代码的项上的一个开放源代码的项目,它最初的设计只是针对目,它最初的设计只是针对ARM处理器体系结构,所处理器体系结构,所以它可以很容易地被移植到各种以以它可以很容易地被移植到各种以ARM为核心的平台
13、为核心的平台上。上。图图3-1是一个同时装有是一个同时装有 Bootloader、内核的启动参数、内核的启动参数、内核映像和根文件系统映像的固态存储设备的典型空内核映像和根文件系统映像的固态存储设备的典型空间分配结构图。间分配结构图。图3-1固态存储设备的典型空间分配结构3.2.2 Bootloader3.2.2 Bootloader的启动流程的启动流程 Bootloader 的启动过程有单阶段(的启动过程有单阶段(Single Stage)和多)和多阶段(阶段(Multi-Stage)两种形式。通常多阶段的)两种形式。通常多阶段的 Bootloader 能提供更为复杂的功能,以及更好的可移植
14、性。从固态存能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的储设备上启动的 Bootloader 大多都是大多都是2 阶段的启动过程,阶段的启动过程,也即启动过程可以分为也即启动过程可以分为 stage 1 和和 stage 2 两部分。两部分。stage1 通常包括以下步骤(按执行的先后顺序):通常包括以下步骤(按执行的先后顺序):(1)硬件设备初始化。)硬件设备初始化。这是这是 Bootloader 一开始就执行的操作,其目的是为一开始就执行的操作,其目的是为 stage2 的执行以及随后的的执行以及随后的 kernel 的执行准备好一些基本的执行准备好一些基本的硬件环境。
15、它通常包括以下步骤:的硬件环境。它通常包括以下步骤:l屏蔽所有的中断。为中断提供服务通常是屏蔽所有的中断。为中断提供服务通常是OS 设备驱动设备驱动程序的责任,因此在程序的责任,因此在Bootloader 的执行全过程中可以不的执行全过程中可以不必响应任何中断。中断屏蔽可以通过写必响应任何中断。中断屏蔽可以通过写 CPU 的中断屏的中断屏蔽寄存器或状态寄存器(比如蔽寄存器或状态寄存器(比如 ARM 的的 CPSR 寄存器)寄存器)来完成。来完成。l设置设置 CPU 的速度和时钟频率。的速度和时钟频率。l RAM 初始化。包括正确地设置系统的内存控初始化。包括正确地设置系统的内存控制器的功能寄存
16、器以及各内存库控制寄存器等。制器的功能寄存器以及各内存库控制寄存器等。l初始化初始化 LED。典型地,通过。典型地,通过 GPIO 来驱动来驱动 LED,其目的是表明系统的状态是,其目的是表明系统的状态是 OK 还是还是 Error。如果板子上没有。如果板子上没有 LED,那么也可以通,那么也可以通过初始化过初始化 UART 向串口打印向串口打印 Bootloader 的的 Logo 字符信息来完成这一点。字符信息来完成这一点。l 关闭关闭 CPU 内部指令数据内部指令数据 cache。(2)为加载)为加载 Bootloader 的的 stage2 准备准备 RAM 空间。空间。为为了了获获得
17、得更更快快的的执执行行速速度度,通通常常把把 stage2 加加载载到到 RAM 空空 间间 中中 来来 执执 行行,因因 此此 必必 须须 为为 加加 载载 Bootloader 的的 stage2 准准备备好好一一段段可可用用的的RAM 空空间范围。间范围。(3)拷贝)拷贝 Bootloader 的的 stage2 到到 RAM 空间中。空间中。拷拷贝贝时时要要确确定定stage2 的的可可执执行行映映象象在在固固态态存存储储设设备备的的存存放放起起始始地地址址和和终终止止地地址址一一级级RAM 空空间的起始地址。间的起始地址。(4)设置好堆栈。)设置好堆栈。堆堆栈栈指指针针的的设设置置是
18、是为为了了执执行行 C 语语言言代代码码作作好好准准备备。此此外外,在在设设置置堆堆栈栈指指针针 sp 之之前前,也也可可以以关关闭闭 LED 灯灯,以以提提示示用用户户准准备备跳跳转转到到 stage2。经经过过上上述述这这些些执执行行步步骤骤后后,系系统统的的物物理理内内存存布布局局应应该该如如下下图图3-2所示。所示。图3-2Bootloader的stage2可执行映象刚被拷贝到RAM空间时的系统内存布局(5)跳转到)跳转到 stage2 的的 C 入口点。入口点。在在上上述述一一切切都都就就绪绪后后,就就可可以以跳跳转转到到 Bootloader 的的 stage2 去去执执行行了了。
19、比比如如,在在 ARM 系系统统中中,可可以以通通过过修修改改 PC 寄寄存存器器为为合合适的地址来实现。适的地址来实现。stage2 通常包括以下步骤(按执行的先后顺序):通常包括以下步骤(按执行的先后顺序):(1)初始化本阶段要使用到的硬件设备。)初始化本阶段要使用到的硬件设备。通通常常包包括括:初初始始化化至至少少一一个个串串口口,以以便便和和终终端端用用户户进进行行 I/O 输输出出信信息息;初初始始化化计计时时器器等等。在在初初始始化化这这些些设设备备之之前前,也也可可以以重重新新把把 LED 灯灯点点亮亮,以以表表明明已已经经进进入入 main()函函数数执执行行。设设备备初初始始
20、化化完完成成后后,可可以以输输出出一一些些打打印印信信息息,程程序序名名字字字字符符串串、版本号等。版本号等。(2)检测系统内存映射()检测系统内存映射(memory map)。)。所所谓谓内内存存映映射射就就是是指指在在整整个个 4GB 物物理理地地址址空空间间中中有有哪哪些些地地址址范范围围被被分分配配用用来来寻寻址系统的址系统的 RAM 单元。单元。(3)将)将kernel 映像和根文件系统映像从映像和根文件系统映像从 Flash 上读上读到到 RAM 空间中。空间中。首先规划内存占用的布局,这里包括两个方面:首先规划内存占用的布局,这里包括两个方面:内核映像所占用的内存范围;根文件系统
21、所占用的内核映像所占用的内存范围;根文件系统所占用的内存范围。在规划内存占用的布局时,主要考虑基内存范围。在规划内存占用的布局时,主要考虑基地址和映像的大小两个方面。地址和映像的大小两个方面。对于内核映像,一般将其拷贝到从基地址开始对于内核映像,一般将其拷贝到从基地址开始的大约的大约1MB大小的内存范围内。大小的内存范围内。(4)为内核设置启动参数。)为内核设置启动参数。在将内核映像和根文件系统映像拷贝到在将内核映像和根文件系统映像拷贝到RAM空间中后,就可以准备启动空间中后,就可以准备启动Linux内核了。但是内核了。但是在调用内核之前,应该作一步准备工作,即设置在调用内核之前,应该作一步准
22、备工作,即设置Linux内核的启动参数。内核的启动参数。(5)调用内核。)调用内核。Bootloader 调调用用 Linux 内内核核的的方方法法是是直直接接跳跳转转到到内内核核的的第第一一条条指指令令处处,也也即即直直接接跳跳转转到到 MEM_START0 x8000 地地址址处处。在在跳跳转转时时,下下列列条件要满足:条件要满足:lCPU 寄寄存存器器的的设设置置:R00;R1机机器器类类型型 ID;关关于于 Machine Type Number,可可以以参参见见 linux/arch/arm/tools/mach-types;R2启启动动参参数标记列表在数标记列表在 RAM 中起始基
23、地址。中起始基地址。lCPU 模模式式:必必须须禁禁止止中中断断(IRQs和和FIQs);CPU 必须必须 SVC 模式。模式。lCache 和和 MMU 的的设设置置:MMU 必必须须关关闭闭;指指令令 Cache 可可以以打打开开也也可可以以关关闭闭;数数据据 Cache 必必须关闭。须关闭。Bootloader的系统启动方案流程如图3-3所示。图3-3Bootloader系统启动方案流图3.2.3 U-Boot 3.2.3 U-Boot 分析与移植分析与移植 U-Boot(Universal Bootloader),即即通通用用Bootloader,是是遵遵循循GPL条条款款的的开开放放
24、源源码码项项目目。从从FADSROM、8xxROM、PPCBOOT逐逐步步发发展展演演化化而而来来。其其前前身身是是由由德德国国DENX软软件件工工程程中中心心的的Wolfgang Denk基基 于于 8xxROM的的 源源 码码 创创 建建 的的PPCBOOT工程。工程。U-Boot不不仅仅仅仅支支持持嵌嵌入入式式Linux系系统统的的引引导导,当当前前,它它还还支支持持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌嵌入入式式操操作作系系统统。其其目目前前要要支支持持的的目目标标操操作作系系统统是是OpenBSD,NetBSD,FreeBSD,4.4BSD,Li
25、nux,SVR4,Esix,Solaris,Irix,SCO,Dell,NCR,VxWorks,LynxOS,pSOS,QNX,RTEMS,ARTOS。U-Boot有如下特性:有如下特性:l开放源码开放源码,支持多种嵌入式操作系统内核,支持多种嵌入式操作系统内核,如如Linux、NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS;l支持多个处理器系列,如支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale;l较高的可靠性和稳定性较高的可靠性和稳定性;l高度灵活的功能设置,适合高度灵活的功能设置,适合U-Boot调试、操作调试、操作系统不同引导要求
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 嵌入式 Linux 编程 入门 开发 实例 PPT 课件
限制150内