如何制作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

解密携程风控:user-dun算法中的自定义base64与多模式加密机制剖析

本文深入剖析了携程旅行APP风控核心组件libduncode.so中的user-dun算法。文章重点解密了其采用的自定义Base64编码机制与多模式加密选择逻辑,并详细阐述了如何通过动态分析与静态还原,理解算法与设备指纹的深度绑定关系,为逆向分析类似混淆加固的风控算法提供了系统的方法论。

weixin_29323049的博客 340

【unity】Android 打包时Il2cpp still 报错

unity Android 打包时Il2cpp still 报错

TaoDuanYi的博客 2147

学习利用ce修改游戏生命参数

易语言代码 游戏的简陋界面 用ce查找存储这个1000即生命值的内存地址(得先附加到目标程序上,点击左上角那个电脑按钮) 看到有很多值为1000的,但哪个是生命值呢?真相只有一个 我们点击一下打我这个按钮,看下面的ce界面上地址为004A65C0处的值变了,所以这个就是我们要找的生命值 接下来我们对生命值进行修改,修改为99

zsd747289639的博客 5万+

从零开始利用MATLAB进行FPGA设计(六)用ADC采集信号教程1

用AN9238采集信号的方法(1),包含PLL、FIFO、ILA的基础教程。

WZT725的博客 3094

Unity使用IL2CPP方式打Windows包

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

iningwei的博客 1万+

智能体评测技术与实践:从评估维度到DeepEval实战指南

智能体评测技术与实践:从评估维度到DeepEval实战指南 本文系统探讨了AI智能体的评测体系与实践方法。首先从四个关键维度构建评估框架:基础能力(意图理解、知识完整性)、复杂任务(多轮对话、动态工作流)、可靠性(幻觉抑制、安全合规)以及工具效率(参数填充、多工具协同)。其次分析了主流评测工具,包括xBench的动态双轨评估、DeepEval的全链路监控等解决方案。最后详细介绍了DeepEval的实战应用,涵盖环境配置、测试用例构建、指标配置及CI/CD集成,展示了如何通过代码化评估实现智能体质量的持续提升

Linda的自动化测试之旅 3416

linux之buildroot(2)配置toolchain

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

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

VirtualBox安装Win10虚拟机超详细教程(附微软官方镜像下载)

本文提供了一份详细的VirtualBox安装Win10虚拟机教程,涵盖从环境准备、工具下载到系统安装与初始配置的全过程。特别推荐使用微软官方镜像下载,确保系统纯净安全。此外,还分享了性能优化技巧和常见问题解决方案,帮助用户高效搭建稳定的Windows测试环境。

weixin_29243279的博客 919

科研牛马千万不要错过!手把手教你用AI精准匹配真实参考文献,仅需一个专业应用+两个提示词指令

当然也可以借助生成式AI,如GPT-5.2、Gemini 3 Pro粘贴段落,输入设计好的提示词,让模型根据段落内容匹配参考文献,并正确引用到段落合适位置,再按规范格式输出参考文献列表。阅读我提供的【正文文本】,为其中的关键论点寻找真实的、权威的参考文献(优先来源于Nature, Science, IEEE, ACM, PubMed等),并插入引用。若在段落中已经引用好了参考文献,也有参考文献列表,担心引用位置不当或论点、论述逻辑与文献不够契合,则可以用以下结构化提示词,让AI辅助审查。

智能AI让学术科研更容易 1032

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

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

提莫队长 2955

Python爬虫实战:携程旅游平台数据爬取(酒店+机票+景点),破解加密与反爬(附完整代码)

携程的反爬机制再复杂,核心逻辑都是“识别非真实用户的请求”,而爬虫的核心就是“让请求看起来像真实用户的行为”。本文的方案从登录态处理、参数加密破解、动态数据抓取,到反爬应对,都是围绕“模拟真实”展开:用Playwright模拟真实浏览器登录,用住宅代理模拟真实用户IP,用随机延迟模拟真实用户的操作频率。掌握了这个核心思路,无论平台的反爬如何升级,都能找到应对方法。当然,爬虫技术是一把双刃剑,合理使用才能发挥其价值。如果你的爬虫项目中遇到了携程的反爬问题,不妨按照本文的步骤试试,大概率能解决问题。

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

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

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

士不可以不弘毅! 2518

高通平台蓝牙学习-- 基于WCN6750 Bluetooth 5.2的讲解

摘要:蓝牙5.2解决方案WCN6750具备多项先进特性:完全兼容5.2标准及ANT+协议,支持2Mbps高速BLE和长距离传输;采用射频集成方案,与WLAN共享天线并支持5G并发;内置功率放大器,支持Class1/2传输;提供双音频流和Slimbus接口优化。其HCI UART接口支持3.2Mbps速率,通过BlueZ协议栈实现蓝牙5.2功能,包括2Mbps模式和长距离传输,符合核心规范要求。(149字)

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 3万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

linux交叉编译器的制作

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

HULU 1048

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

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

weixin_34108829的博客 255

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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、付费专栏及课程。

余额充值