精华内容
下载资源
问答
  • 交叉编译工具链

    2021-04-19 11:21:40
    2、交叉编译工具链详解 参考: http://www.crifan.com/files/doc/docbook/cross_compile/release/html/cross_compile.html 3、制作交叉编译工具 参考: http://www.crifan.com/files/doc...

    1、嵌入式开发模型-交叉开发

        在嵌入式开发过程中有宿主机目标机的角色之分:宿主机是执行编译链接嵌入式软件的计算机;目标机是运行嵌入式软件的硬件平台。

    clip_image002

    在宿主机执行编译的流程如下:

    clip_image004

    2、交叉编译工具链详解

    参考:

    http://www.crifan.com/files/doc/docbook/cross_compile/release/html/cross_compile.html

    3、制作交叉编译工具

    参考:

    http://www.crifan.com/files/doc/docbook/crosstool_ng/release/html/crosstool_ng.html

     

    4、交叉编译工具

    arm-linux-gcc

    arm-linux-addr2line

    arm-linux-objcopy

    arm-linux-readelf

    arm-linux-ar

    arm-linux-ld

    arm-linux-objdump

    arm-linux-size

    arm-linux-nm

    arm-linux-strip

    arm-linux-cc

    arm-linux-gprof

    arm-linux-c++filt

    arm-linux-as

    arm-linux-cpp

    arm-linux-gccbug

    arm-linux-ldd

    arm-linux-populate

    arm-linux-strings

    arm-linux-c++

    arm-linux-g++

    arm-linux-gcov

    arm-linux-ranlib

     

    如何查看各交叉编译工具的帮助信息:

    例如查看arm-linux-gcc的帮助信息:

        $ arm-linux-gcc --help

    常用的交叉编译工具:

    4.1 交叉编译器 arm-linux-gcc

        和X86平台下的gcc的基本用法用法是完全一样的;不同之处:标准的gcc所引用的头文件路径为 /usr/include/stdio.h,arm-linux-gcc所引用的头文件路径为其安装路径下,如 /usr/local/armtools/4.5.1/bin/..

    4.2 交叉链接器 arm-linux-ld

        arm-linux-ld命令是ARM平台下的交叉链接器,把程序链接成可以在ARM平台下运行。

        用法: arm-linux-ld -Tled.lds led.o -o led.elf

                   把led.o链接成led.elf文件;led.lds是链接器脚本,

    4.3 交叉elf文件工具 arm-linux-readelf

    查看.elf格式文件: arm-linux-readelf -a led.elf

                              -a 参数是查看.elf文件的所有内容

     

    注意:编译的程序运行不了有两个原因:一个是要看运行平台对不对,第二个是要看处理器的大小端跟编译的程序的大小端是否对应,可以使用arm-linux-readelf -a xxx.elf 命令查看编译出来的程序大小端情况和程序运行平台。

        如下图所示,编译后的程序只能运行在小端(little endian)的处理器上,其运行平台Machine是ARM。绝大多数ARM处理器都是小端的。

    clip_image006

     查看程序运行平台还可以使用file xxx (xxx为编译后可执行文件) 命令查看。

        如一个应用程序不能执行,排除了运行平台和大小端的情况后,还有可能是库不对。

    使用arm-linux-readelf -d xxx (xxx为编译后可执行文件)查看运行库;如hello程序运行库为libc.so.6,如果开发板上没有这个库,程序是运行不了的。

    clip_image008

    4.4 交叉反汇编器 arm-linux-objdump

    把hello.c文件编译成hello可执行文件:arm-linux-gcc hello.c -o hello

    用法arm-linux -objdump -D -S hello >dump

             把hello可执行文件反汇编后输入保存到dump文件中。

             -D -S 是反汇编参数,>dump 把hello反汇编后的内容保存到dump文件中

    clip_image010

    注意: 在编译hello时没有使用-g参数,反汇编后的代码和原来C代码对应不起来。我们可以在编译hello时使用-g参数:

        先把hello.c文件编译成hello可执行文件:arm-linux-gcc -g hello.c -o hello;运行arm-linux -objdump -D -S hello >dump命令,打开dump文件可以看到

    clip_image012

    4.5文件格式转换器 arm-linux-objcopy

        使用arm-linux-objcopy命令可以把ELF格式的文件转换成二进制文件。

        文件格式转换的原因:elf格式的文件不能直接在ARM上运行(ARM只能运行二进制格式的文件);

        用法:arm-linux-objcopy -O binary led.elf led.bin

                把led.elf格式的文件转换成led.bin二进制文件。

    4.6库管理器arm-linux-ar

        arm-elf-ar将多个可重定位的目标模块归档为一个函数库文件。采用函数库文件,应用程序能够从该文件中自动装载要参考的函数模块,同时将应用程序中频繁调用的函数放入函数库文件中,易于应用程序的开发管理。arm-elf-ar支持ELF格式的函数库文件.

     

     

     

     

     

     

    展开全文
  • 编译新版本的 U-boot和 Linux 内核需要选择比较新的 ARM 交叉编译工具链,如果使用的叉编译工具链版本比较低可能会导致编译不通过。这里要注意的一点是要根据虚拟机里Ubuntu 系统的位数来选择 64 位的交叉编译器工具...

    编译新版本的 U-boot和 Linux 内核需要选择比较新的 ARM 交叉编译工具链,如果使用的叉编译工具链版本比较低可能会导致编译不通过。这里要注意的一点是要根据虚拟机里Ubuntu 系统的位数来选择 64 位的交叉编译器工具链还是 32 位的交叉编译工具链。

    1、Linaro 提供的 ARM 交叉编译工具链,可以到 Linaro 官网Linaro Releases去下载已经制作好的交叉编译工具链。

    2.yagarto提供的 ARM 交叉编译工具链,可以到 yagarto 官网Yet another GNU ARM toolchain去下载已经制作好的交叉编译工具链。

    以Linaro为例:

    (1)首先在 Ubuntu 系统中安装相关的标准 C 开发环境库,在 Ubuntu 系统终端执行命令: $ sudo apt-get install gcc g++ libgcc1 libg++ make gdb

    (2)完成相关库的安装。安装好相关库后,在/usr/local/目录下新建名为 ARM-toolchain的文件夹用于存放交叉编译工具链。接下来就是下载交叉编译工具链,相关命令如下:

    $ cd /usr/local/ARM-toolchain

    $ sudo wget http://releases.linaro.org/components/toolchain/binaries/6.1-2016.08/ar-m-linux-gnueabi/gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi.tar.xz

    $ xz -d gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi.tar.xz

    $ tar xvf gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi.tar

    (3)接下来需要把交叉编译工具链的路径添加到 Ubuntu 系统的环境变量中去。在/etc/bash.bashrc 文件中添加如下内容:

    # Add ARM toolschain path

    if[ -d/usr/local/ARM-toolchain/gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi

    ] ; then

    PATH=/usr/local/ARM-toolchain/gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnuea

    bi/bin:"${PATH}"

    fi

    然后执行 source /etc/bash.bashrc 命令使新的环境变量生效。

    (4)安装完成后,我们可以在终端执行 arm-linux-gnueabi-gcc –v 命令来查看交叉编

    译工具链的版本信息,如下图所示:

    图 1 交叉工具链版本信息

    展开全文
  • 嵌入式linux交叉编译工具链;一交叉工编译工具链的简介 什么是交叉编译;一交叉工编译工具链的简介 为什么要使用交叉编译;一交叉工编译工具链的简介 为什么要使用交叉编译;一交叉工编译工具链的简介 为什么要使用交叉...
  • 交叉编译工具链的制作前言及准备本笔记制作的交叉编译工具已通过简单验证,对初次有需求需要搭建交叉工具链有一定的指导意义,制作工具链比较耗时,需做好花费一整天时间的准备。资料学习链接linux工具、软件安装的...

    交叉编译工具链的制作

    前言及准备

    本笔记制作的交叉编译工具已通过简单验证,对初次有需求需要搭建交叉工具链有一定的指导意义,制作工具链比较耗时,需做好花费一整天时间的准备。

    资料学习链接

    linux工具、软件安装的基本步骤:

    下载,配置,编译,安装

    crosstool-ng下载

    或使用指令

    新建 arm-linux-tool 文件夹用于制作工具链

    mkdir arm-linux-tool

    cd arm-linux-tool

    wget http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-1.23.0.tar.bz2

    tar -xvjf crosstool-ng-1.23.0.tar.bz2

    新建

    mkdir crosstool-build crosstool-install src

    一、安装crosstool-ng

    1.编译依赖

    sudo apt-get install gperf flex bison texinfo gawk libtool automake libncurses5-dev g++ help2man

    gperf是完美哈希函数生成器;

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

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

    automake是帮助生成Makefile的工具;

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

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

    2.配置、安装

    cd crosstool-ng-1.23.0

    ./configure --prefix /home/wangh/workspace/wh_tools/arm-linux-tool/crosstool-install/

    配置过程中出现的缺少安装项通过安装解决

    配置正常生成 makefile 后,进行编译安装

    make

    make install

    验证安装是否成功

    在 crosstool-install/bin 目录下执行 ./ct-ng -v

    为了后面使用方便,配置临时环境变量

    export PATH=$PATH:/home/wangh/workspace/wh_tools/arm-linux-tool/crosstool-install/bin/

    二、配置交叉编译工具链

    对于常见的架构,比如arm,mips,powerpc等等,都有了很多的,已经帮我验证过,可以正常编译的示例配置了,所以我们接下来,主要就是:

    搞懂自己借用哪个配置,然后调用默认配置,然后再确认一下配置,根据自己的情况去改一改,就差不多,就配置好了。

    下面介绍,如何去配置crosstool-ng的主要的两种情况:

    如果已有同样(类似的)配置,那么直接拿过来用即可

    如果没有需要的配置,则找到一个最为接近的配置,借用后,再去修改为自己所要的配置

    在 crosstool-ng 源码的 crosstool-ng-1.23.0/samples 目录下已经提供了很多配置模板,我们基于模板修改。

    拷贝 crosstool-ng-1.23.0/samples/arm-unknown-linux-gnueabi 到 crosstool-build文件夹;

    复制 arm-unknown-linux-gnueabi/crosstool.config 为 .config用来配置

    cd crosstool-build

    cp arm-unknown-linux-gnueabi/crosstool.config .config

    ct-ng menuconfig

    (1)Paths and misc options 配置选项

    设定源码包路径和交叉编译器的安装路径

    源码包路径:设置Paths and misc options下的Local tarballs directory为 /home/wangh/workspace/wh_tools/arm-linux-tool/src

    交叉编译器的安装路径:设置Paths and misc options下的Prefix directory为 /home/wangh/workspace/wh_tools/arm-linux-tool/x-tools/${CT_TARGET}

    (2)Target options 配置选项

    1.修改交叉编译器针对的架构

    设置Target options下的Architecture level为 armv7-a

    设置Target options下的Emit assembly for CPU为 cortex-a7

    设置Target options下的Tune for CPU为 cortex-a7

    iMX6ULL配置如下:

    Architecture level=CT_ARCH_ARCH=-march=armv7-a //架构

    Emit assembly for CPU=CT_ARCH_CPU=-mcpu=cortex //家族

    Tune for CPU=CT_ARCH_TUNE=-mtune=cortex-a7 //内核

    ​ iMX283配置如下:

    Architecture level=CT_ARCH_ARCH=-march=armv5tej //架构

    Emit assembly for CPU=CT_ARCH_CPU=-mcpu=arm9e //家族

    Tune for CPU=CT_ARCH_TUNE=-mtune=arm926ej-s //内核

    2.设置支持硬件 FPU,iMX6ULL 支持硬件浮点运算单元

    (3)Toolchain options 配置选项

    1.修改 Tuple’s vendor string 厂商字符串 如:arm-fsl-linux-gnueabi-

    我们用 ht 或自定义,这里我用 wh 标识

    修改 Tuple’s alias ,给交叉编译工具起别名,这样会给每个工具创建一个软连接

    这样 arm-wh-linux-guneabihf-gcc 就可以使用 arm-linux-gcc 表示。

    (4)Operating System 配置选项

    1.使用本地内核,配置内核版本与路径

    修改 Path to custom source, tarball or directory 为/home/wangh/Tools/linux-4.1.15

    修改自定义内核版本为 4.1.15

    (5)C-library 配置选项

    其他先保持默认。

    做完上述配置工作后,选择save然后退出。

    执行 ct-ng build

    整个编译过程时间比较长,crosstool-ng 会自动下载相应的包(没有配置本地内核的还需要下载内核文件),然后解压、配置、编译、链接,但有个别包在自动下载过程中会出错,如:libelf-0.8.13,这个时候就需要手动下载,然后放到之前设置的 arm-linux-tool/src 目录下,重新运行 ct-ng build 即可。

    编译出错

    Building binutils 时出现 g++: internal compiler error: Killed (program cc1plus) 错误,经查询可能是内存不足, 临时使用交换分区来解决。

    sudo dd if=/dev/zero of=/swapfile bs=64M count=16

    sudo mkswap /swapfile

    sudo swapon /swapfile

    编译完成之后释放资源

    sudo swapoff /swapfile

    sudo rm /swapfile

    其他不太好查询的错误可查看目录下的编译日志,会有出错的具体原因,如配置Emit assembly for CPU为 cortex 导致编译gcc时出现无法识别的错误,修改为cortex-a7即可。

    整个编译过程时间较长,视电脑配置,配置好12小时,差一点的34小时,当然编译出错再次编译也会浪费大量时间,做好需要花费1~2天时间的准备。

    编译完成

    经过几次修改和漫长的编译终于编译完成。

    配置环境变量

    echo "PATH=$PATH:/home/wangh/workspace/wh_tools/arm-linux-tool/x-tools/arm-wh-linux-gnueabihf/bin" >> ~/.bashrc

    source ~/.bashrc

    安装成功测试

    arm-linux-gcc --version

    三、工具编译测试

    1.写一个简单的C程序, hello.c

    #include

    #include

    static char buff[256];

    static char* string;

    int main (void)

    {

    string = buff;

    printf("Please input a string: ");

    fgets(string, 256, stdin);

    printf("Your string is: %s", string);

    return 0;

    }

    2.使用配置的工具链交叉编译

    arm-linux-gcc hello.c -o hello

    3.nfs共享到目标板上执行

    展开全文
  • ubuntu vim 配置插件和RAM交叉编译工具链
  • 基于cmake的交叉编译工具链一、基本概念1. 什么是交叉编译交叉编译是A机器上编译生成,运行在B机器上。两个机子有不同的机器指令。2. 什么是宿主机和目标机宿主机(host)是指使用交叉编译工具链执行编译的主机,一般...

    基于cmake的交叉编译工具链

    一、基本概念 1. 什么是交叉编译

    交叉编译是A机器上编译生成,运行在B机器上。两个机子有不同的机器指令。

    2. 什么是宿主机和目标机

    宿主机(host)是指使用交叉编译工具链执行编译的主机,一般配置较高,如PC主机;目标机(target)是指运行交叉编译出的可执行程序的机器,一般资源有限,如嵌入式开发板。

    3. 什么是工具链

    工具链一般是由编译器、连接器、解释器和调试器组成,同时也包括目标机器的头文件、库文件等编译资源。

    4. cmake 工具链变量

    二、编译流程

    三、编译方法 1. cmake 命令行编译

    命令

    # 通过 CMAKE_TOOLCHIAIN_FILE 指定交叉编译工具链文件

    cmake -D CMAKE_TOOLCHIAIN_FILE="/path/to/my-cmake-toolchain-file.cmake" ..

    交叉编译工具链文件为一个后缀为.cmake文件的cmake文件。

    2. cmake-gui 图形界面编译

    此处待完善...

    四、cmake 工具链变量详解 1. 目标系统变量

    CMAKE_SYSTEM_NAME 目标机所在操作系统名称

    目标机所在操作系统名称

    不同系统取值:Linux、Android、QNX、WindowsCE、WindowsPhone、WindowsStore(Windows10 or Windows Store)

    CMAKE_SYSTEM_PROCESSOR

    目标系统的硬件或CPU架构

    不同CPU架构取值:arm(ARM)、x86(X86)

    2. 交叉编译器

    CMAKE_C_COMPILER

    目标系统的C语言编译器

    这里可以将变量设置成完整路径或者文件名

    CMAKE_CXX_COMPILER

    目标系统的C++语言编译器

    这里可以将变量设置成完整路径或者文件名

    3. 外部依赖库

    CMAKE_FIND_ROOT_PATH

    代表了目标板使用的一系列相关文件夹路径的根路径

    CMAKE_FIND_ROOT_PATH_MODE_XXX 均在此根路径及其子目录下查找

    CMAKE_FIND_ROOT_PATH_MODE_PROGRAM

    指定交叉编译时可执行程序的搜索模式

    一般取值 NEVER 或 ONLY

    CMAKE_FIND_ROOT_PATH_MODE_INCLUDE

    指定交叉编译时头文件的搜索模式

    一般取值 ONLY

    CMAKE_FIND_ROOT_PATH_MODE_LIBRARY

    指定交叉编译时库文件的搜索模式

    一般取值 ONLY

    CMAKE_FIND_ROOT_PATH_MODE_PACKAGE

    指定交叉编译时开发包的搜索模式

    一般取值 ONLY

    交叉编译搜索模式

    NEVER 表示不在你 CMAKE_FIND_ROOT_PATH 设置的目录下进行查找

    ONLY 表示仅在你 CMAKE_FIND_ROOT_PATH 设置的目录下进行查找

    BOTH 表示先在你 CMAKE_FIND_ROOT_PATH 设置的目录下进行查找再查找全局路径

    五、应用场景 1. 官方示例

    # Linux 交叉编译工具链文件

    set(CMAKE_SYSTEM_NAME Linux)

    set(CMAKE_SYSTEM_PROCESSOR arm)

    set(CMAKE_SYSROOT /home/devel/rasp-pi-rootfs)

    set(CMAKE_STAGING_PREFIX /home/devel/stage)

    set(tools /home/devel/gcc-4.7-linaro-rpi-gnueabihf)

    set(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabihf-gcc)

    set(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabihf-g++)

    set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

    set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)

    set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

    set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

    2、简单示例

    文件结构

    文件内容

    toolchain.cmake

    CMakeLists.txt

    main.cpp

    编译方法

    命令行编译

    图形界面编译

    六、参考链接

    交叉工具链

    CMake交叉编译

    CMAKE_SYSTEM_NAME 取值

    展开全文
  • 交叉编译工具链详解

    2019-01-28 22:14:03
    交叉编译工具链的详细解释,对于嵌入式开发工程师是一份很好的参考
  • 注意:使用我们提供的Ubuntu映象文件时,请按照我们的目录结构,手动设置交叉编译工具链以及编译的架构环境变量配置,(建议配置为永久生效),这里我们提供了两种交叉编译工具链,分别是buildroot构建生成的8.4以及...
  • 开源交叉编译工具链制作方法汇总:1) 使用crosstool/crosstool-ng生成2) 使用buildroot生成ARM交叉编译工具链说明:1) arm-linux-gcc是一个集合命令,它包含4个步骤:预处理、汇编、编译和链接,最终生成ELF格式的可...
  • 配置交叉编译工具链

    2019-10-28 10:16:32
    文章目录1 配置交叉编译工具链1.1 永久生效1.2 临时生效1.3 手动指定2 测试交叉编译工具链 简单记录一下配置交叉编译工具链的过程。 1 配置交叉编译工具链 交叉编译工具链存放于/home/book 目录下。设置交叉编译工具...
  • Linux 交叉编译工具链

    2021-04-15 17:36:24
    交叉编译工具链组成:交叉编译工具链主要由binutils、gcc和glibc 3个部分组成。 获取工具链来源: 1.分步编译工具链需要的库和工具(对原始码进行编译)。 2.使用第三方工具编译生成交叉工具链。 3.下载已制作好好的...
  • cygwin下的arm交叉编译工具链,cygwin下的arm交叉编译工具链
  • 树莓派的交叉编译工具链,适用树莓派的所有版本,编译内核必备,亲测可用,树莓派交叉编译工具链tools-master.zip!
  • tiny4412交叉编译工具链,现在开源出来给大家使用,节省开发时间
  • 安装交叉编译工具链4.4.3-附件资源

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,664
精华内容 1,865
关键字:

交叉编译工具链