基于Linux操作系统的应用开发环境一般是由目标系统硬件(开发板)和宿主PC机所构成。目标硬件开发板用于运行操作系统和系统应用软件,而目标板所用到的操作系统的内核编译、应用程序的开发和调试则需要通过宿主PC机来完成(所以称为交叉编译)。双方之间一般通过串口,并口或以太网接口建立连接关系。 但在此我建议构建如下的交叉编译环境,适合个人或研发小组使用:单独拿出一台PC机(PII以上即可,就用以前淘汰的旧机器就可以),在该PC上安装桌面的Linux操作系统(如Red Hat Linux 8.0及以上),可以采用默认的安装选项(注意要包含FTP服务),这台PC作为Linux服务器,除管理员以外,一般不直接让其他人去操作。 将该Linux服务器接入局域网,并新建一些合法用户,以便其他的PC机(在此我们将其称为工作站)的合法用户能访问到Linux服务器。而其他的PC机(工作站)仍然使用Windows操作系统,原来干啥继续干啥。 需要的软件工具包括: 1、FTP客户端程序(如Cuteftp,可到网上下载)。 2、Telnet工具(如SecureCRT,可到网上下载)。 3、移植到某一特定ARM平台的Linux操作系统内核源码(一般由销售商整理提供)。
㈡ 搭建linux交叉编译环境必须安装linux操作系统吗
Windows下有sygwin,有些芯片厂家会提供sygwin的交叉编译工具链。
㈢ 求助,开始安装系统时gcc是能用的,后来装了交叉编译的arm-unknown-linux-gcc,就出问题了
考虑可能是gcc 出问题了,结果使用man gcc
查看是不是有此命令。出人意料的是没发现gcc 命令。不知出了什么问题,感觉不应该出这样的问题呀,这不是系统自带的吗?再三找原因,到论坛上发个帖子问了问老师,才发现fc6安装的时候必须定制这些安装包,不能按默认安装否则会少装好多文件。
于是想个解救的方法吧,到网上查了好多资料,也下了好几个安装包,不过按网上的说明一步一步安装,到最后都会出错。
具体步骤如下:安装之前,必须保证系统中有cc或者gcc等编译器,并且是可用的,或者用环境变量CC指定系统上的编译器。如果系统上没有编译器,不能安装源代码形式的GCC 3.3.1情况,可以在网上找一个与你系统相适应的如RPM等二进制形式的GCC软件包来安装使用。本文介绍的是以源代码形式提供的GCC软件包的安装过程,软件包本身和其安装过程同样适用于其它Linux和Unix系统。
系统上原来的GCC编译器可能是把gcc等命令文件、库文件、头文件等分别存放到系统中的不同目录下的。与此不同,现在GCC建议我们将一个版本的GCC安装在一个单独的目录下。这样做的好处是将来不需要它的时候可以方便地删除整个目录即可(因为GCC没有uninstall功能);缺点是在安装完成后要做一些设置工作才能使编译器工作正常。在本文中我采用这个方案安装GCC 3.3.1在安装完成后,仍然能够使用原来低版本的GCC编译器,即一个系统上可以同时存在并使用多个版本的GCC编译器。
㈣ 怎样使用linux根文件系统的lib库交叉编译
一般交叉编译器里都有一个lib的文件夹的,把你的lib文件cp到这里应该就可以了。也可以用gcc带的-L,例如:arm-linuc-gcc -L/root/lib xx.c -o xx.o
㈤ Linux系统中如何安装交叉编译器
交叉编译器通常以 arm-none-linux-gnueabi.tar.bz2 这样的名称发布(不同厂家的不同开发平台,交叉编译工具链的实际名称可能有所差别,请以实际为准),解压命令:
vmuser@Linux-host: ~$ tar xjvf arm-none-linux-gnueabi.tar.bz2
如果希望解压到一个指定的目录,可以先将 arm-none-linux-gnueabi.tar.bz2 压缩包复制到目标目录,然后进入目标目录再运行解压命令,也可以在任意目录解压,通过-C 指定目标目录。假定希望解压到“/home/ctools/”目录,则命令如下:
vmuser@Linux-host: ~$ tar xjvf arm-none-linux-gnueabi.tar.bz2 -C /home/ctools/
在终端中添加环境变量,需要每次打开终端都设置,也很麻烦。可以考虑将设置的过程添加到系统配置文件中。/etc/profile 是系统全局的配置文件,在该文件中设置交叉编译器的路径,能够让登录本机的全部用户都可以使用这个编译器。
打开终端,输入“sudo vi /etc/profile”命令,打开/etc/profile 文件,在文件末尾添加:
export PATH=$PATH:/home/ctools/arm-2011.03/bin/
然后输入“. /etc/profile”(点+空格+文件名),执行 profile 文件,使刚才的改动生效。如果没有书写错误,此时打开终端,输入 arm-none-linux-gnueabi-,然后按键盘 TAB 键,同样可以看到很多 arm-none-linux-gnueabi-开头的命令。
这些周立功那边很多的,不知道你有没去看过。
㈥ Linux安装uclibc交叉编译工具链的步骤如要将原先的glibc卸载吗
……肯定不能卸载原来的glibc,卸了之后整个系统都不能用了
你要编译的uclibc是linux->arm的和arm->arm的,glibc是给linux->linux用的
㈦ gcc交叉编译怎么找头文件及lib库的
是在specs里面读取的路径信息。
命令行中键入 gcc -v
Reading specs from /usr/lib/gcc/i686-pc-cygwin/3.4.4/specs
Configured with: /usr/build/package/orig/test.respin/gcc-3.4.4-3/configure --ver
bose --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --libdir=/usr/lib --libe
xecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --enable-langu
ages=c,ada,c++,d,f77,pascal,java,objc --enable-nls --without-included-gettext --
enable-version-specific-runtime-libs --without-x --enable-libgcj --disable-java-
awt --with-system-zlib --enable-interpreter --disable-libgcj-debug --enable-thre
ads=posix --enable-java-gc=boehm --disable-win32-registry --enable-sjlj-exceptio
ns --enable-hash-synchronization --enable-libstdcxx-debug
Thread model: posix
gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
注意“--prefix=/usr” 以及“--libdir=/usr/lib ”
表示gcc ld as 等可执行文件安装在/usr/bin,而libc.a 等文件是在/usr/lib中。
解压缩交叉编译器时,也是要解压缩在在--prefix 指定的目录下。
比如 下载了arm-linux 的交叉编译器cross-3.3.2.tar.bz2,解压缩之后,运行 arm-linux-gcc -v
得到 --prefix=/usr/local/arm。那么就要把 bin lib 等所有的文件和文件夹到/usr/local/arm目录下。
否则到时候运行arm-linux-gcc hello.c会提示找不到stdio.h 或者 lib.so.6 等
HOWTO Use the GCC specs file
About Specs file
The "gcc" program invoked by users is a convenient front-end driver executable which will invoke other programs in the background such as cc1, as or ld to do its work according to the command line parameter given. A specs file is plain text used to control the default behavior for the "gcc" front-end. The specs file is usually built-in but for flexibility purposes, it can be overridden with an external version.
Basic Specs file modifications
CC will proce a specs file via the following command.
gcc -mpspecs > specs
You may use a text editor of your choice to inspect it. It may be confusing at first, but there are many places of interest. To use the specs file, invoke gcc with -specs= or place it at "/mingw/lib/gcc/mingw32//specs" to make GCC use it by default, where refers to the GCC version installed.
Adding include directories to the search path
& #160;he *cpp: section should be modified. It contains the following by default:
*cpp:
%{posix:-D_POSIX_SOURCE} %{mthreads:-D_MT}
If "z:\libx\include" needs to be added to the GCC includes search path, it should be changed to the following
*cpp:
%{posix:-D_POSIX_SOURCE} %{mthreads:-D_MT} -I/z/libx/include
Adding lib directories to the search path
& #160;he *link_libgcc: section should be modified. It contains the following by default:
*link_libgcc:
%D
& #160;f "z:\libx\lib" needs to be added to the GCC library search path, it should be changed to the following
*link_libgcc:
%D -L/z/libx/lib
㈧ 如何安装arm-liunx交叉编译环境
sh ./arm-elf-tools-20040427.sh安装
----------------------------------------------
一、准备工作
首先需要一台运行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这个压缩包包含有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的交叉编译工具。
------------------------------------------------------
可以去www.arm16.com看看
㈨ 为什么交叉编译器要安装在Linux系统下
交叉编译就是 在A机器上利用编译工具把代码生成可以再B机器上运行。交叉编译就是这个功能,因为如果你在电脑上生成的代码知识适合于电脑运行的代码,如果你放在一个开发板上,是不能运行的,因为开发板的硬件与电脑的硬件很不同,所以需要交叉编译工具来编译,使代码能在开发板上运行