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

article/2025/9/18 18:54:21

交叉编译工具链的命名规则

arch [-vendor] [-os] [-(gnu)eabi]

arch – 体系架构,如ARM,MIPS,对于MIPS可能还分大端模式mips或者小端模式mipsel;

vendor – 工具链提供商,可能有的工具链会省去这个字段,一般可能是none、芯片提供商如fsl或者是第三方提供商如buildroot(允许自行修改);

os – 目标板中运行的系统,一般为linux,但对于一些专门用于裸板或者uboot的编译工具这个字段可能是bare-metal(裸板);

gnu – 所使用的C库,gnu代指glibC,这个字段还可能是eglibc,uclibc;

eabi – 相对于x86上面的abi,嵌入式应用二进制接口(Embedded Application Binary Interface),如果没有“eabi”字段,说明用的是旧版本的oabi(Old Application Binary Interface)。
一般这个字段还有eabihf这个选项:
对于eabi一般使用softfp和 soft组合兼容软硬浮点,方法是在浮点运算指令处设置一个“陷阱”,如果硬件不支持硬件浮点的话,这个指令将导致异常,这个时候软件浮点处理将服务这个异常。这种运行方式虽然浮点运算使用硬件浮点单元,但是传递参数是仍然使用通用寄存器,这样中断的时候,只需要保存普通寄存器,中断负荷小,但是参数需要转换成浮点的再计算。
对于eabihf使用soft和hard处理浮点,与上述不同的是,这个运行方式传参数也用fpu中的浮点寄存器传,省去了转换,性能最好,但是中断中需要对浮点寄存器进行出入栈处理,负荷比较高。
一般大家都会使用eabi,由于eabihf与eabi不兼容,所以如果你的源码工程有不开源的.o文件,那么这个时候你只能使用保持跟这些.o文件的编译选项保持一致。

[-(gnu)eabi]举几个例子:
gnu 等价于:glibc+oabi
gnueabi 等价于:glibc+eabi
uclibc 等价于:uclibc+oabi

查询交叉编译工具的默认编译选项

有时候我们需要编译新版本的工具链,但是不太清楚现在正在使用的工具链的详细选项,可以使用以下命令查询:

echo 'main(){}'|mipsel-linux-gcc -E -v -

可以对比前后新旧版本工具链的选项进行配置,比如下面是我的工具链的详细描述:
这里写图片描述

交叉编译工具编译选项的问题

这里需要强调,无论对于编译生成工具链的配置,还是对于工具链的命名,这些都只是影响工具链的默认选项,也就是直接输入arm-linux-gcc这样的命令时使用的编译选项,在后期编译的时候我们还是可以通过添加编译的详细描述进行适当修改:
但是还是非常推荐一个硬件平台使用一套专用的工具链。
①工具链目标cpu的架构版本不同:
比如生成工具链时的目标架构是armv7(cortex-A、cortex-M),但实际使用的硬件平台是armv5,由于新版架构中可能引入了新的指令,所以可能导致运行异常,这个时候可以在编译中添加“-mcpu=arm1176jzf-s”,变换目标架构。
②默认不支持动态库,可以添加“-enable-shared”;不支持多线程,可以添加–enable-threads=posix;浮点处理方式不对,可以通过’-mfloat-abi=softfp’(soft、hard)调整。
③使用的源码比较久,但是版本太高的gcc可能导致莫名其妙的错误,主要可能是语法检测的严谨程度问题,这个时候就只能更换工具链版本了;

MIPS交叉编译工具的编译

下面以生成MIPS的工具链为例子进行演示,ARM工具链的不同只有Toolchain和Target Option下的配置不同:
1.下载:
在 http://buildroot.uclibc.org/downloads/snapshots/buildroot-snapshot.tar.bz2 下载buildroot:
tar -jxvf buildroot-snapshot.tar.bz2
cd buildroot
buildroot是一个根文件系统生成软件,可以通过配置,非常方便的获得各种交叉编译工具链、busybox、U-boot甚至是Kernel。

2.配置buildroot:
make clean
make menuconfig
选择第一项“Target Architecture”,改成MIPS(little endian)
这里写图片描述
另外,选择“Toolchain”,务必将“Kernel Headers”的Linux版本改成你自己主机的Linux版本(因为我们编译出的MIPS交叉工具是需要在我们的主机上运行的),如我的主机是Ubuntu 12.04.4的,Linux版本是3.11.0(可以使用uname -a查看,使用lsb_release -a查看Ubuntu发行版本,另外由于选项中没有3.11.x这个选项,因此使用3.12.x):
这里写图片描述

3.编译:
注意:
1.编译过程中必须联网,因为会下载一些压缩包存放在buildroot/dl文件夹下,比如binutils、gcc等;

2.必须事先安装好bison、flex、texinfo、ncurses等,比如我第一次编译,出现如下错误,因为我没有安装texinfo:sudo apt-get install texinfo 就可以了;
之后就是漫长的等待了,差不多1个小时。。。

4.编译完成后,在buildroot文件夹下多了一个output文件夹,其中就是编译好的文件:
cd buildroot/output/host/usr/bin
我们发现了mips的交叉编译工具已经生成啦~~;
另外,在buildroot/output/target文件夹下,这里有使用mipsel-linux-gcc生成的根文件系统和busybox;
这里写图片描述
5.为了以后方便使用,我们直接将其中的bin文件夹添加到环境变量中,省得我们日后输入长长的路径了。
将路径添加到/etc/profile文件中,然后运行source命令:
source /etc/profile
6.需要强调的是,如果需要移动生成的交叉编译工具链的路径,需要从host整个节点开始移动,否则工具链将不能正常工作。
7.target下的文件系统可以打包后直接用于镜像,该目录下存放的lib,默认情况下编译选项是–share-only,所以都是动态库*.so
而编译工具链自身使用到的glibc等静态库在host/arm-none-linux-gnueabihf/sysroot(或者是libc目录,具体可以使用echo 'main(){}'|mipsel-linux-gcc -E -v -查看--with-sysroot参数),因为嵌入式开发中,对于用到的额外包,经常需要将这些包的库(如tslib,libopenssl等)放到编译链的sysroot下面,如果希望保持编译链自身的整洁,可以将工具链下的sysroot复制一份,并且在工程中使用--sysroot或者CMAKE_SYSROOT()指定。

ARM交叉编译工具链的编译配置选项

下面是我为S3C6410配置的交叉工具链配置:
Target Option下的配置:
这里写图片描述
Toolchain下的配置如下:
这里写图片描述
这里写图片描述


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

相关文章

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

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…

【java基础】java的官网和jdk安装和下载

本篇文章主要讲解java初级知识,java的jdk安装和下载。 作者:任聪聪 java 官网介绍 java只有一个唯一官网,下载jdk千万不要通过资源站下载,很有可能会存在隐患。 官网地址:https://www.oracle.com/java/ 切换中文显示的…

JDK的最新版的下载与安装

JDK的最新版的下载与安装 一、JDK概述 JDK全称Java Development ToolKit,是Java语言开发工具包。是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),Java基础的类库和很多java工具。 它不提供具体的开发…

JDK 1.8 官网下载地址(linux / windows)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 JDK 1.8 官网下载地址: JDK 1.8 官网下载地址(linuxwindows) 上面连接可以直接点击,连接…

jdk1.7 64位官方下载地址

jdk1.7 64位官方下载地址 平时要新装一个系统环境,或者下载最新的jdk,就需要到oracle官网去下载一个jdk,而目前生产环境都是1.7的环境下开发完成的,需要下载1.7版本的jdk,oracle官方网站的默认下载页面是1.8版本的。面…

如何通过官网下载JDK 每一步详细附图

1.百度搜索oracle(因为jdk是oracle旗下的,所以去找oracle官网) 2.点击带官方字样的链接进入官网,如下 3.点击顶部导航栏的Developer如下,再点击Developer Resource Center(开发人员资源中心,专门供开发人员…

JDK8官网下载和安装详细说明(Windows10系统)

目录 前言一、环境说明二、JDK官网下载1.进入官网2.找到Downloads入口3.找到Java JDK4.进入JDK下载页面5.进入JDK8下载页面6.选择下载的版本 三、JDK安装1.运行exe文件2.点击下一步3.定制安装4.安装公共JRE5.安装中6.安装完成 四、环境变量配置1.点击属性2.点击高级系统设置3.点…