精华内容
下载资源
问答
  • 2014-05-16 17:18:02

    1. 交叉编译器

    1.1 交叉编译器介绍

    在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,我们就称这种编译器支持交叉编译。这个编译过程就叫交叉编译。简单地说,就是在一个平台上生成另一个平台上的可执行代码,而这种工具就是交叉编译器(cross compiler)。

    1.2 搭建交叉编译环境

    1.2.1 实验环境

    交叉编译工具:arm-linux- 4.2.2

    编译平台:Ubuntu10.10

    开发板类型:UT-S3C6410

    1.2.2 搭建步骤

    1) 在/usr/local/下建立交叉编译器的安装目录arm:

    sudo  mkdir /usr/local/arm

    2)将下载的交叉编译器包解压到/usr/local/arm目录下:

    sudo tar jxvf cross-4.2.2-eabi.tar.bz2 -C /usr/local/arm/

    3)解压成功后,修改PATH环境变量:

    sudo vim  /etc/profile

    在文件为加入交叉编译器arm-linux-所在的路径:

    export PATH=$PATH:/usr/local/arm/4.2.2-eabi/usr/bin

    然后退出vim。

    4) 更新一下配置文件/etc/profile:

    source /etc/profile

    5)检测是否安装成功:

    现在就可以使用交叉编译器了,写一个测试程序helloworld,交叉编译下,看是否能在开发板上运行。

    i. 交叉编译测试程序

    arm-linux-gcc helloworld.c -o helloworld

    ii.把生成的可执行文件helloworld复制到NFS的挂载目录下:

    sudo  cp ./helloworld   /nfsboot

    注意:本实验中开发板使用NFS挂载rootfs,nfsboot是NFS的挂载目录。

    iii.在超级终端上运行:

    ./helloworld

    执行结果:

     

    本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2012-04/58066.htm

    更多相关内容
  • 嵌入式系统交叉调试原理和方法

    千次阅读 2017-12-18 10:52:29
    嵌入式系统交叉调试方法一般分为两种,一种是基于JTAG的片上调试方法,一种是基于调试代理的远程调试方法。 JTAG是一种国际标准芯片测试协议,目前大多数CPU体系都支持JTAG。基于JTAG的片上调试方法最突出的代表...

    嵌入式系统交叉调试方法一般分为两种,一种是基于JTAG的片上调试方法,一种是基于调试代理的远程调试方法。

    JTAG是一种国际标准芯片测试协议,目前大多数CPU体系都支持JTAG。基于JTAG的片上调试方法最突出的代表就是JLink调试器,其定义了一个软件调试层面的RDI接口标准,然后JLink调试器将调试环境软件(IARKEIL等)发出的RDI接口转化为JTAG命令,对芯片进行调试。该方法多适用于嵌入式系统底层驱动调试、裸系统调试和单应用调试。

     基于调试代理的远程调试方法是在目标机上运行一个调试代理程序,与宿主机的调试器进行通信交互,一起配合完成调试的任务。该方法主要使用软件陷入来模拟断点以接管CPU来完成调试。GDB远程调试是主要代表,其提供两种方式。一种是gdbserver,其能在目标机的系统上独立运行,用于调试有操作系统的应用程序;另一种是stub,其和嵌入式系统程序一起链接运行,一般用于调试系统程序。Gdbserver比较容易,但需要操作系统支持;stub调试比较难,需要针对具体的芯片体系进行移植。两者的工作原理是相似的。GDB调试基于串口协议或者TCP/IP协议。由于调试代理、串口驱动或者TCP/IP驱动需要占用大量的内存空间,因此该方法一般用于内存资源比较丰富的嵌入式系统的调试。

     

    嵌入式系统一般分资源宽裕型系统和资源紧缺型系统,前者CPU处理能力强、内存资源丰富(一般在M字节级以上),如能支持Linux内核运行的嵌入式系统,而其一般都是选用基于调试代理的远程调试方法来进行开发;而后者的CPU处理能力一般、内存资源有限(一般在100K字节以下),多见于单片机控制器类成本敏感的消费类电子系统,系统程序难以和stub程序一起在内存中运行,因此难以选择基于调试代理的远程调试方法来进行开发,而是选择基于JTAG的片上调试方法或者直接串口打印的方式来进行调试。但是,在资源紧缺型嵌入式系统上,针对带操作系统(如基于UCOS内核、FreeRTOS内核)的应用程序进行调试,基于JTAG的片上调试方法也是难以胜任的。考虑以下类型的嵌入式系统:

    带嵌入式操作系统的电子产品往往都具有多个应用,例如一些带LCD平的音频播放器,它除了有音乐应用,也有图片应用、FM应用、电子书应用等等,同时还可以充当一个U盘进行文件拷贝。该系统同时可能运行一到两个应用,例如听音乐看电子书,而其他应用则不能同时运行。嵌入式系统学习加意义气呜呜吧久零就易,这些应用程序和操作系统、UI资源文件、配置文件都是存在于外存(如nand flash或者nor flash)的固件区,对使用用户不可见;而音乐文件、电子书等则是存在于外存的用户区,对使用用户可见。从中可看成,各个应用程序是分时复用宝贵的内存资源。由于成本敏感,内存资源的大小是经过精心设计的。对于单个应用程序,也会将代码分为常驻内存类型和可切换类型。例如,对性能影响比较大的解码部分代码就需要常驻内存,而选择文件相关的代码则可以在需要时才加载到内存。同时,使用固化一部分内核的代码,就能做到以100K左右的内存来支撑整个系统的运行。应用程序在非运行状态时存储在外存中,在应用运行时才会被操作系统加载到内存中,同时对可切换类型的代码进行调度切换。

    如果要调试这种带操作系统类型的应用程序,由于内存的原因,依然不能选择基于调试代理的远程调试方法,而选择基于JTAG的片上调试方法会遇到以下问题:

    由于没有STUB在目标机运行,所以基于JTAG的片上调试方法只能通过JTAG协议接口来对内存进行读写。而上述应用程序包括常驻代码和可切换类型代码,在未运行时需要存储到外存中,在需要的时候才能由定制的操作系统加载到内存中。很明显,JTAG接口无法将代码写到外存中去。因此,需要通过其他的手段将固件(包括操作系统、所有的应用程序、UI资源文件、配置文件)烧写到固件区,才能使用基于JTAG的片上调试方法进行调试。即不使用该方法的程序下载功能,而是使用读内存、设置断点等功能。

    因此,调试这种带操作系统类型的应用程序一般的流程如下:

    1  调试过程中遇到问题,停止调试,修改好,编译链接该应用程序。

    2  打包固件,将操作系统、所有的应用程序、UI资源文件、配置文件等打包成一个固件。

    3  烧写固件,一般使用USB量产工具,或者直接的外存烧写工具。

    4  启动系统,并运行到该程序,进入调试状态。

    这种调试方式最大的问题就是效率很低,因为每次修改程序,都要重新打包整个固件,一般要耗费10分钟以上,同时,还要重新烧写整个固件,烧写前还要先擦除外存,这里也要耗费不少时间。另外,由于烧写固件和JTAG调试是两套不同的工具,板子上电到连接工具也需要消耗不少时间。

     

    展开全文
  • 论文首先阐述了交叉编译和交叉调试概念,简要说明了嵌入式软件的开发过程,介绍了系统级调试和任务级调试的概念,比较了它们之间的区别;接着对GCC编译器主要组成部分进行了详细的分析;随即对交叉调试的核,fi,...
  • 交叉编译概念及步骤

    2020-07-31 15:15:53
    1.什么是交叉编译? 交叉编译 是在一个平台上生成另一个平台上的可执行代码。 我们再windows上面编写C51代码,并编译成可执行代码,如xx.hex, 是在c51上面运行,不是在windows上面运行 我们在ubuntu上面编写树莓派的...

    1.什么是交叉编译?

    交叉编译 是在一个平台上生成另一个平台上的可执行代码。

    我们再windows上面编写C51代码,并编译成可执行代码,如xx.hex,
    是在c51上面运行,不是在windows上面运行

    我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行,不是在ubuntu linux上面运行

    编译:是在一个平台上生成在该平台上的可执行代码

    C51 交叉编译的发生在keil(集成环境上面)
    stm32

    2.为什么要交叉编译?

    平台上不允许或不能够安装我们所需要的编译器比如C51

    1.因为目的平台上的资源贫乏,无法运行我们所需要编译器

    2 . .树莓派是不是就不需要交叉编译?
    错。也要 树莓派有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。操作系统也是代码,也要编译!
    平台运行需要两样至少东西:bootloader(启动引导代码)以及操作系统核心

    宿主机(host) :编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机

    目标机(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。

    交叉编译需要用到什么工具?

    交叉编译器、交叉编译工具链

    1. 交叉编译工具链的安装

    网盘:https://pan.baidu.com/s/1Xd-MQ9mUWfY37DOVcAgAYw
    提取码:awdj

    把下载下来的包放到Ubuntu上面去
    解压

    unzip tools-master.zip
    

    3.此时我们切换到 /tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin目录下
    在这里插入图片描述

    arm-linux-gnueabihf-gcc 就是我们的交叉编译的工具
    把arm-linux-gnueabihf-gcc放到环境变量中去,否则我们每次都要进入到这个目录中来编译太麻烦了

    操作步骤:

    方法1:(临时有效)

    1.echo $PATH 获得当前环境变量的值
    2.pwd获得交叉编译工具的路径( /tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin)
    3.配置环境变量,把1的结果加到2的结果后面(注意在2的结果后面加一个" : ")
    方法2:(永久有效)

    1.echo $PATH 获得当前环境变量的值
    2.pwd获得交叉编译工具的路径( /tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin)
    3.配置环境变量,修改工作目录下的.bashrc 隐藏文件

    vi /home/qingmu/.bashrc  //每个人的工作目录不同 
    

    4.在文件的最后一行写上步骤2加上步骤1 的结果(中间用" : " 链接)
    在这里插入图片描述

    展开全文
  • 开发工具的使用以及交叉调试器制作的方法。利用虚拟机在Windows操作系统下,为“GEC2410”开发板搭建了一个嵌入式Linux的运行平台。  关键词:交叉开发环境;ARM;Linux  0 引言  目前,随着ARM技术的日益成熟...
  • 开发工具的使用以及交叉调试器制作的方法。利用虚拟机在Windows操作系统下,为“GEC2410”开发板搭建了一个嵌入式Linux的运行平台。  关键词:交叉开发环境;ARM;Linux  0 引言  目前,随着ARM技术的日益成熟...
  • 1.认识嵌入式系统

    千次阅读 2021-11-02 09:37:12
    一、学习路线 linux驱动开发 应用开发 ... 六、交叉调试 交叉调试是一种允许以某种方式控制目标机上被调试进程的运行方式,并且具有查看和修改目标机上内存单元、寄存器以及被调试进程中的变量值等各种功能的调试方式

    一、学习路线

    linux驱动开发

    应用开发

    GUI开发

    二、主流系统

    RT_linux
    ucLinux
    Montavista(商用)
    VxWorks(军事)
    uC/OS-II
    eCos

    三、嵌入式结构

    嵌入式结构

    常用开发工具

    GUN Tools(包含了vi/vim GCC GDB make CVS SVN diff patch binutils)
    Qt:是一个跨平台的C++应用程序开发框架
    Eclipse:以Java为主的平台,其功能强大的插件使得可以当作各种应用程序来使用

    五、交叉开发环境

    嵌入式通常资源有限,因此不能直接在嵌入式系统的硬件平台上编写软件,目前采用的办法是首先在通用计算机上编写代码,然后通过交叉编译生成目标平台可以运行的二进制文件,在下载到对应平台运行。

    六、交叉调试

    交叉调试是一种允许以某种方式控制目标机上被调试进程的运行方式,并且具有查看和修改目标机上内存单元、寄存器以及被调试进程中的变量值等各种功能的调试方式交叉远程调试

    展开全文
  • 交叉编译详解 一 概念

    万次阅读 多人点赞 2016-10-25 01:00:45
    本文总结了什么是交叉编译链,并介绍了交叉编译链的各个组成部分
  • 一般实时操作系统应用于实时处理系统的上位机和实时查询系统等实时性较弱的实时系统,并且提供了开发、调试、运用一致的环境  嵌入式实时操作系统应用于实时性要求较高的实时控制系统,而且应用程序的开发过程是...
  • 第4章 交叉开发环境 本章内容包括嵌入式交叉开发环境的概念和...本章目标 交叉开发环境介绍 建立交叉开发环境 交叉调试应用程序 4.1 交叉开发环境介绍 4.1.1 交叉开发概念模型 TARGET就是目标板HOST是开发主机在开发主
  • 这里需要注意的是所谓平台,实际上包含两个概念: 1. 体系结构(Architecture) 2. 操作系统(OperatingSystem)。 同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。 ...
  • 交叉编译详解

    千次阅读 2021-02-23 13:31:29
    对于没有做过嵌入式编程的人,可能不太理解交叉编译的概念,那么什么是交叉编译?它有什么作用? 在解释什么是交叉编译之前,先要明白什么是本地编译。 本地编译 本地编译可以理解为,在当前编译平台下,编译出来...
  • 对于没有做过嵌入式编程的人,可能不太理解交叉编译的概念,那么什么是交叉编译?它有什么作用? 在解释什么是交叉编译之前,先要明白什么是本地编译。 本地编译 本地编译可以理解为,在当前编译平台下,编译出来的...
  • 嵌入式学习--------交叉开发(1)

    千次阅读 2019-08-16 11:41:42
    一、交叉开发的概念 交叉开发是指在通用电脑上把程序编写、编译、调试好,再下载到嵌入式产品中去运行。 1.大多数嵌入式产品只有运行环境没有开发环境 2.通用PC开发软件更加丰富,环境更加舒适、安全。 二、...
  • 交叉开发介绍

    千次阅读 2019-08-12 17:34:01
    1.交叉开发环境的引入: 嵌入式系统是计算机专用的系统。由于嵌入式系统硬件上的特殊性,一般不能安装发行版的Linux系统。例如flash储存空间很小,没有足够的空间安装,或者处理器很特殊,没有发行版的linux可用。...
  • 常用的调试命令 https://blog.csdn.net/baidu_35679960/article/details/60140962 gdb调试命令的使用及总结 这里比较全 https://www.cnblogs.com/lsgxeva/p/8024867.html 下文的内容基于此博文进行修改了一下 ...
  • 现代操作系统包括Windows和Linux的基本设计概念,像进程线程地址空间虚拟内存这些都大同小异,二者之上的程序之所以不兼容,主要是它们对这些功能具体实现上的差异: 首先,是可执行文件的格式,Window使用PE的格式...
  • 交叉编译指令

    千次阅读 2022-02-02 16:28:29
    gcc交叉编译指令的一些选项含义: 样例: arm-linux-gnueabihf-gcc -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $< 总体选项: -c:预处理,编译和汇编源文件,但不做连接,编译器根据源文件生成OBJ文件 -S:编译后...
  • Linux内核调试方法

    千次阅读 2021-09-30 16:46:33
    内核开发比用户空间开发更难的一个因素就是内核调试艰难。内核错误往往会导致系统宕机,很难保留出错时的现场。调试内核的关键在于你的对内核的深刻理解。 一 调试前的准备 在调试一个bug之前,我们所要做的准备...
  • 交叉编译器的安装

    2022-04-29 08:46:29
    交叉编译器的概念 交叉编译器也叫做交叉编译工具链(cross compilation tool chain),是在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,比如在PC平台(X86 CPU)上 编译 出能运行在以ARM为...
  • hello:hello.c a.c gcc -o hello.c a.c 二 实际在裸机开发的运用 led_on.bin : led_on.S arm-linux-gcc -g -c -o led_on.o led_on.S #-g:加入调试信息 -c只编译不连接 arm-linux-ld -Ttext 0x0000000 -g led_on.o -...
  • -》 | 《--》 pwm ctrl 《--》 pio 《--》 设计复杂性的挑战 cpu仅仅代表soc设计中大量ip之一,添加交叉设计功能如电影管理,性能优化,多个voltage islands,时钟逻辑等都导致复杂性增加。 现代SoC设计中的安全...
  • CentOS 7 搭建交叉编译环境(上)

    千次阅读 2019-11-20 23:11:39
    前段时间由于工作上的需要,需要编译程序在MIPS架构的终端上运行,于是就学习了一下交叉编译相关的一些知识,并尝试自己...交叉编译:所谓的交叉(cross)是一个和本地编译相对应的概念,即在当前目标平台下编译出...
  • Linux交叉编译FFmpeg

    千次阅读 2022-01-03 21:05:09
    在Android中使用编译好的FFmpeg,需要先了解一下C/C++编译基础概念,还需要准备一台Linux操作系统的机器。 编译流程 C/C++编译流程图如下: 静态库和动态库 本质上来说库是一种可执行代码的二进制形式,可以被操作...
  • 交叉编译环境

    2020-03-22 10:50:21
    大部分人不经常在Linux编程,但会在Linux下完成编译,调试运行,可能是为了适配各种大厂要在Linux服务器下部署程序 2.因为你的程序要运行在Linux下,不想跨平台开发 3.目前大多数服务器都是Linux的,要想做开发,...
  • ARM作为一种嵌入式系统处理器,以高性能、低功耗、低成本等优点占领了大部分市场。主要介绍了基于ARM9的嵌入式系统的开发利用,嵌入式系统的概念、组成及嵌入式系统上的应用程序,最后简述了嵌入式系统的开发流程。
  • 安装交叉编译环境:arm-none-linux-gnueabi 已经有大神汇总了安装方法和下载链接: https://blog.csdn.net/guodeqiangde/article/details/78239408 需要注意的是,arm-none-linux-gnueabi中的libstdc++....
  • 想要理解riscv gnu Toolchain的作用,首先要了解交叉编译的概念。我们平时常见的架构有Intel的X86架构、龙芯处理器的MIPS架构、苹果A系列处理器的ARM架构等。 交叉编译这个概念的出现和流行是和嵌入式系统的广泛...
  • 交叉编译 想在Windows下开发Linux上运行的程序,就需要引入交叉编译的概念交叉编译就是在一个平台使用交叉编译工具编译出可以在另外一个平台上运行的可执行程序。而树莓派的Raspbian系统本身已经自带集成了Linux...
  • 注明:本文章所有代码均来自scikit-learn官方网站在实际情况中,如果一个模型要上线,数据分析员需要反复调试模型,以防止模型仅在已知数据集的表现较好,在未知数据集上的表现较差。即要确保模型的泛化能力,它指...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,784
精华内容 6,713
关键字:

交叉调试的概念