当前位置:文档之家› 嵌入式Linux开发环境及其在ARM上的移植

嵌入式Linux开发环境及其在ARM上的移植


6.1.2 交叉编译环境的建立
• 匹配Binutils、gcc和glibc的版本
工具链版本 binutils Linux 2.4.x 2.14 Linux 2.6.x 2.14
gcc
glibc glibc-threads gdb
2.95.3
2.2.5 2.2.5 5.3
3.3.2
2.2.5 2.2.5 6.0
Binutils工具包
Binutils工具集里主要包含以下一系列的程 序:addr2line、ar、as、c++filt、gprof、 ld、nm、objcopy、objdump、ranlib、 readelf、size、strings和strip, 它包含的库文件有:libiberty.a、libbfd.a、 libbfd.so、libopcodes.a和libopcodes.so。
ARMV4T平台工具链常用版本
6.1.2 交叉编译环境的建立
• 构建交叉编译环境通常有3种方法: 方法1:分步编译和安装交叉编译环境所需 要的库和源代码,最终生成交叉编译环 境。 方法2:通过Crosstool脚本工具来实现一次 编译生成交叉编译环境。 方法3:使用开发平台供应商提供的开发环 境安装套件建立交叉编译环境,这是最 常用的方法。
GNUmakefile Makefile Makefile
Make命令与Makefile文件
• (1)Makefile基本结构 Makefile中一般包含如下内容: 需要由make工具创建的项目,通常是 目标文件和可执行文件; 要创建的项目所依赖的文件; 创建每个项目时需要运行的命令。
6.1.1 交叉编译工具介绍
• 1.Binutils工具包 GNU Binutils是一套用来构造和使用二进 制所需的工具集。建立嵌入式交叉编译 环境,Binutils工具包是必不可少的,而 且Binutils与GNU的C编译器gcc是紧密集 成的,没有Binutils,gcc也不能正常工作。 GNU Binutils是一组开发工具,包括连接 器、汇编器和其他用于目标文件和档案 的工具。
gcc编译器
• (1)gcc的基本用法 在使用gcc编译器的时候,通常后面跟一些 选项和文件名。 gcc命令的基本用法如下: gcc [options] [filenames]
Gcc选项
选 项 说 明
-ansi
-c -D FOO=BAR -g -ggdb -pg -l FOO -L DIRNAME -O
fs init arm
6.2.1 Linux内核源代码的基本组织情况
• 嵌入式Linux内核按照功能可分为进程管理、 内存管理、文件系统、设备控制和网络。 • 进程管理 • 内存管理 • 文件系统 • 设备控制 • 网络
嵌入式Linux内核功能结构图
系统调用接口
进程管理 并发 多任务 架构相关 代码
内存管理 虚拟内存 内存 管理器
Make命令与Makefile文件
• (4)隐含规则 隐含规则是指由make自定义的规则,这些 规则定义了如何从不同的依赖文件建立 特定类型的目标。 GNU make支持以下2种类型的隐含规则: ① 后缀规则(Suffix Rule) ② 模式规则(Pattern Rules)
Make命令与Makefile文件
2. 制作交叉调试器
• (1)编译交叉调试器 对于交叉调试器,并不是工具链必需的工 具,但是它是与工具链配套使用的。 GDB的调试能力和BUG的修正也因为版 本的不同而不同。 • (2)编译gdbserver 目标板还需要gdbserver工具为目标板交叉 编译gdbserver。
主要内容
• 6.1 嵌入式Linux开发环境
Make命令与Makefile文件
• (3)GNU make的主要预定义变量 GNU make有许多预定义变量,这些变量 具有特殊的含义,可在规则中使用。 在一般情况下,make所预定义的内部规则 可以满足大多数应用要求,如果程序员 认为哪个内部规则还不能满足他的特殊 要求,那么可以通过修改或自定义新的 内部规则使用的变量或者相关的命令来 改变,称为隐含规则。
各种连接方式
HOST 下载内核映像 内核映像 根文件系统 挂接NFS文件系统 内核映像 根文件系统 TARGET
交叉开发模型
6.1 嵌入式Linux开发环境
• TARGET就是目标板,HOST是开发主机 (宿主机)。在开发主机上,可以安装开 发工具,编辑、编译目标板的Linux引导程 序、内核和文件系统,然后在目标板上运 行。通常这种在主机环境下开发,在目标 板上运行的开发模式叫作交叉开发。
Make命令与Makefile文件
• (2)Makefile变量
GNU的make工具除了提供建立目标的基本功能 之外,还有许多便于表达依赖性关系以及建立 目标命令的特色,其中之一就是变量或宏的定 义能力。 如果用户要以相同的编译选项同时编译多个C源 文件,且为每个目标的编译指定冗长的编译选 项的话,利用简单的变量定义,可简化 makefile文件,避免这种乏味的工作。
嵌入式系统设计
第六章 嵌入式Linux开发环境 及其在ARM上的移植
主要内容
• 6.1 嵌入式Linux开发环境
• 6.1.1 交叉编译工具介绍 • 6.1.2 交叉编译环境的建立
• 6.2 嵌入式Linux在ARM平台上的移植
• 6.2.1 Linux内核源代码的基本组织情况 • 6.2.2 嵌入式Linux内核裁剪方法 • 6.2.3 嵌入式Linux内核定制过程 • 6.2.4 内核编译及装载 • 6.2.5 文件系统及其实现
Binutils工具包
• (1)GNU汇编器as as工具主要用来将汇编语言编写的源程序 转换成二进制形式的目标代码。 • (2)GNU链接器ld ld可以将多个目标文件链接成为可执行程 序,同时指定了程序在运行时是如何执 行的。 • (3)GNU库管理器ar ar将多个可重定位的目标模块归档为一个 函数库文件。
• (5)Make选项
选 项 -C DIR -f FILE -h -i -I DIR 说 明 在读取makefile之前改变到指定的目录DIR 以指定的FILE文件作为makefile 显示所有的make选项(-help) 忽略所有的命令执行错误 当包含其他makefile文件时,可利用该选项指定搜索目录
主要内容
• 6.1 嵌入式Linux开发环境
• 6.1.1 交叉编译工具介绍 • 6.1.2 交叉编译环境的建立
• 6.2 嵌入式Linux在ARM平台上的移植
• 6.2.1 Linux内核源代码的基本组织情况 • 6.2.2 嵌入式Linux内核裁剪方法 • 6.2.3 嵌入式Linux内核定制过程 • 6.2.4 内核编译及装载 • 6.2.5 文件系统及其实现
• 6.1.1 交叉编译工具介绍 • 6.1.2 交叉编译环境的建立
• 6.2 嵌入式Linux在ARM平台上的移植
• 6.2.1 Linux内核源代码的基本组织情况 • 6.2.2 嵌入式Linux内核裁剪方法 • 6.2.3 嵌入式Linux内核定制过程 • 6.2.4 内核编译及装载 • 6.2.5 文件系统及其实现
支持ANSI/ISO C的标准语法,取消GUN的语法扩展中与该标准有 冲突部分(但这一选项并不能保证生成ANSI兼容的代码)
只编译不链接 在命令行定义预处理宏FOO,其值为BAR 在可执行程序中包含标准调试信息 在可执行程序中包含只有GUN debugger才能识别的大量调试信息 编译完成之后,额外产生一个性能分析所需的信息 链接名为libFOO的函数库 将DIRNAME加入到库文件的搜索目录列表中。在缺省情况下gcc 只链接共享库 优化编译过的代码
1. 分步建立交叉编译环境
1. 分步建立交叉编译环境
• 建立交叉编译环境可以分为5个步骤: 做好准备工作:下载工具源码包和补丁, 准备内核头文件,创建工作目录等; 编译、安装Binutils; 编译辅助编译器(bootstrap gcc); 建立glibc库,这里要使用交叉编译工具 链,例如arm-linux-gcc等; 编译生成完整的编译器(full gcc),重 新配置gcc功能,使其支持C、C++等语 言。
-I DIRNAME 将DIRNAME加入到头文件的搜索目录列表中
gcc编译器
• (3)函数库和包含文件 如果需要链接不在标准目录下的函数库或 包含(include)文件,可使用-L {DIRNAME}和-I {DIRNAME}选项指定 文件所在的目录,以确保该目录的搜索 顺序在标准目录之前。
gcc编译器
文件系统 文件和目 录VFS 文件系统 类型 块设备
设备控制 tty和 设备访问 字符设备
网络 互连性 网络 子系统
内核子系统 所实现功能
软件支持 drivers
CPU
内存
磁盘和CD
控制台
网络接口
硬件
Linux内核源代码树的组织
• Linux内核源代码包括多个目录。
Linux Kernel
arch i386 ppc
6.1.1 交叉编译工具介绍
• 2.gcc编译器 GUN cc(GUN C Compiler,简称gcc)是 GUN项目的C编译器套件,能够编译用C、 C++、Objective C编写的程序。gcc编译 器是基于命令行的。 gcc的主要目的是为32位GNU系统提供一个 好的编译器,其最终输出的是汇编语言 源程序。想要进一步编译成所需要的机 器代码,需要引入一些新的工具,比如 汇编程序等。
主要内容
• 6.1 嵌入式Linux开发环境
• 6.1.1 交叉编译工具介绍 • 6.1.2 交叉编译环境的建立• 6.Βιβλιοθήκη 嵌入式Linux在ARM平台上的移植
相关主题