编译裸机程序以及交叉工具链

把链接器脚本led.lds、源文件led.S以及Makefile给出

1、arm-linux-gcc -g -c led.S -o led.o 编译不链接且包含调试信息

2、arm-linux-ld -Tled.lds -o led.elf led.o 使用链接器脚本led.lds来进行链接

3、arm-linux-objcopy -O binary led.elf led.bin 将elf格式转换为bin

4、将生成的.bin文件烧写到开发板。

交叉工具链

1、交叉编译器

arm-linux-gcc -static hello.c -o hello

2、交叉链接器

arm-linux-ld -Tled.lds -o led.elf led.o

3、elf文件工具

arm-linux-readelf -a led.elf 其中-a是查看全部信息:包括大小端、运行平台等

arm-linux-readelf -d led查看led文件运行时所需要的库

4、反汇编器

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

注意:gcc寻找头文件是在/usr/include/stdio.h。而arm-linux-gcc 头文件:/usr/local/arm/4.3.2/bin/

5、文件格式转换器

arm-linux-objcopy -O binary led.elf led.bin

注意:arm-linux-gcc 与arm-linux-ld生成的文件都是.elf格式的,不能直接运行于ARM上。

Makefile文件的构成‘

规则:用于说明如何生成目标文件

targets : prerequisites

    command(要使用TAB空格键)

以上 组成一个规则

伪目标使用关键字:

.PHONY:clean----表明clean为伪目标。

最终目标:如果用户没有指定执行某一条规则,make会默认执行makefile中的第一条规则,而这条规则中的目标称之为最终目标。

make +目标名字:会产生出生成的目标----执行单独规则。

---变量

使用变量前:

app1 :app1.o func1.o func2.o

    gcc app1.o func1.o func2.o -o app1

app2: app2.o func1.o func2.o

    gcc app2.o func1.o func2.o -o app2

使用变量后

obj= func1.o func2.o

app1 : app1.o $(obj)

    gcc app1.o $(obj) -o app1

app2:app2.o $(obj)

    gcc app2.o $(obj) -o app2

可以直接使用系统已经默认好的变量

$^:代表所有的依赖文件

[email protected]:表示目标

$<:代表第一个依赖文件

通用规则

%.o:%.S

arm-linux-gcc -g -o [email protected] -c $^

去回显:在命令前加上@符号(makefile文件里写)

make命令默认使用makefile或Makefile,而工程文件都不是二者时,使用make -f 文件名

时间: 2024-12-28 21:12:04

编译裸机程序以及交叉工具链的相关文章

嵌入式交叉工具链编译

读者可能会有疑问,为什么要用交叉编译器?交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台 (X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统.这种方法在异平台移植和嵌入式开发时非常有用.相对与交叉编译,平常做的编译叫本地编译,也 就是在当前平台编译,编译得到的程序也是在本地执行.用来编译这种跨平台程序的编译器就

2.交叉工具链

2.交叉工具链 一.交叉工具链: 交叉工具链,其实他有两个含义,一个就是交叉工具,所谓的交叉工具就是运行的环境和编译的环境不是在一体的.就像我们现在,编译裸机程序是在pc机上面执行的.可我们运行程序是在开发板.链,就是很多的意思,就是一个工具的集合.在我们前面配置arm-linux-gcc的工具中.在/usr/local/arm/4.3.2/bin的目录下有很多编译工具.例如图1-1: 图1.-1 交叉工具链 下面我们来写一个简单的程序,用这些工具编译. Hello.c: #include <s

交叉工具链的用途及使用方法

交叉工具链.链即为集合,交叉工具链也就是交叉工具的集合.平时在电脑上写程序然后再进行编译链接等操作最后生成一个可执行程序,该文件都只能在X86架 构硬件上运行,而不能在我现在使用的开发板,也就是ARM架构上运行.所以进行ARM的裸机程序开发要有一套自己的工具.交叉工具链的安装和环境变量的配 置昨天学过了,现在已经忘得差不多了,但是以后会补上的.废话少说,下面开始记录今天学到的东西. 1.交叉编译器  顾名思义,就是将写好的C程序代码编译为ARM架构下的可执行文件.以前在电脑上使用的gcc,编译后

arm-none-linux-gnueabi交叉工具链安装 ,介绍,区别总结

1.arm-none-linux-gnueabi-gcc下载 http://www.veryarm.com/arm-none-linux-gnueabi-gcc arm-none-linux-gnueabi-gcc是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具.可用于交叉编译ARM系统中所有环节的代码,包括裸机程序.u-boot.Linux kernel.filesystem和App应用程序.使用时,按照主机平台,可以下载以下任一版本中的一个

【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)

作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42239705  参考博客 : [嵌入式开发]嵌入式 开发环境 (远程登录 | 文件共享 | NFS TFTP 服务器 | 串口连接 | Win8.1 + RedHat Enterprise 6.3 + Vmware11) 开发环境 : -- 操作系统 : Vmware11 + RedHat6.3 企业版 + Win8.1; -- 硬件 : OK-6410-A 开发

自己制作ARM-Linux交叉工具链

学习嵌入式嘛,就得自己多动手,多实践.入门的话,自己配置开发环境,移植内核这些.开发环境就不说了,移植内核首先就得编译内核.就得有编译器.由于ARM cpu的体系结构与x86不一样.通常的做法就是在 x86 开发平台使用ARM交叉编译器来编译内核,再移植到开发板上.制作交叉工具链是个仔细的活,既繁琐又有难度.网上推荐的做法是新手使用别人制作好的工具链,等以后经验多了,再来仔细研究这个.不知道为什么我就硬着头皮上了,结果花了一个星期还是倒腾出来了,算是有收获.所以这篇博文就简单记录一下,内容不涉及

[国嵌笔记][016][交叉工具链]

交叉工具链 1.交叉工具是编译在arm平台上运行程序的工具,交叉工具链是交叉工具的集合 2.file filename 通过file命令可以查看程序运行的平台等相关信息 3.交叉开发 1.在x86平台上产生其他平台上运行程序的模式叫做交叉开发 2.宿主机是产生嵌入式软件的平台,目标机是运行嵌入式软件的平台 常用的交叉工具 1.交叉编译器 arm-linux-gcc 相同之处 arm-linux-gcc file.c -o file 与gcc用法上一样 不同之处 gcc从 /usr/include

5.3交叉工具链使用

实验三 交叉工具链使用 实验目的 1.掌握交叉工具链的安装.配置方法 2.掌握交叉编译.调试方法 实验要求 安装.配置arm-linux交叉工具链 交叉编译"输入-回显"程序: 将程序"嵌入"到开发板运行: ? 实验步骤 一.安装.配置arm-linux交叉工具链 1.将教学资源\toochain目录内的交叉工具链压缩包通过SMB共享拷贝到Linux宿主机 ? 2.将工具链软件包加压到根目录 3.将工具链bin目录加入PATH环境变量 打开配置文件: 添加到最后的信

016交叉工具链

1.什么是交叉工具链: 从两个层次理解,第一个层次,交叉工具,第二个层次,链: 链是集合的意思,合并到一起,交叉工具链就是一系列交叉工具的集合: 2.嵌入式开发模型——交叉开发 在嵌入式开发里面,有一种非常重要的模型叫交叉开发模型: 在这个模型中,有宿主机,目标机(开发板),宿主机和目标机的硬件平台是不一样的,宿主机一般都是X86平台,目标机有ARM等,X86很少,如果在宿主机上面编译程序,仅仅编译在x86平台上使用,显然放到目标机上面就运行不了了,那么就必须编译出在目标机上面运行的程序,但是宿