汇编语言交叉编译&Makefile文件
Posted 悟透
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言交叉编译&Makefile文件相关的知识,希望对你有一定的参考价值。
预编译:汇编 .s 文件 -> .o文件
arm-linux-gcc -c -o led_on.o led_on.S
arm-linux-gcc 交叉编译工具,是在x86平台编译arm平台代码的工具
-c 预编译
-o led_on.o 参数 -o 代表输出文件(out put) 后面跟输出文件名
led_on.S 是汇编语言源码文件
链接文件:.o 文件 --> .elf 文件
arm-linux-ld -Ttext 0 led_on.o -o led_on.elf
arm-linux-ld 链接文件,是在x86平台编译arm平台代码的工具
-Ttext 0 设置源码里 text 段,加载到内存(RAM)0地址运行。
0 实际是 0x0000的简写,因为是 0 ,人和机器都不会产生歧义,就不区分是几进制了。
注意:如果非0则不能用这样的简写。
led_on.o 上一步预编译好的 .o 文件
-o led_on.elf 参数 -o 代表输出文件(out put) 后面跟输出文件名
生成机器可运行的二进制文件:
arm-linux-objcopy -o binary -S led_on.elf led_on.bin
arm-linux-objcopy 编译文件,是在x86平台编译arm平台代码的工具
-O binary 指定生成二进制文件,-O是大写。
-S led_on.elf 指定上一步的链接文件
led_on.bin 输出机器可执行的文件
Make链接编译文件:
说明:
在编译时候,如果每个文件都输入好多条指令才能编译完成,效率会很低,也可能会输错命令。
如果一个大型项目有很多文件,那将非常耗时费力。
Makefile 类似于 windos下bat批处理文件,Linux 下 sh 的 shell 文件。
Makefile文件名不区分大小写,但是官方推荐使用Makefile来命名。
编写Makefile文件:
文件名:Makefile
all: arm-linux-gcc -c -o led_on.o led_on.S arm-linux-ld -Ttext 0 led_on.o -o led_on.elf arm-linux-objcopy -o binary -S led_on.elf led_on.bin clean: rm *.o *.elf *.bin
all 代表 入口函数,类似 程序的 main 函数。
clean 代表用户可以调用的函数。
使用方法:
编译:
Makefile
删除所有编译的文件:
Makefile clean
make会自动判断文件时间,来确定要不要重新编译已经生成过的 .o .elf .bin等文件。但是有些时候
不需要已经编译好的文件了就要全部删除,比如发布源码(给同事或放到网络上) 。
来源参考:
B站《韦东山_嵌入式Linux_第一期ARM裸机实战视频教程_免费试看版》
https://blog.csdn.net/weixin_34332352/article/details/116929868
以上是关于汇编语言交叉编译&Makefile文件的主要内容,如果未能解决你的问题,请参考以下文章
ubuntu makefile交叉编译报错:file not recognized: file format not recognized
Linux系统移植:Kernel 顶层 Makefile(上)