工欲善其事必先利其器

裸机开发流程
1.编写裸机程序;
2.调试裸机程序;
3.生成2进制映像(编译、链接、格式转换);
4.烧写/运行2进制映像。

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

常用交叉工具
1、交叉编译器,arm-linux-gcc;
2、交叉链接器,arm-linux-ld;
3、交叉转换器,arm-linux-readelf;
4、交叉ELF文件工具,arm-linux-objdump;
5、交叉反汇编器,arm-linux-objcopy。

Makefile用途
使用GNU Make工具来管理工程是每个Linux工程师必须掌握的技能。
Make能够使整个程序的编译、链接只需要一个命令(make)就可以完成。
Make的工作主要依赖于一个叫为Makefile的文件。Makefile文件描述了整个程序的编译,链接等规则。其中包括:工程中的哪些源文件需要编译以及如何编译,如何最后产生我们想要得可执行文件。

makefile由规则和变量构成。

Makefile中最重要的组成部分是“规则”。
规则:用于说明如何生成目标文件,规则的格式如下:
targets:prerequisites
command
目标 依赖 命令
特别提醒:命令需要使用[TAB]健空格

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

Makefile中把那些只包含命令,没有任何依赖的目标称为“为目标”(phony targets).

.PHONY:clean
clean:
    rm -f hello main.o func.o

“.PHONY”将“clean”目标声明为伪目标。

Makefile构成——最终目标
1、当一个makefile中有多条规则时,如何单独执行某条规则?
2、如果用户没有指定执行某一条规则,make会默认执行makefile中的第1条规则,而这条规则中的目标称为:最终目标。

Makefile规则——变量
使用变量前:

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)gccapp1.o (obj) -o appl
app2:app2.o (obj)gccapp2.o (obj) -o app2

Makefile规则——变量
在makefile中,用户除了可以自己定义变量外,还可以使用存在系统已经定义好的默认变量。
: @:代表目标
<使led.o:led.Sarmlinuxgccgoled.ocled.S使led.o:led.Sarmlinuxgccgo <script type="math/tex" id="MathJax-Element-456"><:代表第一个依赖文件 使用前 led.o :led.S arm-linux-gcc -g -o led.o -c led.S 使用后: led.o :led.S arm-linux-gcc -g -o </script>@ -c $^

Makefile中“#”字符后的内容被视作注释

“`
hello:hello.c
@gcc hello.c -o hello
@:取消回显

make命令默认在当前目录下寻找名字为makefile或者Makefile的工程文件,当名字不为这两者之一时,可以使用如下方法指定:
make -f 文件名

链接器脚本——段
一个可执行程序通常是由:代码段,数据段,bss段构成的。同样,在用于链接这个程序的链接器脚本中,就会反应出这几个段的信息。

创建链接器脚本———段信息
1、基本构成:段
2、设置起始链接地址
3、对齐设置
4、使用变量
5、设置代码段首文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值