汇编语言交叉编译&Makefile文件
预编译:汇编 .s 文件 -> .o文件
1 | 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 文件
1 | 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) 后面跟输出文件名
生成机器可运行的二进制文件:
1 | 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
1 2 3 4 5 6 | 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<br> clean: rm *.o *.elf *.bin |
all 代表 入口函数,类似 程序的 main 函数。
clean 代表用户可以调用的函数。
注意: 缩进要用 Tab ,而不是用空格
使用方法:
编译:
1 | Makefile |
删除所有编译的文件:
1 | Makefile clean |
make会自动判断文件时间,来确定要不要重新编译已经生成过的 .o .elf .bin等文件。但是有些时候
不需要已经编译好的文件了就要全部删除,比如发布源码(给同事或放到网络上) 。
来源参考:
B站《韦东山_嵌入式Linux_第一期ARM裸机实战视频教程_免费试看版》
https://blog.csdn.net/weixin_34332352/article/details/116929868
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
2021-01-23 CentosUbuntu实现VM共享文件夹,短路径