第2章 搭建Linux交叉编译开发环境
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.3.1 配置samba Samba服务使Linux和Windows之间实现文件共享,
方便对文件的编辑。 1) 修改samba配置文件/etc/samba/smb.conf 2) 为 Samba 创建一个单独的口令文件。要根据 你的现存 /etc/passwd 文件来创建 3) 改变Samba口令文件的权限许可,因此只有 根用户才有读写权限
注意: 然后还要修改libc.so文件,将GROUP ( /lib/libc.so.6 /lib/libc_nonshared.a) 改为:GROUP ( libc.so.6 libc_nonshared.a) 这样连接程序ld就会在 libc.so 所在的目录查找它 需要的库,因为主机/lib目录可能已经装了一个相 同名字的库,一个为编译可以在宿主机上运行的 程序的库,而不是用于交叉编译的。
g++——gnu的 c++ 编译器。 protoize——与unprotoize相反,将K&R C的源
码转化为ANSI C的形式,函数原型中加入参数 类型。
c++——gnu的c++编译器。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.3 配置主机服务
4) 要设置每个 Samba 用户的口令,使用以下命 令(把username 替换为每个用户的用户名) 5) 加密口令必须在Samba配置文件中被启用 6) 在shell提示下键入 service smb restart来确定 smb服务被启动 7)为避免每次启动主机都要手工启动samba服务, 使用命令使得samba服务在每次系统启动时都默 认执行
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
Debian 3.0 (Woody) and testing (Sarge) Ubuntu 4.10 FreeBSD 5.0 Suse Linux 7.2, 7.3 Mandrake 8.2 Slackware 8.1beta2 Gentoo Linux 1.4_rc2 ELDK同时支持ARM、PPC、MIPS等多种处理器。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
2.2.1 编译工具链
以下是一个基于RedHat linux的交叉编译环境的建立过程。 整个编译过程包括: 1. 下载源文件、补丁和建立编译的目录; 2. 建立内核头文件; 3. 建立二进制工具(binutils); 4. 建立初始编译器(bootstrap gcc); 5. 建立c库(glibc); 6. 建立全套编译器(full gcc)。
binutils (6) 注意: add2line——将要找的地址转成文件和行号,
它要使用 debug 信息。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
ar——产生、修改和解开一个存档文件。 as——gnu 的汇编器。 c++filt——C++ 和 java 中有一种重载函数,所用
2.2 建立交叉编译开发工具链
ranlib——为一个存档文件产生一个索引,并将这 个索引存入存档文件中。
readelf——显示elf格式的目标文件的信息。 size——显示目标文件各个节的大小和目标文件
的大小。 strings——打印出目标文件中可以打印的字符串,
有个默认的长度,为4。 strip——剥掉目标文件的所有的符号信息。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
(1) 下载源文件、补丁和建立编译的目录 (2) a, 下载:linux-2.4.21+rmk2;binutils-2.10.1;
gcc-2.95.3;glibc-2.2.3;glibc-linuxthreads2.2.3 (3) b, 建目录:/home/xxx/embedded 下建立三个 子目录 build-tools、kernel 和 tools (4) c, 需要输出环境变量
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
注意:
gcc——gnu 的 C 语言编译器。
unprotoize——将 ANSI C 的源码转化为 K&R C 的形式,去掉函数原型中的参数类 型。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
(4) 建立初始编译器(bootstrap gcc) a,进入 build-tools 目录,将 gcc 源代码解 压 b,然后进入gcc-2.95.3目录给gcc打上补丁 c,配置boostrap gcc, 后面要用bootstrap gcc 来编译 glibc 库 d,编译并安装boot-gcc
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
d, 建立编译目录: build-binutils——编译binutils的目录 build-boot-gcc——编译gcc 启动部分
录
build-glibc——编译glibc的目录 build-gcc——编译gcc 全部的目录 gcc-patch——放gcc的补丁的目录
第二章 搭建 Linux交叉编译开发环境
Cross compiling environment
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
2.1 什么是交叉编译
什么是交叉编译呢?简单地说,就是在一个 平台上生成另一个平台上的可执行代码。这里需 要注意的是所谓平台,实际上包含两个概念:体 系结构(Architecture)和操作系统(Operating System)。同一个体系结构可以运行不同的操作 系统;同一个操作系统也可以在不同的体系结构 上运行。
ld——gnu 的连接器。 nm——列出目标文件的符号和对应的地址。 objcopy——将某种格式的目标文件转化成另外格
式的目标文件。 objdump——显示目标文件的信息。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
双实科技Leabharlann Baidu
2.2 建立交叉编译开发工具链
2.2.3 验证工具链 注意: 通过上述两种方式建立的工具链,还需要经过验 证方可使用,我们主要通过实际编译一个例子程 序来验证。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.3 配置主机服务
在嵌入式软件开发过程中,有些主机服务是必要 的,同时也会为我们的开发工作带来便利。
这里主要介绍四种主机服务:samba、DHCP、 TFTP和NFS。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.3 配置主机服务
linuxthreads-2.2.3.tar.gz源代码 (7) b,进入build-glibc目录配置glibc (8) c,编译和安装 glibc
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
为目标处理器编译好的工具和元件。
其中,第一部分包括执行在开发主机上的交叉编 译工具,有GNU交叉编译器GCC、Binutils和 GDB等。
第二部分是一些已经编译好的、可以在目标开发 板上运行的工具和库。这些工具和库可以用来建 立一个Linux的Roofs文件系统。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
(3) 建立二进制工具(binutils) (4) a,解压binutils源文件 (5) b,然后进入build-binutils目录配置和编译
的重载函数最后会被编译转化成汇编的标号, c++filt 就是实现这种反向的转化,根据标号得到 函数名。 gasp——gnu 汇编器预编译器。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
的目
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
(2) 建立内核头文件 (3) a, 把内核源代码放入$PRJROOT /kernel 目录 (4) b,给 Linux 内核打上补丁 (5) c,编译内核生成头文件 (6) d, 建立正确的链接
cpp——gnu的 C 的预编译器。
gcov——gcc 的辅助测试工具,可以用它来 分析和优化程序。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
(5) 建立c库(glibc) (6) a, 解压 glibc-2.2.3.tar.gz 和glibc-
双实科技
2.2 建立交叉编译开发工具链
2.2.2 下载工具链 这里主要介绍一下Denx公司发布的一整套开放源码
的 嵌 入 式 Linux 开 发 工 具 链 ——ELDK (Embedded Linux Development Kit) ELDK可以安装和运行在以下主机环境中: Fedora Core 1, 2 , 3 Red Hat Linux 7.3, 8.0, 9 SuSE Linux 8.x, 9.0, 9.1, 9.2
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
ELDK包括了一个安装工具和许多RPM包,他们 可以安装到用户的交叉编译的主机的硬盘中。 ELDK的RPM包可以分为2种:
嵌入式Linux开发工具;
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.3 配置主机服务
2.3.2 配置DHCP DHCP是动态主机配置协议。这个协议用于向计
算机自动提供IP地址,子网掩码和路由信息。在 开发的过程中,目标系统并没有自己的静态IP地 址,它是在启动时向DHCP服务器申请,因此需 要在主机上配置DHCP服务,以便在目标系统请 求IP时,动态为它分配IP地址。 DHCP服务的配置文件为/etc/dhcpd.conf,通过修 改该文件进行配置。etc/dhcpd.conf通常包括三部 分:parameters、declarations 、option。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
(6) 建立全套编译器(full gcc) (7) 在建立boot-gcc 的时候,我们只支持了C。到
这里,我们就要建立全套编译器,来支持C和 C++ (8) 注意:
方便对文件的编辑。 1) 修改samba配置文件/etc/samba/smb.conf 2) 为 Samba 创建一个单独的口令文件。要根据 你的现存 /etc/passwd 文件来创建 3) 改变Samba口令文件的权限许可,因此只有 根用户才有读写权限
注意: 然后还要修改libc.so文件,将GROUP ( /lib/libc.so.6 /lib/libc_nonshared.a) 改为:GROUP ( libc.so.6 libc_nonshared.a) 这样连接程序ld就会在 libc.so 所在的目录查找它 需要的库,因为主机/lib目录可能已经装了一个相 同名字的库,一个为编译可以在宿主机上运行的 程序的库,而不是用于交叉编译的。
g++——gnu的 c++ 编译器。 protoize——与unprotoize相反,将K&R C的源
码转化为ANSI C的形式,函数原型中加入参数 类型。
c++——gnu的c++编译器。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.3 配置主机服务
4) 要设置每个 Samba 用户的口令,使用以下命 令(把username 替换为每个用户的用户名) 5) 加密口令必须在Samba配置文件中被启用 6) 在shell提示下键入 service smb restart来确定 smb服务被启动 7)为避免每次启动主机都要手工启动samba服务, 使用命令使得samba服务在每次系统启动时都默 认执行
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
Debian 3.0 (Woody) and testing (Sarge) Ubuntu 4.10 FreeBSD 5.0 Suse Linux 7.2, 7.3 Mandrake 8.2 Slackware 8.1beta2 Gentoo Linux 1.4_rc2 ELDK同时支持ARM、PPC、MIPS等多种处理器。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
2.2.1 编译工具链
以下是一个基于RedHat linux的交叉编译环境的建立过程。 整个编译过程包括: 1. 下载源文件、补丁和建立编译的目录; 2. 建立内核头文件; 3. 建立二进制工具(binutils); 4. 建立初始编译器(bootstrap gcc); 5. 建立c库(glibc); 6. 建立全套编译器(full gcc)。
binutils (6) 注意: add2line——将要找的地址转成文件和行号,
它要使用 debug 信息。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
ar——产生、修改和解开一个存档文件。 as——gnu 的汇编器。 c++filt——C++ 和 java 中有一种重载函数,所用
2.2 建立交叉编译开发工具链
ranlib——为一个存档文件产生一个索引,并将这 个索引存入存档文件中。
readelf——显示elf格式的目标文件的信息。 size——显示目标文件各个节的大小和目标文件
的大小。 strings——打印出目标文件中可以打印的字符串,
有个默认的长度,为4。 strip——剥掉目标文件的所有的符号信息。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
(1) 下载源文件、补丁和建立编译的目录 (2) a, 下载:linux-2.4.21+rmk2;binutils-2.10.1;
gcc-2.95.3;glibc-2.2.3;glibc-linuxthreads2.2.3 (3) b, 建目录:/home/xxx/embedded 下建立三个 子目录 build-tools、kernel 和 tools (4) c, 需要输出环境变量
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
注意:
gcc——gnu 的 C 语言编译器。
unprotoize——将 ANSI C 的源码转化为 K&R C 的形式,去掉函数原型中的参数类 型。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
(4) 建立初始编译器(bootstrap gcc) a,进入 build-tools 目录,将 gcc 源代码解 压 b,然后进入gcc-2.95.3目录给gcc打上补丁 c,配置boostrap gcc, 后面要用bootstrap gcc 来编译 glibc 库 d,编译并安装boot-gcc
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
d, 建立编译目录: build-binutils——编译binutils的目录 build-boot-gcc——编译gcc 启动部分
录
build-glibc——编译glibc的目录 build-gcc——编译gcc 全部的目录 gcc-patch——放gcc的补丁的目录
第二章 搭建 Linux交叉编译开发环境
Cross compiling environment
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
2.1 什么是交叉编译
什么是交叉编译呢?简单地说,就是在一个 平台上生成另一个平台上的可执行代码。这里需 要注意的是所谓平台,实际上包含两个概念:体 系结构(Architecture)和操作系统(Operating System)。同一个体系结构可以运行不同的操作 系统;同一个操作系统也可以在不同的体系结构 上运行。
ld——gnu 的连接器。 nm——列出目标文件的符号和对应的地址。 objcopy——将某种格式的目标文件转化成另外格
式的目标文件。 objdump——显示目标文件的信息。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
双实科技Leabharlann Baidu
2.2 建立交叉编译开发工具链
2.2.3 验证工具链 注意: 通过上述两种方式建立的工具链,还需要经过验 证方可使用,我们主要通过实际编译一个例子程 序来验证。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.3 配置主机服务
在嵌入式软件开发过程中,有些主机服务是必要 的,同时也会为我们的开发工作带来便利。
这里主要介绍四种主机服务:samba、DHCP、 TFTP和NFS。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.3 配置主机服务
linuxthreads-2.2.3.tar.gz源代码 (7) b,进入build-glibc目录配置glibc (8) c,编译和安装 glibc
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
为目标处理器编译好的工具和元件。
其中,第一部分包括执行在开发主机上的交叉编 译工具,有GNU交叉编译器GCC、Binutils和 GDB等。
第二部分是一些已经编译好的、可以在目标开发 板上运行的工具和库。这些工具和库可以用来建 立一个Linux的Roofs文件系统。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
(3) 建立二进制工具(binutils) (4) a,解压binutils源文件 (5) b,然后进入build-binutils目录配置和编译
的重载函数最后会被编译转化成汇编的标号, c++filt 就是实现这种反向的转化,根据标号得到 函数名。 gasp——gnu 汇编器预编译器。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
的目
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
(2) 建立内核头文件 (3) a, 把内核源代码放入$PRJROOT /kernel 目录 (4) b,给 Linux 内核打上补丁 (5) c,编译内核生成头文件 (6) d, 建立正确的链接
cpp——gnu的 C 的预编译器。
gcov——gcc 的辅助测试工具,可以用它来 分析和优化程序。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
(5) 建立c库(glibc) (6) a, 解压 glibc-2.2.3.tar.gz 和glibc-
双实科技
2.2 建立交叉编译开发工具链
2.2.2 下载工具链 这里主要介绍一下Denx公司发布的一整套开放源码
的 嵌 入 式 Linux 开 发 工 具 链 ——ELDK (Embedded Linux Development Kit) ELDK可以安装和运行在以下主机环境中: Fedora Core 1, 2 , 3 Red Hat Linux 7.3, 8.0, 9 SuSE Linux 8.x, 9.0, 9.1, 9.2
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
ELDK包括了一个安装工具和许多RPM包,他们 可以安装到用户的交叉编译的主机的硬盘中。 ELDK的RPM包可以分为2种:
嵌入式Linux开发工具;
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.3 配置主机服务
2.3.2 配置DHCP DHCP是动态主机配置协议。这个协议用于向计
算机自动提供IP地址,子网掩码和路由信息。在 开发的过程中,目标系统并没有自己的静态IP地 址,它是在启动时向DHCP服务器申请,因此需 要在主机上配置DHCP服务,以便在目标系统请 求IP时,动态为它分配IP地址。 DHCP服务的配置文件为/etc/dhcpd.conf,通过修 改该文件进行配置。etc/dhcpd.conf通常包括三部 分:parameters、declarations 、option。
2C0o2p0y/8ri/g4ht © 2003-2007 SinoSys. All Rights Reserved
双实科技
2.2 建立交叉编译开发工具链
(6) 建立全套编译器(full gcc) (7) 在建立boot-gcc 的时候,我们只支持了C。到
这里,我们就要建立全套编译器,来支持C和 C++ (8) 注意: