如何制作Linux交叉编译器

arm-linux交叉编译器制作 arm-linux交叉编译器制作     本文介绍利用crosstool-ng工具制作arm-linu交叉编译器,关于crosstool-ng不在多讲(可以百度),下面以s5pv210处理器为例说明制作过程。 一、安装crosstool-ng   1、获取crosstool-ng     从官方网站获取crosstool-ng,http://crosstool-ng.org/,这里我选择c 阅读详情
TooChain包括的内容

gcc  - C编译器
glibc - C标准库
binutils - 二进制工具集,如ld, ar, as等
kernle header files - Linux内核头文件

这4部分不同的版本的正确组合才能成功构建一个交叉编译器,可参考http://www.kegel.com/crosstool/


几个重要的名词

Target: 嵌入式软件真正运行的机器,不是开发机器,而是目标机器,一般用[arch]-[vendor]-[OS]-[libc]进行标识,
  • Common archs: arm, sparc, x86_64, powerpc
  • Common vendors: pc, softfloat, unknown
  • Common OS: liniux, elf, uclinux
  • Common libc: gnu, eabi, uclibc
比如:arm-unknown-linux-gnu。

Sysroot: 目标系统的根目录

ToolChain详细的制作过程


大概的过程是:
1. 从kernel source package提取出头文件
2. 使用本地gcc编译binutils
3. 使用本地gcc编译出一个简单的不用libc的simple ARM-GCC
4. 使用simple ARM-GCC编译出glibc
5. 使用本地GCC编译出完整版的ARM-GCC
6. 使用完整版的ARM-GCC编译binutils

可见,这里涉及到三个GCC,一个是本地GCC,然后是不带libc的简单的ARM-GCC,然后是完整的ARM-GCC。

详细过程如下:
1. Environment setup
§Define your target
–Export the ARCH part of the target
export ARCH=”arm”
–Export the tuple as TARGET
export TARGET=”${ARCH}-unknown-linux-gnu”
§Define your build target (ie the target for you PC)
–Export the tuplce as BUILD
export BUILD=”i686-unknown-linux-gnu”
§Create a directory which will contain our work
–Export this value as PREFIX
export PREFIX=”/usr/${TARGET}”
§Create the sysroot
–Export this value as SYSROOT
export SYSROOT=”${PREFIX}/sysroot”
2. Build  binutils with local gcc
1.Download the binutils tarball from ftp.gnu.org
2. Extract  binutils  to PREFIX/ src
tar -xf binutils-*.tar.gz -C “${PREFIX}/src”
3. Create the build directory
mkdir -p “${PREFIX}/BUILD/binutils”
4. Enter the build directory
cd “${PREFIX}/BUILD/binutils”
5. Configure  binutils
../../binutils-*/configure \
  --prefix=${PREFIX} --target=${TARGET} \
  --with-sysroot=${SYSROOT}
6. Make  binutils  and install
make && make install
3. Generate  linux  headers
1.Download the Linux kernel source tarball from www.kernel.org
2. Extract the kernel to PREFIX/ src
tar -xf linux-*.tar.gz -C “${PREFIX}/src”
3. Create the  linux  symlink
cd “${PREFIX}/src”
ln -s “${PREFIX}/src/linux-”* “${PREFIX}/src/linux”
4. Enter the  linux  directory
cd “${PREFIX}/src/linux”
5. Generate the headers with the  defconfig  for your platform (or  menuconfig )
make mts6000_defconfig
make include/linux/version.h
mkdir -p “${SYSROOT}/usr/include”
cp -a include/linux “${SYSROOT}/usr/include”
cp -a include/asm-arm “${SYSROOT}/usr/include”
cp -a include/asm-generic “${SYSROOT}/usr/include”
4. Generate  glibc  headers
1.Download the glibc tarball from ftp.gnu.org
2. Extract  glibc  to PREFIX/ src
tar -xf glibc-*.tar.gz -C “${PREFIX}/src”
3. Create the build directory
mkdir -p “${PREFIX}/BUILD/glibc-headers”
4. Enter the build directory
cd “${PREFIX}/BUILD/glibc-headers”
5. Configure  glibc
../../glibc-*/configure \
  --prefix=/usr –host=${TARGET}\
  --with-headers=${SYSROOT}/usr/include
6. Make the headers
make cross-compiling=yes install_root=${SYSROOT} install-headers
7. Create empty files needed later (these will be replaced w/ the real build)
touch ${SYSROOT}/usr/include/gnu/stubs.h
touch ${SYSROOT}/usr/include/bits/stdio_lim.h
5. Build  gcc  (needed for  glibc ) with local gcc
1.Download the gcc tarball from ftp.gnu.org
2. Extract  gcc  to PREFIX/ src
tar -xf gcc-*.tar.gz -C “${PREFIX}/src”
3. Create the build directory
mkdir -p “${PREFIX}/BUILD/gcc”
4. Enter the build directory
cd “${PREFIX}/BUILD/gcc”
5. You may need to patch  gcc  to generate  ctri.o  and  ctrn.o  needed by  glibc
patch:
  http://frank.harvard.edu/~coldwell/toolchain/t-linux.diff
6. Configure  gcc  to just generate  gcc  (no g++,  gcj ,  etc )
../../gcc-*/configure \
  –prefix=${PREFIX} –target=${TARGET}\
  --enable-languages=c --with-sysroot=${SYSROOT}
7. Make  gcc  and install
make && make install
6. Build  glibc  (needed for g++) with gcc built in the last step
1.Create the build directory
mkdir -p “${PREFIX}/BUILD/glibc”
2. Enter the build directory
cd “${PREFIX}/BUILD/glibc”
3. Reconfigure  glibc  to really build now
export CROSS_COMPILE=”${TARGET}-”
BUILD_CC=gcc CC=${CROSS_COMPILE}gcc \
  AR=${CROSS_COMPILE}ar RANLIB=${CROSS_COMPILE}ranlib \
  AS=${CROSS_COMPILE}as LD=${CROSS_COMPILE}ld \
  ../../glibc-*/configure --prefix=/usr –build=${BUILD}\
    --host=${TARGET} –target=${TARGET}\
    --with-headers=${SYSROOT}/usr/include
4. Make and install  glibc
make && make install_root=”${SYSROOT}” install
7.Build gcc,g++
1.Enter the build directory
cd “${PREFIX}/BUILD/gcc”
2.Configure gcc to just generate gcc and g++ (now that we have glibc)
../../gcc-*/configure \
  --prefix=${PREFIX} --target=${TARGET} \
  --enable-languages=c,c++ --with-sysroot=${SYSROOT}
3. Make  gcc  and install
make && make install
8.Build any other tools: kernel, gdb, libtool, etc
arm-linux交叉编译器制作_crosstool 如何获取 可见我的目标处理器s5pv210与arm-cortex_a8-linux-gnueabi最接近,所以就使用它生成配置文件.config,执行ct-ngarm-cortex_a8-linux-gnueabi即可。Tuple’svendorstring是供应商字符串,若设置为zyz,则编译后的工具链名字为arm-zyz-linux-gnueabi。Tuple’salias是工具链的别名,若设置为arm-linux,则编译后会建立工具链的软连接,命名为arm-linux-xx。然后,设置环境变量即可。 阅读详情

相关推荐

Linux下制作ARM920T交叉编译器及编程

可以从GNU工具链网站(https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads)或者其他可靠的源下载ARM920T交叉编译工具链。通过以上步骤,你可以在Linux环境下制作ARM920T交叉编译器,并使用它来开发和编译适用于ARM920T处理器的应用程序。现在你可以编写适用于ARM920T处理器的源代码,并使用交叉编译工具链来编译它。

PixelDyno的博客 260

Unity 使用 IL2CPP 发布项目

Unity的IL2CPP(Intermediate Language to C++)是一个编译技术,它将C#代码转换为C++代码,然后再编译成平台相关的二进制代码。IL2CPP提供了几个优点,特别是在性能和跨平台部署方面。:IL2CPP通常能提供比传统的Mono运行时更好的性能,因为它可以利用本地编译器的优化。:由于IL2CPP生成的是C++代码,这使得它更容易被跨平台的编译器支持,因此你可以将游戏编译到多个平台,包括iOS、Android、Windows、Mac、Linux和游戏主机。

熊思雨的博客 8191

解决win11无法安装.net framework 3.5(包括.net2.0和3.0)错误代码:0x80070005

解决win11无法安装.net framework 3.5(包括.net2.0和3.0)错误代码:0x80070005

zeng699304的博客 2万+

【unity】Android 打包时Il2cpp still 报错

unity Android 打包时Il2cpp still 报错

TaoDuanYi的博客 2147

HFSS微带线仿真从零到一:材料参数与求解设置优化指南

在射频电路设计中,微带线仿真涉及电磁场求解与传输线理论,其精度高度依赖材料参数和求解设置。相对介电常数、损耗角正切和导体电导率等参数直接影响特性阻抗与插入损耗,而求解频率、网格划分和参数扫描则决定仿真效率与收敛性。合理设置这些参数可显著提升S参数准确性,避免设计迭代。应用场景包括天线馈线、滤波器和微波互连。本文基于HFSS微带线仿真实践,系统讲解材料选择与参数优化全链路,帮助工程师快速复现可靠模型。

weixin_29192211的博客 79

Linux系统搭建OpenClaw(原Clawdbot)全流程指南 最新版

工具定位:开源个人 AI 助手,支持文件读取、命令执行、多渠道交互(Telegram / 本地终端等);系统要求:主流 Linux 发行版(Ubuntu/Debian/CentOS 等),Node.js ≥22(核心依赖);安全提示:OpenClaw 为测试版,具备高权限操作能力,建议使用非主力机,配置权限白名单,避免接触敏感数据。

AI时代老码农的第二春 6560

Unity使用IL2CPP方式打Windows包

1,确保安装了对应版本的扩展包:UnitySetup-Windows-IL2CPP-Support-for-Editor。建议使用Visual Studio Installer补充安装一些C++相关的工具包。可以考虑把如下脚本放到Assets目录下(来自。笔者Unity版本2021.3.8f1。

iningwei的博客 1万+

ICG setup timing violation介绍?

门控时钟(clock gating)在RTL级电路设计过程中进行低功耗优化常用方法,能够有效降低动态功耗(翻转功耗)。Clock gating cell 可以由与门,与非门,或门或者或非门构成,但很容易产生Glitch。在实际使用中,一般用ICG(集成门控时钟单元)来完成clock gating。 下图展示了glitch的产生原因 在CTS时钟树综合的时候,ICG不会被看作sink,通常放置在source点附近,因此就会出现如上图这种结果。上图可以看出,在分析DFF到ICG的setup timing

m0_61003348的博客 9809

linux之buildroot(2)配置toolchain

buildroot提供两种toolchain使用方式,内部工具链和外部工具链,并且buildroot也支持生成toolchain sdk,用于构建新的交叉开发环境,这篇文章介绍了如何在buildroot使用toolchain以及生成定制的toolchain sdk。

梅花香自苦寒来,宝剑锋从磨砺出。 4863

MAX96717实战:如何选择Host-to-Peripheral和Pass-Through I2C模式?附配置代码

本文深入解析MAX96717芯片的两种关键I2C模式:Host-to-Peripheral与Pass-Through。通过对比其核心差异、硬件连接考量及软件配置代码,为嵌入式开发者提供了清晰的模式选择策略与实战指南,帮助优化系统设计并避免常见通信故障。

weixin_29190573的博客 461

手把手教您如何在飞牛NAS上部署OpenClaw(Clawdbot/Moltbot)智能助手,接入钉钉,0成本使用(万字保姆级教程)

想在飞牛NAS上部署一个24小时待命的AI助手?🤖 本文手把手教您如何在飞牛NAS上部署一个完全免费的OpenClaw智能助手 ✅

XiaoqiangClub的博客 7232

Could not set up a toolchain for Architecture x64. Make sure you have the right build tools installe

Unity 版本 2021.3.6f1c3。打包Windows平台时。

提莫队长 2955

工业质检封神!YOLOv8实战金属表面缺陷检测,自建数据集mAP突破95%

本文详细介绍了基于YOLOv8的金属表面缺陷检测实战方案。针对工业质检中的光照不均、纹理复杂、小样本等挑战,作者构建了12000张图像的数据集,提出针对性数据增强策略和两阶段训练方法。通过优化损失函数、调整超参数等技术手段,最终在测试集上达到95.1%的mAP@0.5,检测速度32FPS。相比传统方法,该方案在精度和鲁棒性上均有显著提升,为工业视觉质检提供了可复现的落地解决方案。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 428

Linux交叉编译器的制作(二)

Linux交叉编译器的制作-crosstool-ng 1.交叉编译器的了解 1.1 GNU GNU编译器集(其前身为GNU C编译器)诞生于1987年。当时Richard Stallman(GNU项 目的创办人)想要创建一个编译器,它可以满足他定义的“自由软件”概念,并可用来编译 GNU项目发布的其他软件。GNU C编译器迅速在自由软件社区中流行开来,而且以其健壮性和 可移植性...

士不可以不弘毅! 2518

事件驱动的 SAP 工作流:从 BOR 事件到 Event Linkage 的落地与排障全景图

摘要: SAP工作流中的Event是业务对象状态变化的系统广播机制,如发票录入、采购订单释放等事件。通过事件驱动,业务程序与流程引擎解耦,业务只需发布事件,流程引擎负责后续处理。文章详细解析了SAP工作流事件的完整链路,包括事件定义、触发机制、事件容器传递、SWE2配置的关键作用,以及事件不触发时的排查方法。重点介绍了事件在启动流程、终止任务、等待步骤和主动创建中的应用,并结合采购订单审批案例说明事件的实际使用场景和配置要点。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 189

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

linux交叉编译器的制作

1 准备交叉编译器源码包1.1上传源码包到虚拟机上 1.1.1修改/opt目录权限我们一般会将交叉编译器放到虚拟机的/opt路径下,但这不是绝对的。为了保证今后使用我的源码包编译正常,大家都最好放到这里。由于在Linux安装后,/opt目录默认只有root才有写的权限,所以在上传这些源码包之前首先要修改他的权限。 [hulu@centos6 ~]$ sudo chmod 777 /opt/

HULU 1048

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

linux 编译器制作,linux下交叉编译器制作

目前我用的交叉编译器是TQ2440配套光盘中制作好了的,解压后需要如下配置:1.对于Fedora系统:修改/etc/profile文件,在其中添加交叉编译器的环境变量的设置。对于Ubuntu系统,修改/etc/enviroment文件2.我用的是Fedora系统,修改PATH值,在其后添加上交叉编译器的路径,添加pathmunge /opt/EmbedSky/4.3.3/bin对于Ubuntu系统...

weixin_34108829的博客 255

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

linux 编译器制作,Linux交叉編譯器的制作(一)

Linux交叉編譯器的制作-buildroot1.問題出現編譯內核時,需要在PC機上進行編譯才能下載到開發板上去,但兩個平台不一樣,需要我們自己實現這個功能。[klaus@localhost linux-3.0.1]$ makemake: /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc:命令未找到HOSTCC scripts/basic/...

weixin_29124971的博客 391

linux下交叉编译器制作

本人使用的板子是三星的fl2440基于arm9,cpu为s3c2440。 1:编译路径 我们一般将交叉编译器放在/opt下(但不绝对),因为/opt目录默认只有root才有写的权限,所以在上传这些源码包之前首先要修改他的权限。修改完成后放入buildroot-2012.08源码包。 解压缩源码包内的buildroot-2012.08.tar.bz2压缩包 并创建dl路径存放所有源码包(

zhangL_04的博客 550

arm-linux交叉编译器制作,ARM平台交叉编译器的制作

ARM平台交叉编译器的制作主机环境:Ubuntu12.04.164bitgccversion4.6.3ubuntu 12.04.1 64bitgcc version 4.6.31. 下载最新源码包binutils-2.22.tar.gzgcc-4.7.2.tar.bz2gmp-5.0.5.tar.xzmpfr-3.1.1.tar.xzmpc-1.0.1.tar.gzglibc-2.16.0...

weixin_39849548的博客 354

Linux交叉编译器的制作(一)

Linux交叉编译器的制作-buildroot 1.问题出现 编译内核时,需要在PC机上进行编译才能下载到开发板上去,但两个平台不一样,需要我们自己实现这个功能。 [klaus@localhost linux-3.0.1]$ make make: /opt/buildroot-2012.08/arm920t/usr/bin/arm-linux-gcc:命令未找到 HOSTCC sc...

士不可以不弘毅! 981

linux 带库编译器,ARM下 GCC交叉编译器的制作

本文所举的实例是在Cygwin环境下制作带uclibc库的arm交叉编译器。1.下载所需文件以下是我在Cygwin环境下制作arm-gcc(uclibc)交叉编译器中所需要的文件:binutils-2.14.90.0.8uClibc-0.9.27gcc-3.4.2linux-libc-headers-2.4.29PS:一般来说这里还需要下一些patch,因为我对编译器的理解还不够,加上这个事情是工...

weixin_42419508的博客 363

linux学习——交叉编译器制作&配置过程

本文为交叉编译器的配置过程以及相关知识的简单介绍。 一、预备知识     1、交叉编译与交叉编译器。   交叉编译:简单来说就是一个平台上生成另一个平台能够执行的可执行代码。   例如:我们平时使用的个人电脑的CPU是x86架构的指令集,所以编译生成的可执行代码只能够在x86架构的平台上运行,如果要在ARM的平台上运行,需要由ARM的指令体系编译生成能够在ARM平台能够执行的代码。我

萬象森羅,能者獨秀! 1330
上一篇: D-Bus daemon的启动
下一篇: DSL的基本知识及其测试
szonebit
博客等级 码龄16年 17粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值