制作交叉编译工具链

article/2025/9/18 18:29:56

制作交叉编译工具链

编写可以在ARM上运行的程序需要使用arm-linux-gcc交叉编译工具。因此,需要制作一套交叉编译器工具链,使用它,可以让代码运行在ARM平台上。

制作arm-linux交叉编译工具链一般通过crosstool工具或者crosstool-NG,前者使用方便,但是制作会受到一些限制,使用crosstool最多只能编译gcc4.1.1、glibc2.x的版本,无法编译版本高于2.6.29的linux内核。crosstool-NG有更好的定制性,并且一直保持着更新,对新版本的编译工具链的支持比较好,当然也带来了一些麻烦,它并不是下载下来就可以使用的,必须先配置安装。

 

主要介绍gcc-3.4.5、glibc-2.3.6版本的交叉编译工具链的制作,即制作gcc-3.4.5-glibc-2.3.6交叉编译工具

 

 

 

 

 

基于crosstool-ng制作交叉编译工具链

创建交叉编译工具链所在的目录:mkdir /home/zxc/ARM9_S3C2440

cd RM9_S3C2440

mkdir crosstool_ng#建立crosstool-ng软件的安装目录

 

下载crosstool-ng-1.12.4.tar,并将该压缩文件复制到samba服务器中去!

准备crosstool-ng的安装环境:在编译前需要检查编译环境,必备工具包:bison、flex、texinfo、automake、libtool、cvs、patch、ncurses、curl、gcj、g++、svn、gawk、cvsd。

将Ubuntu系统联网,输入命令:

Sudo apt-get install bison flex texinfo automake libtool cvs patch curl gcj subversion gawk cvsd gperf

其中:

bison和flex是用来生成语法和词法分析器;

texinfo和man类似,用来读取帮助文档;

automake是帮助生成Makefile的工具;

libtool帮助在编译过程中处理库的依赖关系,自动搜索路径;

cvs、cvsd和subversion是版本控制软件,用于编译过程中的源码下载;

curl通过给定的网络地址下载源码的工具;

gcj用于编译java源代码的工具;

patch是用于给源码打补丁的工具;

gawk是linux下用于文本处理和模式匹配的工具。

 

安装crosstool-ng

解压samba_share文件夹中的crosstool-ng-1.12.4.tar.bz2

cd samba_share

tar –xjvf crosstool-ng-1.12.4.tar.bz2

cd crosstool-ng-1.12.4

sudo ./configure --prefix=/home/zxc/ARM9_S3C2440/crosstool_ng,显示

执行sudo apt-get install awk

继续执行config命令:sudo ./configure --prefix=/home/zxc/ARM9_S3C2440/crosstool_ng

出现类似问题,解决方式类似!

注意:

 

 

 

 

 

 

 

进入安装目录/home/zxc/ARM9_S3C2440/crosstool_ng的lib/samples下,

选用arm-unknown-linux-gnueabi

 

 

 

 

配置编译的交叉编译工具链参数

(1)先建立一个编译目录

#mkdir /home/zxc/ARM9_S3C2440/crosstool_ng/ crosstool_ng_built

进入该目录,cd /home/zxc/ARM9_S3C2440/crosstool_ng/ crosstool_ng_built

 

然后执行命令:cp /home/zxc/ARM9_S3C2440/crosstool_ng/lib/ct-ng-1.12.4/samples/arm-unknown-linux-gnueabi/* .(注意最后一个“.”表示复制到当前目录)将arm-unknown-linux-gnueabi拷贝到/home/zxc/ARM9_S3C2440/crosstool_ng/ crosstool_ng_built目录下。然后会在crosstool_ng_built目录下出现crosstool.config和reported.by两个文件。

现在将文件crosstool.config的名字改为.config,命令如下:

cp crosstool.config .config(注意.config是隐藏文件,需要用ls –a命令才能查看。

然后在目录/home/zxc/ARM9_S3C2440/crosstool_ng/ crosstool_ng_built下执行ct-ng menuconfig

要设置环境变量或者软连接,命令如下:

sudo ln -s /home/zxc/ARM9_S3C2440/crosstool_ng/bin/ct-ng /usr/local/bin/ct-ng

然后执行ct-ng menuconfig

此时会弹出主菜单,如下图,此菜单主要用于交叉编译工具链的环境配置

进入“Paths and misc options”菜单,修改选项“Local tarballs directory”目录。

建立/home/zxc/ARM9_S3C2440/crosstool_ng_tarballs目录,将“Local tarballs directory”的目录改为/home/zxc/ARM9_S3C2440/crosstool_ng_tarballs

 

新建目录/home/zxc/ARM9_S3C2440/ct_ng_2440这就是生成的交叉编译工具链存放的位置。

修改选项“Prefix directory”,

返回主菜单,修改“Target options”,这是重点要修改的地方。

进入“Target options”选项

修改:

(armv4t)Architecture level

(arm920t)Emit assembly for CPU

(arm920t)tune for CPU

Floating point()设置为软浮点,因为s3c2440没有硬件浮点。

 

返回主菜单,修改Toolchain options配置选项

修改(zxc)Tuple’s vendor string,这样产生的编译器前缀就是arm-zxc-linux-gnueabi-

 

修改(arm-linux)Tuple’s alias,给产生的交叉编译工具起个别名,设置别名,这样会给每个工具创建一个软连接

 

返回主菜单,修改“Operating System”配置选项,

指定编译器的目标系统是linux,版本为2.6.39.2

 

返回主菜单,修改“Binary utilities”配置选项

 

返回主菜单,修改C compiler配置选项,

返回主菜单,修改C-library配置选项,

 

返回主菜单,修改Debug facilities配置选项

保持默认值(这里全部都没选!

返回主菜单,修改Companion library配置选项

 

这里,修改MPFR version(3.0.0)

 

做完上述配置工作后,选择退出,并选择yes保存。

编译交叉工具链

解决办法是:sudo apt-get install gcj-jdk

 

 

 

 

 

 

 

 

 

 

 

最终,排除万难,终于成功!

 

测试编译成功的交叉编译工具链

进入交叉编译工具链的安装目录/home/zxc/ARM9_S3C2440/ct_ng_2440,即之前配置的Prefix directory的目录

 

设置环境变量

 

验证交叉编译工具链是否可以使用,随便找个目录编辑一个C\C++代码,保存退出后,使用交叉编译工具链对该源文件进行编译,并生成可执行文件,这里生成的可执行文件是一种二进制文件,只能下载到开发板中去执行,并不能在Ubuntu系统中执行。

 

下面是编译主机上运行的gdb

手动下载源文件gdb-6.8a.tar.bz2,并通过samba服务器放入Ubuntu系统的/home/zxc/ARM9_S3C2440/ARM_gdb目录中。

新建gdb的安装目录:

root@zxcUbuntu:/home/zxc/ARM9_S3C2440# mkdir ARM_gdb

将载源文件gdb-6.8a.tar.bz2复制到/home/zxc/ARM9_S3C2440/ARM_gdb目录下。

root@zxcUbuntu:/home/zxc# cp /home/zxc/samba_share/gdb-6.8a.tar.bz2 /home/zxc/ARM9_S3C2440/ARM_gdb

解压文件:

root@zxcUbuntu:/home/zxc/ARM9_S3C2440/ARM_gdb#tar -xjvf gdb-6.8a.tar.bz2

root@zxcUbuntu:/home/zxc/ARM9_S3C2440/ARM_gdb#cd gdb-6.8

root@zxcUbuntu:/home/zxc/ARM9_S3C2440/ARM_gdb/gdb-6.8#./configure --target=arm-linux --enable-werror --prefix=/home/zxc/ARM9_S3C2440/ARM_gdb

root@zxcUbuntu:/home/zxc/ARM9_S3C2440/ARM_gdb/gdb-6.8#make make

root@zxcUbuntu:/home/zxc/ARM9_S3C2440/ARM_gdb/gdb-6.8#make install

 

 

 


http://chatgpt.dhexx.cn/article/CVPsdpTF.shtml

相关文章

【交叉编译】配置交叉编译工具链

配置交叉编译工具链 一、 设置交叉编译工具链1.永久生效2.临时生效3.手动指定 二、测试交叉编译工具链1.测试环境变量:2.测试交叉编译器: 一、 设置交叉编译工具链 交叉编译工具链用来在Ubuntu主机上编译应用程序,而这些应用程序是在ARM等其…

【编译原理】交叉工具链详解

1、嵌入式开发模型-交叉开发 在嵌入式开发过程中有宿主机和目标机的角色之分,宿主机是执行编译、链接嵌入式软件的计算机,目标机是运行嵌入式软件的硬件平台。在宿主机执行编译的流程如下: 而所谓的交叉编译就是:在一种平台上编…

linux交叉编译工具链安装

交叉编译器中“交叉”的意思就是在一个架构上编译另外一个架构的代码,相当于两种架构“交叉”起来了。   交叉编译器有很多种,我们使用 Linaro 出品的交叉编译器,Linaro 一间非营利性质的开放源代码软件工程公司,Linaro 开发了很…

常用的交叉编译工具链

交叉编译工具链是一种用于在一个平台上编译另一个平台上运行的程序的软件工具集,它通常包括编译器、链接器、汇编器等组件。 交叉编译工具链的命名一般遵循 target-platform-triplet 的格式,例如 arm-linux-gcc 表示用于生成 ARM 平台上 Linux 系统下运…

基于cmake的交叉编译工具链

基于cmake的交叉编译工具链 本文转载自:https://segmentfault.com/a/1190000019276315,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有。 一、基本概念 1. 什么是交叉编译 交叉编译是A机器上编译生成,运行在B机…

交叉编译工具链建立与常识

交叉编译工具链的命名规则 arch [-vendor] [-os] [-(gnu)eabi] arch – 体系架构,如ARM,MIPS,对于MIPS可能还分大端模式mips或者小端模式mipsel; vendor – 工具链提供商,可能有的工具链会省去这个字段,…

交叉编译工具链的安装和配置过程

1. 编译工具链基本介绍 C/C程序需要编译成二进制的机器码才能被CPU识别运行,而编译程序就需要用到编译器,比如我们常用的gcc编译器。 gcc编译器,其实只是编译工具链的其中一个工具而已,实际上整个编译工具链包含了:g…

编译工具链和交叉编译工具链简易说明

文章目录 编译工具链交叉编译工具链 编译工具链 做C/C开发特别是嵌入式方向的肯定会涉及编译工具链和交叉编译工具链相关内容。 C/C的程序需要经过 gcc 等编译成二进制程序才能被计算机使用,这里的 gcc 通常是泛指,包括 gcc 、 g 、ar 、as 、ld 等一系…

Linux vim分屏,如何切换窗口

1.使用 :vsp 2.若想切换窗口,从左边切换到右边,crtlw 点击两次

alt tab无法切换窗口

alt tab无法切换窗口 1. 在桌面新建 a.txt 文件 2. 在文件中输入下面内容 REGEDIT4 [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer] "AltTabSettings"dword:000000013. 将文件改为 a.reg 4. 双击文件, 点击所有确定/是 5.重启电脑

Win7系统怎么改变Alt+Tab切换窗口数量,改变Alt+Tab切换窗口数量的方法

我们在使用Win7电脑办公的时候,常常会需要用到切换窗口的快捷键AltTab,这样可以快速切换不同的程序界面,提高工作效率,但是AltTab切换窗口的数量是固定的,不过我们可以改变这个数量,下面小编给大家介绍Win7…

win10系统使用快捷键无法切换窗口怎么办

但是最近,有win1064位系统用户在使用快捷键切换窗口时发现切换不了,那么碰到win10系统使用快捷键无法切换窗口怎么办呢?今天就为大家介绍win10系统使用快捷键无法切换窗口的解决方法。 快捷键无法切换窗口 1、点击开始菜单,选择运行&#…

Linux中如何上下左右切换窗口

linux中如何上下左右切换窗口 ##第一步 将图中show miniature view勾选中,此时窗口会变成最小显示窗口,此时窗口就可以通过ctrlAlt方向键,进行上下左右切换。 ##第二步 将第一步勾选的show miniature view去掉,此时窗口变得正常&a…

win10 edge切换窗口,取消edge窗口为多个,改为独立窗口

win10系统 edge切屏问题 问题情况 edge切屏的时候会显示edge其他的窗口界面,而不是所有的edge十一个窗口的显示情况 解决方法 第一步 找到设置 第二步 搜索多窗口 点击第一个多任务设置 第三步,找到alttab选项 如下图所示 第四步&#x…

点任务栏不切换窗口_如何使您的任务栏按钮始终切换到最后一个活动窗口

点任务栏不切换窗口 Since Windows 7, apps with multiple open windows are combined into a single taskbar button. Hovering over the button gives you a live thumbnail of every window and you can then click the window you want to work with. 从Windows 7开始,具有…

打开计算机窗口的快捷键是什么,快速切换窗口的快捷键是什么

快速切换窗口的快捷键是什么 使用快捷键能让我们更加快捷地操作电脑,那么快速切换窗口的快捷键是什么呢?下面小编带着大家一起来了解一下吧! 快速切换窗口的快捷键 方法一、AltTab快捷键切换窗口 在使用AltTab快捷键切换窗口时,在…

Win32API编程_切换窗口

所需findwindow, SwitchToThisWindow findwindow 函数原型: FindWindow, LPCTSTR lpClassName, // 窗口类名 LPCTSTR lpWindowName // 窗口名 ); 返回值: 返回获取到的窗口句柄 SwitchToThisWindow 函数原型: VOID Switc…

win7中常用切换窗口4种快捷键使用

平常在使用系统中,我们经常会通过一些快捷键来切换窗口,小编在这里给大家总结下,有哪些切换窗口的快捷键可以用。   1、AitTab这个是大家都知道的切换的快捷方式,按照你使用的顺序切换。   2、WinTab效果更佳,有3D…

如何从官网下载JDK安装包?

下载JDK的安装包。 根据自己的服务器类型,下载相应的jdk版本。这里以linux64位为例介绍,下载的是jdk1.8版本。 步骤:(1)进oracle官网,点击进入Java。 (2)进入以后,找到…

java-jdk下载及安装

1、下载JDK; a、直接官网下载:http://www.oracle.com/; b、或百度网盘: 2、双击安装程序, 一直点下一步就好 3、程序安装完毕后,进行环境变量的配置 Java程序开发会使用JDK的两个命令:javac.e…