如何使用linux交叉编译

如何使用linux交叉编译,第1张

采用交叉编译的主要原因在于,多数嵌入式目标系统不能提供足够的资源供编译过程使用,因而只好将编译工程转移到高性能的主机中进行。linux下的交叉编译环境重要包括以下几个部分:1.对目标系统的编译器gcc2.对目标系统的二进制工具binutils3.目标系统的标准c库glibc4.目标系统的linux内核头文件交叉编译环境的建立步骤一、下载源代码 下载包括binutils、gcc、glibc及linux内核的源代码(需要注意的是,glibc和内核源代码的版本必须与目标机上实际使用的版本保持一致),并设定shell变量PREFIX指定可执行程序的安装路径。二、编译binutils 首先运行configure文件,并使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,然后执行make install。三、配置linux内核头文件首先执行make mrproper进行清理工作,然后执行make config ARCH=arm(或make menuconfig/xconfig ARCH=arm)进行配置(注意,一定要在命令行中使用ARCH=arm指定cpu架构,因为缺省架构为主机的cpu架构),这一步需要根据目标机的实际情况进行详细的配置,笔者进行的实验中目标机为HP的ipaq-hp3630 PDA,因而设置system type为SA11X0,SA11X0 Implementations中选择Compaq iPAQ H3600/H3700。配置完成之后,需要将内核头文件拷贝到安装目录: cp -dR include/asm-arm $PREFIX/arm-linux/include/asm cp -dR include/linux $PREFIX/arm-linux/include/linux四、第一次编译gcc首先运行configure文件,使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,并使用--disable-threads、--disable-shared、--enable-languages=c参数,然后执行make install。这一步将生成一个最简的gcc。由于编译整个gcc是需要目标机的glibc库的,它现在还不存在,因此需要首先生成一个最简的gcc,它只需要具备编译目标机glibc库的能力即可。五、交叉编译glibc这一步骤生成的代码是针对目标机cpu的,因此它属于一个交叉编译过程。该过程要用到linux内核头文件,默认路径为$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一个名为sys-linux的软连接,使其内核头文件所在的include目录;或者,也可以在接下来要执行的configure命令中使用--with-headers参数指定linux内核头文件的实际路径。configure的运行参数设置如下(因为是交叉编译,所以要将编译器变量CC设为arm-linux-gcc): CC=arm-linux-gcc ./configure --prefix=$PREFIX/arm-linux --host=arm-linux --enable-add-ons 最后,按以上配置执行configure和make install,glibc的交叉编译过程就算完成了,这里需要指出的是,glibc的安装路径设置为$PREFIXARCH=arm/arm-linux,如果此处设置不当,第二次编译gcc时可能找不到glibc的头文件和库。六、第二次编译gcc运行configure,参数设置为--prefix=$PREFIX --target=arm-linux --enable-languages=c,c++。运行make install。到此为止整个交叉编译环境就完全生成了。几点注意事项第一点、在第一次编译gcc的时候可能会出现找不到stdio.h的错误,解决办法是修改gcc/config/arm/t-linux文件,在TARGET_LIBGCC2_CFLAGS变量的设定中增加-Dinhibit_libc和-D__gthr_posix_h。

基于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 *** 作系统内核源码(一般由销售商整理提供)。

4、GNU编译工具,可由相关网站下载,或由销售商整理提供。

在工作站安装:

在某工作站PC上安装FTP客户端程序和Telnet工具,安装完毕后应该可以在该工作站PC和Linux服务器之间进行文件的传输,并在工作站PC可以通过Telnet登陆到Linux服务器(可能需要将Linux服务器的防火墙服务关闭才能完成)。

在Linux服务器安装:

将工作站PC上的Linux *** 作系统内核源码压缩包和GNU编译工具通过FTP传送到Linux服务器的某个目录(如合法的用户目录),然后在该目录下解压,并将GNU编译工具安装到默认的工作目录即可,以上工作通过在工作站PC使用Telnet工具完成,而不需要在Linux服务器上进行。

Linux *** 作系统内核的编译:

Linux *** 作系统内核的编译一般有一个比较固定的步骤,会根据MakeFile文件的不同而略有差异,可参考相关文档,编译的工作在工作站PC使用Telnet工具完成。

1.安装源码编译环境(配置gcc),在ubuntu安装完成已经有gcc(gcc是由GNU之父Stallman所开发的linux下的编译器,全称为GNU Compiler Collection, 目前可以编译的语言包括:C, C++, Objective-C, Fortran, Java, and Ada.),但是gcc还不能编译文件,因为缺少一些头文件.那么我们就要来配置这些头文件。在这里我们需要安装build-essential这个软件包,安装了这个包会自动安装上g++,libc6-dev,linux-libc-dev,libstdc++6-4.1-dev等一些必须的软件和头文件的库。安装build-essential,你可以在新立得搜索然后安装或者在终端里输入:

sudo apt-get install build-essential

2.除了编辑器之外,我们还需要文本编辑器来编写程序源码,Ubuntu中其实已自带编辑器,但是目前较为著名而且流行的vi / vim 编辑器可以通过在Ubuntu的软件中心下载,或是在终端输入指令下载,指令如下:

sudo apt-get install vim-full

3.解压包:arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2,(注:不同文件包类型,指令有区别,如bz2 -xf)如下指令:

sudo tar -xf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 OR sudo tar -xf arm-linux-gcc-3.4.6-glibc-2.3.6.tgz -C /work/

我的Ubuntu使用第二个指令解压后解压包放在了work目录下。

4.修改环境变量,把交叉编译器的路径加入到PATH:方法一:修改/etc/bash.bashrc文件(此文件只对当前用户适用),指令如下:

sudo gedit /etc/bash.bashrc

然后在文件的末尾空白处加入一下代码:

if [ -d /work/gcc-3.4.6-glibc-2.3.6 ] then

PATH=/work/gcc-3.4.6-glibc-2.3.6/arm-linux/bin:"${PATH}"

fi

即完成路径的添加。

5.使新的环境变量生效,不用重启电脑。输入下面指令:

source /etc/bash.bashrc

6.检查是否将路径加入到PATH。输入下面指令:

echo $PATH

若显示的内容中含有:/usr/local/arm/4.3.2/bin 说明已经将交叉编译器的路径加入PATH。至此,交叉编译环境安装完成。

7. 测试是否安装成功,下面的命令会显示arm-linux-gcc信息和版本。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/6080226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-14
下一篇 2023-03-14

发表评论

登录后才能评论

评论列表(0条)

保存