1、创建Makefile
vi Makefile
all:
arm-linux-gcc -c led_on.s -o led_on.o
arm-linux-ld -Ttext 0 led_on.o -o led_on.elf
arm-linux-objcopy -O binary -S led_on.elf led_on.bin
arm-linux-objdump -D led_on.elf > led_on.dis
clean:
rm *.o *.elf *.bin *.dis
注意:命令行前必须加TAB键
2、编译链的使用说明
1) arm-linux-gcc 编译选项
- -c 只编译并生成目标文件。
- -o 生成指定的输出文件。用在生成可执行文件时。
- -E 只运行C预编译器。
- -O0 不进行优化处理。
- -O或-O1 优化生成代码。
- -O2 进一步优化。
- -O3 比-O2更进一步优化,包括inline函数。
- -shared 生成共享目标文件。通常用在建立共享库时。
- -static 禁止使用共享连接。
- -w 不生成任何警告信息。
- -Wall 生成所有警告信息。
2)arm-linux-ld连接选项
它是一个连接成序工具,其作用主要是将汇编过的多个二进制文件进行链接,成为一个可执行的二进制文件。
- -T File 指定一个链接脚本文件,指示编译器按照脚本进行链接。
- -Tbss ADDRESS bss段的链接地址;
- -Ttext ADDRESS 代码段的链接地址;
- -Tdata ADDRESS 数据段的链接地址;
- -o FILE 设置输出文件名;
3)arm-linux-objcopy
它被用来复制一个目标文件的内容到另一个文件中.此工具可以进行格式的转换.在实际编程的,用的最多的就是将ELF格式的可执行文件转换为二进制文件.
- -O bfdname 使用指定格式来输出文件,bfdname是BFD库中描述的标准格式名。
- -S 不从源文件中复制重定位信息和符号信息到目标文件中;
- -g 不从源文件中复制调试符号到目标文件中;
- -F bfdname 同时指明源文件,目的文件的格式;
4)arm-linux-objdump
它常用来显示二进制文件信息,常用来查看反汇编代码
- -D 反汇编所有段;
- -m machine 指定反汇编目标文件时使用的架构