汇编语言交叉编译&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文件的主要内容,如果未能解决你的问题,请参考以下文章

makefile 交叉编译怎么引用静态库

ubuntu makefile交叉编译报错:file not recognized: file format not recognized

Makefile编译时怎么打印出变量值

Linux系统移植:Kernel 顶层 Makefile(上)

Linux系统移植:Kernel 顶层 Makefile(上)

vsftpd交叉编译