Download presentation
Presentation is loading. Please wait.
Published byΝαχώρ Αυγερινός Modified 6年之前
1
嵌入式操作系统 陈香兰 xlanchen@ustc.edu.cn http://staff.ustc.edu.cn/~xlanchen
Spring 2006 中国科学技术大学计算机系
2
Embedded Operating Systems
上周三 嵌入式系统基本概念 嵌入式硬件的发展 嵌入式软件及其开发 嵌入式操作系统及系统开发 典型嵌入式操作系统介绍 嵌入式操作系统选型 Embedded Operating Systems
3
Embedded Operating Systems
上周四 GNU Tools简介 GCC Binutils Gdb make Embedded Operating Systems
4
Embedded Operating Systems
本课的主要内容: 第一部分:开发工具介绍(续) 第二部分:SkyEye介绍 Embedded Operating Systems
5
开发工具介绍(续)
6
Embedded Operating Systems
主要内容 GNU Tools介绍(续) ld 交叉编译环境的安装 Embedded Operating Systems
7
Embedded Operating Systems
GNU Tools—ld ld,The GNU Linker Linux上常用的链接器 ld软件的作用是把各种目标文件(.o文件)和库文件链接在一起,并定位数据和函数地址,最终生成可执行程序 gcc可以间接的调用ld,使用gcc的-Wl参数可以传递参数给ld 使用命令:ld --help可以列出ld常用的一些选项 Embedded Operating Systems
8
Embedded Operating Systems
ld使用举例(1) 源程序 编译hello.c到hello.o 命令:gcc -c hello.c Embedded Operating Systems
9
Embedded Operating Systems
ld使用举例(2) 链接(演示) 命令:ld –dynamic-linker /lib/ld-linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o hello.o –lc –o hello 运行 ./hello Embedded Operating Systems
10
Embedded Operating Systems
目标文件 ld通过BFD库可以读取和操作coff、elf、a.out等各种执行文件格式的目标文件 BFD(Binary File Descriptor) 目标文件(object file) 由多个节(section)组成,常见的节有: text节保存了可执行代码, data节保存了有初值的全局标量, bss节保存了无初值的全局变量。 Embedded Operating Systems
11
Embedded Operating Systems
使用objdump查看目标文件的信息(演示) objdump –h hello.o 比较hello Embedded Operating Systems
12
链接描述文件( Linker script )
可以使用链接描述文件控制ld的链接过程。 链接描述文件,command file 又称为链接脚本,Linker script 用来控制ld的链接过程 描述各输入文件的各节如何映射到输出文件的各节 控制输出文件中各个节或者符号的内存布局 使用的语言为: The ld command language,链接命令语言 Embedded Operating Systems
13
Embedded Operating Systems
ld命令的-T commandfile选项指定了链接描述文件名 如果不指定链接描述文件,ld就会使用一个默认的描述文件来产生执行文件 找到实际项目中的链接描述文件(演示) Embedded Operating Systems
14
Embedded Operating Systems
链接描述文件的命令 链接描述文件的命令主要包括如下几类: 设置入口点命令 处理文件的命令 处理文件格式的命令 其他 Embedded Operating Systems
15
Embedded Operating Systems
常用的命令 设置入口点 格式:ENTRY(symbol) 设置symbol的值为执行程序的入口点。 ld有多种方法设置执行程序的入口点,确定程序入口点的顺序如下: ld命令的-e选项指定的值 Entry(symbol)指定的值 .text节的起始地址 入口点为0 Embedded Operating Systems
16
Embedded Operating Systems
常用的命令 INCULDE filename 包含其他filename的链接描述文件 INPUT(file,file,…) 指定多个输入文件名 Embedded Operating Systems
17
Embedded Operating Systems
常用的命令 OUTPUT_FORMAT(bfdname) 指定输出文件的格式 OUTPUT_ARCH ( bfdname ) 指定目标机器体系结构,例如: OUTPUT_ARCH(arm) Embedded Operating Systems
18
Embedded Operating Systems
常用的命令 MEMORY: 这个命令在用于嵌入式系统的链接描述文件中经常出现,它描述了各个内存块的起始地址和大小。格式如下: MEMORY { name [(attr)]:ORIGIN = origin,LENGTH = len … } 例如: Embedded Operating Systems
19
Embedded Operating Systems
Memory举例 Embedded Operating Systems
20
Embedded Operating Systems
SECTIONS命令 SECTIONS 告诉ld如何把输入文件的各个节映射到输出文件的各个节中。 在一个链接描述文件中只能有一个SECTIONS命令 在SECTIONS命令中可以使用的命令有三种: 定义入口点 赋值 定义输出节 Embedded Operating Systems
21
Embedded Operating Systems
定义输出节 SECTIONS { secname : { contents } } 例如: Embedded Operating Systems
22
Embedded Operating Systems
定位计数器 定位计数器,The Location Counter 一个特殊的ld变量,使用“.”表示 总是在SECTIONS中使用 例如: Embedded Operating Systems
23
Embedded Operating Systems
一个简单例子 下面是一个简单的例子: 例中,输出文件包含text,data,bss三个节,而输入文件也只包含这3个节: SECTIONS { .=0x ; .text:{*(.text)}; .=0x ; .data:{*(.data)}; .bss:{*(.bss)}; } Embedded Operating Systems
24
SECTIONS举例(对应于上面的MEMORY例子)
Embedded Operating Systems
25
Embedded Operating Systems
实际项目中的链接描述文件 Embedded Operating Systems
26
Embedded Operating Systems
GNU tools 交叉开发环境的安装 交叉开发环境 源代码配置安装,or 直接安装二进制工具 第一种方法比较复杂,如果有现成的二进制交叉环境,建议直接使用 Embedded Operating Systems
27
Embedded Operating Systems
使用源代码安装交叉开发环境 GNU tools的各个软件包相对独立, 在选择时要注意各个软件包的版本号及其依赖关系 如果全部是最新版本,也并不能保证可以配置并安装成功 在安装GNU tools交叉开发环境之前,首先必须建立本地GNU tools环境 Embedded Operating Systems
28
一个可行的GNU tools与 Linux内核之间关系表
Embedded Operating Systems
29
Embedded Operating Systems
交叉开发环境的安装顺序 需要5个步骤完成整个GNU Tools的配置/编译/安装: 内核头文件配置 binutils软件包安装 Bootstrap GNU编译器(可完成基本C语言编译工作的编译器) C library的安装,一般是glibc 完整的GNU编译器安装 Embedded Operating Systems
30
Embedded Operating Systems
软件包安装步骤 对每个单独的软件包,一般安装过程包括下面4步 下载并解压软件包 配置软件包 编译软件包 安装软件包 Embedded Operating Systems
31
Embedded Operating Systems
安装现成的二进制交叉环境 下载arm-elf-tools的最新版本或合适的版本 如:arm-elf-tools sh 安装 在root权限下运行 sh ./arm-elf-tools sh 这个命令会在开发主机上自动建立一个uClinux-ARM的交叉编译环境 Embedded Operating Systems
32
Embedded Operating Systems
安装成功? 检查一下(演示) 对 arm-elf运用shell的tab功能可以看到一系列arm-elf打头的程序,如 binutils系列、gcc、gdb等等 运行arm-elf-gcc –v Embedded Operating Systems
33
Embedded Operating Systems
Embedded Operating Systems
34
Embedded Operating Systems
第一部分结束 GNU Tools之一:ld 安装交叉编译环境 Embedded Operating Systems
Similar presentations