当前位置:首页 >> 能源/化工 >>

构建powerpc交叉编译环境(完稿)


构建 powerpc 交叉编译环境(完稿) 详细见:http://blogold.chinaunix.net/u3/103566/showart_2035565.html 嵌入式开发系统一般分为 3 种: 1、连接式:(略) 2、可抽换式:(略) 3、独立式:(略) 我们通常见到的是连接式。 由于一般嵌入式开发系统存储大小有限,通常你都要在你的强大的 pc 机上建立 一个用于目标

机的交叉编译环境。这是一个由编译器、连接器和解释器组成的综 合开发环境。 交叉编译工具主要由以下三个组件组成: 1、binutils 2、gcc 3、glibc:有时出于减小 libc 库大小的考虑,你也可以用别的 c 库来代替 glibc,例如 uClibc、dietlibc 和 newlib。 工具链主要包括 binutils, gcc, glibc 三个组件,由于各个组件的开发和发布彼 此独立,所以并非用各组件的任意版本都能顺利完成建立工作。建立一个交叉编 译工具链是一个相当复杂的过程,如果你不想自己经历复杂的编译过程,网上有 一些编译好的可用的交叉编译工具链可以下载。crosstool 工具推荐如下组合: 其中 14 经过我实际验证。
1、 gcc-3.4.5 cgcc-3.4.5 glibc-2.2.5 binutils-2.15 linux-2.6.8 2、 gcc-3.4.5 cgcc-3.3.6 glibc-2.3.2 binutils-2.15 linux-2.6.8 hdrs-2.6.12.0 3、 gcc-3.4.5 cgcc-3.4.5 glibc-2.3.5 binutils-2.15 linux-2.6.8 hdrs-2.6.12.0 4、 gcc-3.4.5 cgcc-3.4.5 glibc-2.3.6 binutils-2.15 linux-2.6.8 hdrs-2.6.12.0 5、 gcc-4.0.2 cgcc-3.3.6 glibc-2.3.2 binutils-2.16.1 linux-2.6.15.4 hdrs-2.6.12.0 6、 gcc-4.0.2 cgcc-4.0.2 glibc-2.3.5 binutils-2.16.1 linux-2.6.15.4 hdrs-2.6.12.0 7、 gcc-4.0.2 cgcc-4.0.2 glibc-2.3.6 binutils-2.16.1 linux-2.6.15.4 hdrs-2.6.12.0 8、 gcc-4.1.0 cgcc-3.3.6 glibc-2.3.2 binutils-2.16.1 linux-2.6.15.4 hdrs-2.6.12.0 9、 gcc-4.1.0 cgcc-3.3.6 glibc-2.3.5 binutils-2.16.1 linux-2.6.15.4 hdrs-2.6.12.0 10、gcc-4.1.0 cgcc-3.3.6 glibc-2.3.6 binutils-2.16.1 linux-2.6.15.4 hdrs-2.6.12.0 11、gcc-4.1.1 cgcc-3.3.6 glibc-2.3.5 binutils-2.16.1 linux-2.6.15.4 hdrs-2.6.12.0 12、gcc-4.1.1 cgcc-3.3.6 glibc-2.3.5 binutils-2.16.1 linux-2.6.15.4 hdrs-2.6.12.0 tls 13、gcc-4.1.1 cgcc-3.3.6 glibc-2.3.6 binutils-2.16.1 linux-2.6.15.4 hdrs-2.6.12.0 14、gcc-4.1.1 cgcc-3.3.6 glibc-2.3.6 binutils-2.16.1 linux-2.6.15.4 hdrs-2.6.12.0 tls

工具链主要包括 binutils, gcc, glibc 三个组件,由于各个组件的开发和发布彼 此独立,所以并非用各组件的任意版本都能顺利完成建立工作。 下载内核:

http://www.cn.kernel.org/pub/linux/kernel/ 下载 binutils: http://ftp.gnu.org/gnu/binutils/ 下载 gcc: http://ftp.gnu.org/gnu/gcc/ 下载 c 连接库(glibc)和补丁: http://ftp.gnu.org/gnu/glibc/ 开发机: Intel(R) Celeron(R) CPU 2.26GHz fedora core 7 目标板: powerpc\4xx

一、准备工作 cd /home/lsf 这里用的用户名是 lsf mkdir embedded 再在这个项目目录 embedded 下建立三个目录 build-tools、kernel 和 tools。
cd embedded mkdir build-tools kernel tools

build-tools-用来存放你下载的 binutils、gcc 和 glibc 的源代码和用来编译 这些源代码的目录。 kernel-用来存放你的内核源代码和内核补丁。 tools-用来存放编译好的交叉编译工具和库文件。 为了把源码和编译时生成的文件分开,一般的编译工作不在的源码目录中,要另 建一个目录来专门用于编译。用以下的命令来建立编译你下载的 binutils、gcc 和 glibc 的源代码的目录。
cd $PRJROOT/build-tools mkdir build-binutils build-boot-gcc build-gcc build-glibc gcc-patch

build-binutils -编译 binutils 的目录 build-boot-gcc -编译 gcc 启动部分的目录 build-glibc -编译 glibc 的目录 build-gcc -编译 gcc 全部的目录 gcc-patch -放 gcc 的补丁的目录 将 binutils-2.10.1、gcc-2.95.3、glibc-2.2.3 和 glibc-linuxthreads-2.2.3 的源代码放入 build-tools 目录中

export PRJROOT=/home/liushaofeng/embedded export TARGET=powerpc-linux export PREFIX=$PRJROOT/tools export TARGET_PREFIX=$PREFIX/$TARGET export PATH=$PREFIX/bin:$PATH

二、内核头文件设置 内核头文件设置
cd $PRJROOT/kernel tar zxvf linux-2.4.20.tar.gz cd linux-2.4.20 make ARCH=ppc CROSS_COMPILE=powerpc-linux- menuconfig

接下来为你的交叉编译环境建立你的内核头文件的链接
mkdir -p $TARGET_PREFIX/include ln -s $PRJROOT/kernel/linux-2.4.20/include/linux $TARGET_PREFIX/include/linux ln -s $PRJROOT/kernel/linux-2.4.20/include/asm-ppc $TARGET_PREFIX/include/asm ln -s $PRJROOT/kernel/linux-2.4.20/include/asm-generic $TARGET_PREFIX/include/asm-generic

也可以把 Linux 内核头文件拷贝过来用
mkdir -p $TARGET_PREFIX/include cp -r include/linux $TARGET_PREFIX/include cp -r include/asm-ppc $TARGET_PREFIX/include cp -r include/asm-generic $TARGET_PREFIX/include

三、建立二进制工具(binutils) 建立二进制工具( ) binutils 是一些二进制工具的集合,其中包含了我们常用到的 as 和 ld。 首先,我们解压我们下载的 binutils 源文件。

cd $PRJROOT/build-tools tar -xvzf binutils-2.10.tar.gz

然后进入 build-binutils 目录配置和编译 binutils。
cd build-binutils ../binutils-2.10/configure --target=$TARGET --prefix=$PREFIX

--target 选项是指出我们生成的是 ppc-linux 的工具,--prefix 是指出我们 可执行文件安装的位置。 会出现很多 check,最后产生 Makefile 文件。有了 Makefile 后,我们来编 译并安装 binutils,命令很简单。
make make install

四、建立二进制工具(binutils) 建立二进制工具( ) 进入 build-tools 目录,将下载 gcc 源代码解压
cd $PRJROOT/build-tools tar -xvzf gcc-2.95.3.tar.gz

在我们编译并安装 gcc
../gcc-2.95.3/configure --target=$TARGET --prefix=$PREFIX --without-headers --enable-language=c --with-newlib (ppc) make all-gcc make install-gcc

五、建立 c 连接库
cd $PRJROOT/build-tools tar xvzf glibc-2.2.3.tar.gz tar xvzf glibc-linuxthreads-2.2.3.tar.gz --directory=glibc-2.2.3 cd build-glibc CC=powerpc-linux-gcc ../glibc-2.2.3/configure --host=$TARGET --prefix="/usr" --enable-add-ons --with-headers=$TARGET_PREFIX/include make make install_root=$TARGET_PREFIX prefix="" install

安装过程可能出现有两个文档目录不能成功安装, 可以用-i 选项略过错误继续安 装
make -i install_root=$TARGET_PREFIX prefix=" " install

六、编译完整的 gcc 第二次完整编译 gcc 时,需要修改生成的 lib 库中的 libc.so 文件 (/home/liushaofeng/embedded/tools/ppc-linux/lib/libc.so), 将 GROUP ( /lib/libc.so.6 /lib/libc_nonshared.a) 改为 GROUP ( libc.so.6 libc_nonshared.a) vim $TARGET_PREFIX/lib/libc.so 在建立 boot-gcc 的时候, 我们只支持了 C。 到这里, 我们就要建立全套编译器, 来支持 C 和 C++。 --enable-languages=c,c++ 告诉 full gcc 支持 c 和 c++ 语言。然后编 译和安装你的 full gcc

cd $PRJROOT/build-tools/build-gcc ../gcc-2.95.3/configure --target=$TARGET --prefix=$PREFIX --enable-languages=c,c++ make all make install

到此交叉编译工具链建立完成。 验证: powerpc-linux-gcc simple.c -o simple file simple 说明: add2line -将你要找的地址转成文件和行号,它要使用 debug 信息。 ar -产生、修改和解开一个存档文件 as -gnu 的汇编器 c++filt -c++和 java 中有一种重载函数, 所用的重载函数最后会被编译转化成 汇编的标号,c++filt 就是实现这种反向的转化,根据标号得到函数名。 c++ -gnu 的 c++ 编译器。 cpp -gnu 的 c 的预编译器 gasp -gnu 汇编器预编译器。 gcc -gnu 的 c 语言编译器 gcov -gcc 的辅助测试工具,可以用它来分析和优程序。 g++ -gnu 的 c++ 编译器。 ld -gnu 的连接器 nm -列出目标文件的符号和对应的地址 objcopy -将某种格式的目标文件转化成另外格式的目标文件 objdump -显示目标文件的信息 ranlib -为一个存档文件产生一个索引,并将这个索引存入存档文件中 readelf -显示 elf 格式的目标文件的信息 size -显示目标文件各个节的大小和目标文件的大小 strings -打印出目标文件中可以打印的字符串,有个默认的长度为 4 strip -剥掉目标文件的所有的符号信息 unprotoize -将 ansi c 的源码转化为 k&r c 的形式,去掉函数原型中的参数 类型。 protoize -与 unprotoize 相反,将 k&r c 的源码转化为 ansi c 的形式,函数 原型中加入参数类型。

你如果没定义 -Dinhibit,编译时将会报如下的错误 ../../gcc-2.95.3/gcc/libgcc2.c:41: stdlib.h: No such file or directory ../../gcc-2.95.3/gcc/libgcc2.c:42: unistd.h: No such file or directory make[3]: *** [libgcc2.a] Error 1 make[2]: *** [stmp-multilib-sub] Error 2 make[1]: *** [stmp-multilib] Error 1 make: *** [all-gcc] Error 2


相关文章:
powerpc平台nginx+php的交叉编译
powerpc平台nginx+php的交叉编译_计算机软件及应用_IT/计算机_专业资料。编译主机...能正常工作, 由于交叉编译器所编译出的程序是无法在编译主机上运行的, 故而...
Linux开发交叉编译环境搭建
Linux开发交叉编译环境搭建_IT/计算机_专业资料。基于...PowerPC 体系结构的《Linux for PowerPC Embedded ...构建arm-linux交叉编译环... 6页 免费 linux2.6...
如何为linux嵌入式开发建立交叉编译环境(2.4内核)
如何为linux嵌入式开发建立交叉编译环境(2.4内核)_IT...PowerPC 体系结构的《Linux for PowerPC Embedded ...构建arm-linux交叉编译环... 6页 免费 基于Linux的...
如何建立Linux下的ARM交叉编译环境
如何建立Linux下的ARM交叉编译环境_计算机软件及应用_IT/计算机_专业资料。最简单...Target HOWTO》,PowerPC 体系结构的《Linux for PowerPC Embedded Systems HOWTO》...
vsftpd服务器交叉编译过程记录
vsftpd服务器交叉编译过程记录_IT/计算机_专业资料。vsftpd服务器交叉编译过程记录交叉编译 vsftpd 平台:Fedora8 交叉编译器版本:PowerPC-linux-gcc 3.4.3 with Glib...
嵌入式开发建立交叉编译环境
嵌入式开发建立交叉编译环境_计算机软件及应用_IT/计算机_专业资料。嵌入式开发建立...HOWTO》 ,PowerPC 体系结构的《Linux for PowerPC Embedded Systems HOWTO 》等...
制作ARM交叉编译工具详细步骤
一般一个完整的交叉编译器涉及到多个软件, 主要包括...PowerPC ARM MIPS(big endian) MIPS(little endian)...基于ARM的交叉编译工具的... 4页 免费 构建交叉编译...
建立交叉编译器
//www.kernel.org/pub/linux/kernel/v2.6/ 一般一个完整的交叉编译器涉及到...PowerPC ARM MIPS(big endian) MIPS(little endian) MIPS64 SuperH3 SuperH4 ...
更多相关标签:
powerpc交叉编译器 | powerpc交叉编译 | 如何构建交叉编译环境 | 构建交叉编译环境 | powerpc编译器 | kernel 编译 powerpc | 交叉编译 | 交叉编译环境搭建 |