<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 創(chuàng )建ARM Linux交叉編譯環(huán)境實(shí)踐

創(chuàng )建ARM Linux交叉編譯環(huán)境實(shí)踐

作者: 時(shí)間:2016-11-09 來(lái)源:網(wǎng)絡(luò ) 收藏
一、準備工作
首先需要一臺運行Linux操作系統的PC以完成我們的編譯工作。
其次要準備如下一些源文件。
1、源文件準備
binutils-2.14.tar.gz
ftp://ftp.gnu.org/gnu/binutils/binutils-2.14.tar.gz
gcc-core-2.95.3.tar.gz
ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3/gcc-core-2.95.3.tar.gz
gcc-g++2.95.3.tar.gz
ftp://ftp.gnu.org/gnu/gcc/gcc-2.95.3/gcc-g++-2.95.3.tar.gz
glibc-2.2.4.tar.gz
ftp://ftp.gnu.org/gnu/glibc/glibc-2.2.4.tar.gz
glibc-linuxthreads-2.2.4.tar.gz
ftp://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.2.4.tar.gz
linux-2.4.21.tar.gz
ftp://ftp.kernle.org/pub/linux/kernel/v2.4/linux-2.4.21.tar.gz
patch-2.4.21-rmk1.gz # linux kernel patch for arm
ftp://ftp.arm.linux.org.uk/pub/linux/arm/kernel/v2.4/patch-2.4.21-rmk1.gz
binutils-2.14.tar.gz這個(gè)壓縮包包含有ld,ar,as等一些產(chǎn)生或者處理二進(jìn)制文件的工具。
gcc-core-2.95.3.tar.gz這個(gè)壓縮包是GCC的主體部分,GCC是GNU Compiler Collection的簡(jiǎn)稱(chēng),顧名思義,它能夠編譯很多種高級語(yǔ)言,例如C、C++,Java等,而這個(gè)壓縮包中含有C編譯器,及公共部分,而對其他語(yǔ)言的支持,采用另外的壓縮包單獨發(fā)布。
gcc-g++2.95.3.tar.gz,這個(gè)壓縮包就是為使GCC能夠編譯C++程序而單獨發(fā)布的。
glibc-2.2.4.tar.gz,libc是很多用戶(hù)層應用都要用到的庫,kernel和bootloader不需要這個(gè)庫的支持,這個(gè)庫主體部分封裝在這個(gè)壓縮包內。
glibc-linuxthreads-2.2.4.tar.gz,這是Libc用于支持Posix線(xiàn)程而單獨發(fā)布的一個(gè)壓縮包。
linux-2.4.21.tar.gz,這個(gè)壓縮包就是Linux的內核。
patch-2.4.21-rmk1.gz,這個(gè)壓縮包是用來(lái)給Linux內核打補丁,以使其可以支持ARM的硬件平臺。
2、工作目錄搭建
我們創(chuàng )建如下的目錄樹(shù)結構
mkdir arm
mkdir tool-chain
mkdir build-dir
mkdir src-dir
mkdir setup-dir
mkdir kernel
arm這個(gè)目錄是我們的最頂層工作目錄,我們所有的編譯工作都在這里完成。
tool-chain這個(gè)目錄是我們交叉編譯工具的安裝位置,它下面的bin子目錄存放我們創(chuàng )建好的編譯器,匯編器,連接器,以及編譯好的C庫也會(huì )安裝到這個(gè)目錄之下。
setup-dir這個(gè)目錄用來(lái)存放我們下載的壓縮包。
src-dir這個(gè)目錄用于存放binutils,gcc,glibc解壓之后的源文件。
kernel這個(gè)目錄用來(lái)存放內核文件,對內核的配置、編譯工作將在這個(gè)目錄中完成。
build-dir用來(lái)編譯src-dir中的源文件,具體就是binutils,gcc,glibc的編譯工作將在這個(gè)目錄下完成。這種源文件目錄和編譯目錄分離的編譯方式是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個(gè)源文件目錄binutils-2.14,gcc-core-2.95,3,glibc-2.2.4,其中分別存放著(zhù)binutils tools,gcc,glibc的源代碼。接下來(lái)我們到build-dir中創(chuàng )建3個(gè)與這三個(gè)源文件目錄對應的編譯目錄。
cd ../build-dir
mkdir ../build-dir/build-binutils
mkdir ../build-dir/build-gcc
mkdir ../build-dir/build-glibc
我們將在這三個(gè)目錄中完成對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
二、開(kāi)始創(chuàng )建
1、確定幾個(gè)系統變量
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
幾個(gè)系統變量經(jīng)常要用到,TARGET定義了目標機,PREFIX是工具鏈的安裝目錄,KERNEL_SOURCE_LOCATION是內核文件位置。
2、創(chuàng )建binutils
運行如下命令來(lái)創(chuàng )建binutils
cd ./build-dir/build-binutils
configure ../../src-dir/binutils-2.14/configure –target=$TARGET –prefix=$PREFIX
make
make install
這時(shí)$PREFIX/bin下創(chuàng )建了一些文件,包括arm-linux-ld,arm-linux-as等。
3、編譯內核
cd ../../kernel/linux-2.4.21
改Makefile文件使
ARCH = arm
CROSS_COMPILE=arm-linux-
make menuconfig
在System Types中選擇正確的硬件類(lèi)型
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、創(chuàng )建boot-trap gcc,這個(gè)GCC沒(méi)有g(shù)libc庫的支持,所以只能用于編譯內核,bootloader等,后面創(chuàng )建C庫也要用到這個(gè)編譯器,所以創(chuàng )建它主要是為創(chuàng )建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中添加如下兩個(gè)定義
-Dinhibit-libc –D__gthr_posix_h
make
make install
這時(shí)$PREFIX/bin下創(chuàng )建了一些文件,主要創(chuàng )建了arm-linux-gcc。
5、創(chuàng )建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
6、創(chuàng )建功能健全的GCC,并創(chuàng )建G++
在成功創(chuàng )建了libc之后,我們就可以創(chuàng )建功能豐富的GCC編譯器了,并且可以創(chuàng )建支持編譯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中去除如下兩個(gè)定義
-Dinhibit-libc –D__gthr_posix_h
make
make install
7,至此我們成功的創(chuàng )建了ARM Linux的交叉編譯工具


關(guān)鍵詞: ARMLinux交叉編譯環(huán)

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>