您的位置 首页 技术

树立ARM Linux穿插编译环境

首先需要一台运行Linux操作系统的PC以完成我们的编译工作。其次要准备如下一些源文件。1、源文件准备binutils-2.14.tar.gz[url]ftp://ftp.g…

首要需求一台运转Linux操作系统的PC以完结咱们的编译作业。

其非必须预备如下一些源文件。
1、源文件预备
binutils-2.14.tar.gz
[url]ftp://ftp.gnu.org/gnu/binutils/binutils-2.14.tar.gz[/url]
gcc-core-2.95.3.tar.gz
[url]ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3/gcc-core-2.95.3.tar.gz[/url]
gcc-g++2.95.3.tar.gz
[url]ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3/gcc-g++-2.95.3.tar.gz[/url]
glibc-2.2.4.tar.gz
[url]ftp://ftp.gnu.org/gnu/glibc/glibc-2.2.4.tar.gz[/url]
glibc-linuxthreads-2.2.4.tar.gz
[url]ftp://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.2.4.tar.gz[/url]
linux-2.4.21.tar.gz
[url]ftp://ftp.kernle.org/pub/linux/kernel/v2.4/linux-2.4.21.tar.gz[/url]
patch-2.4.21-rmk1.gz # linux kernel patch for arm
[url]ftp://ftp.arm.linux.org.uk/pub/linux/arm/kernel/v2.4/patch-2.4.21-rmk1.gz[/url]
binutils-2.14.tar.gz这个紧缩包包含有ld,ar,as等一些发生或许处理二进制文件的东西。
gcc-core-2.95.3.tar.gz这个紧缩包是GCC的主体部分,GCC是GNU Compiler Collection的简称,望文生义,它能够编译许多种高档言语,例如C、C++,Java等,而这个紧缩包中含有C编译器,及公共部分,而对其他言语的支撑,选用别的的紧缩包独自发布。
gcc-g++2.95.3.tar.gz,这个紧缩包便是为使GCC能够编译C++程序而独自发布的。
glibc-2.2.4.tar.gz,libc是许多用户层使用都要用到的库,kernel和bootloader不需求这个库的支撑,这个库主体部分封装在这个紧缩包内。
glibc-linuxthreads-2.2.4.tar.gz,这是Libc用于支撑Posix线程而独自发布的一个紧缩包。
linux-2.4.21.tar.gz,这个紧缩包便是Linux的内核。
patch-2.4.21-rmk1.gz,这个紧缩包是用来给Linux内核打补丁,以使其能够支撑ARM的硬件渠道。
2、作业目录建立
咱们创立如下的目录树结构
mkdir arm
mkdir tool-chain
mkdir build-dir
mkdir src-dir
mkdir setup-dir
mkdir kernel
arm这个目录是咱们的最顶层作业目录,咱们一切的编译作业都在这儿完结。
tool-chain这个目录是咱们穿插编译东西的装置方位,它下面的bin子目录寄存咱们创立好的编译器,汇编器,连接器,以及编译好的C库也会装置到这个目录之下。
setup-dir这个目录用来寄存咱们下载的紧缩包。
src-dir这个目录用于寄存binutils,gcc,glibc解压之后的源文件。
kernel这个目录用来寄存内核文件,对内核的装备、编译作业将在这个目录中完结。
build-dir用来编译src-dir中的源文件,具体便是binutils,gcc,glibc的编译作业将在这个目录下完结。这种源文件目录和编译目录别离的编译方法是GNU所引荐的。
cd ./src-dir
tar –xvzf ../setup-dir/ binutils-2.14.tar.gz
tar –xvzf ../setup-dir/ gcc-core-2.95.3.tar.gz
tar –xvzf ../setup-dir/ glibc-2.2.4.tar.gz
tar –xvzf ../setup-dir/ glibc-linuxthreads-2.2.4.tar.gz –directory=./glibc-2.2.4
这样咱们在src-dir目录下就形成了3个源文件目录binutils-2.14,gcc-core-2.95,3,glibc-2.2.4,其间别离寄存着binutils tools,gcc,glibc的源代码。接下来咱们到build-dir中创立3个与这三个源文件目录对应的编译目录。
cd ../build-dir
mkdir ../build-dir/build-binutils
mkdir ../build-dir/build-gcc
mkdir ../build-dir/build-glibc
咱们将在这三个目录中完结对binutils tools, gcc, glibc的装备和编译作业。下面还要把内核文件解压到kernel目录下,并打补丁。
cd ../kernel
tar –xvzf ../setup-dir/ linux-2.4.21.tar.gz
cd ./linux-2.4.21
patch –p1 < ../../setup-dir/ patch-2.4.21-rmk1
二、开端创立
1、 确认几个系统变量
cd ../../
export TARGET=arm-linux
export PREFIX=../arm/tool-chain
export TARGET_PREFIX=$PREFIX/$TARGET
export KERNEL_SOURCE_LOCATION=../arm/kernel/linux-2.4.21
export PATH=$PREFIX/bin:$PATH
几个系统变量常常要用到,TARGET界说了方针机,PREFIX是东西链的装置目录,KERNEL_SOURCE_LOCATION是内核文件方位。
TARGET这个变量关于ARM系统的方针机来说取值为arm-linux,关于其他系统结构的机器如ppc,mips的取值的具体清单能够拜见glibc目录下的INSTALL文档.
2、 创立binutils
运转如下指令来创立binutils
cd ./build-dir/build-binutils
configure ../../src-dir/binutils-2.14/configure –target=$TARGET –prefix=$PREFIX
make
make install
这时$PREFIX/bin下创立了一些文件,包含arm-linux-ld,arm-linux-as等。
3、 编译内核
cd ../../kernel/linux-2.4.21
改Makefile文件使
ARCH = arm
CROSS_COMPILE=arm-linux-
make menuconfig
在System Types中挑选正确的硬件类型
make dep
之后履行如下操作
mkdir $TARGET_PREFIX/include
cp dR $KERNEL_SOURCE_LOCATION/include/arm-asm \
RGET_PREFIX/include/asm
cp dR $KERNEL_SOURCE_LOCATION/include/linux \
RGET_PREFIX/include/linux
4、 创立boot-trap gcc,这个GCC没有glibc库的支撑,所以只能用于编译内核,bootloader等,后边创立C库也要用到这个编译器,所以创立它首要是为创立C库做预备,假如只想编译内核和bootloader那么,就能够到此结束。
cd ../../build-dir/build-gcc
../../src-dir/gcc-2.95.3/configure –target=$TARGET –prefix=$PREFIX \
–with-headers=$ERNEL_SOURCE_LOCATION/include –enable-language=c \
–disable-threads
然后修正src-dir/gcc-2.95.3/gcc/config/arm/t-linux文件,在
TARGET_LIBGCC2_CFLAGS中增加如下两个界说
-Dinhibit-libc –D__gthr_posix_h
make
make install
这时$PREFIX/bin下创立了一些文件,首要创立了arm-linux-gcc。
5、 创立gblic
cd ../build-glibc
export CC=arm-linux-gcc
../../src-dir/glibc-2.2.4/configure –host=$TARGET –prefix=$TARGET_PREFIX \
–enable-add-ons
make
make install
将glibc库装置完之后,咱们要到$TARGET_PREFIX/lib这个目录下修正libc.so文件,将其间
GROUP(/lib/libc.so.6 /lib/libc_noshared.a)
这个指令脚本中的/lib 的绝对路径去掉, 也便是改为如下的方式
GROUP(libc.so.6 libc_noshared.a)
这样下一步创立完好的编译器时,才不至于导致过错.
6、 创立功用健全的GCC,并创立G++
在成功创立了libc之后,咱们就能够创立功用丰厚的GCC编译器了,而且能够创立支撑编译C++程序的G++。
cd ../../src-dir
tar –xvzf ../setup-dir/ gcc-g++2.95.3.tar.gz
cd ../build-dir/build-gcc
export CC=gcc
../../src-dir/gcc-2.95.3/configure –target=$TARGET –prefix=$PREFIX \
–enable-language=c,c++
然后修正src-dir/gcc-2.95.3/gcc/config/arm/t-linux文件,在
TARGET_LIBGCC2_CFLAGS中去除如下两个界说
-Dinhibit-libc –D__gthr_posix_h
make
make install
7,至此咱们成功的创立了ARM Linux的穿插编译东西。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/277300.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部