arm-linux-gcc
(1)-c 预处理,编译和汇编源文件,但是不连接。及生成OBJ文件 (.o后缀的文件) 。
(2)-S(大写) 编译后停止,不进行汇编。及将非汇编文件翻译为汇编文件(.s后缀的文件)
(3)-o file指定输出文件为file。无论是预处理,编译和汇编还是连接都可以用。如果没有使用-o选项,默认的输出结果是:可执行文件“a.out”。
(4)-E预处理后即停止,不进行编译。预处理后代码送往标准输出。gcc忽略任何不需要预处理的文件。
arm-linux-ld
-T 只用于连接Bootloader,内核等“没有底层软件支持”的软件;连接运行于操作系统之上的应用程序时,无需指定-T选项,它们默认的方式进行连接。
-Ttext startaddr
-Tdata startaddr
-Tbss startaddr
“startaddr”分别表示 代码段(Ttext),数据段(Tdata),bss段(Tbss)的起始地址,它们被依次放在代码段的后面。
-Tfile.lds,既使用连接脚本文件file.lds来设置代码段(Ttext),数据段(Tdata),bss段(Tbss)的位置信息。
arm-linux-objcopy
-O bfdname(大写O)使用指定的格式来输出文件,bfdname是BFD库中描述的标准格式名。如:-O binary 表示二进制代码输出。
arm-linux-objdump
用来显示二进制文件信息,常用来显示查看反汇编代码。
-disassemble或者-d
反汇编可执行段
-disassemble-all或者-D
反汇编所有段
一个简单的写好的Makefile的内容
led.bin: start.o
arm-linux-ld -Ttext 0 -o led.elf start.o
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led.dis
start.o : start.S
arm-linux-gcc -o start.o start.S -c
clean:
rm *.o led.elf led.bin led.dis
“>”输出重定位标志:
上例中所使用的”>“是输出重定向。通常在Linux上执行一个shell命令行时,会自动打开三个标准文件:标准输入文件(stdin),即通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),前两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,并且将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。这就是通常使用的标准输入/输出方式。
直接使用标准输入/输出文件存在以下问题:首先,用户输入的数据只能使用一次。当下次希望再次使用这些数据时就不得不重新输入。同样,用户对输出信息不能做更多的处理,只能等待程序的结束。
为了解决上述问题,Linux 系统为输入、输出的信息传送引入了两种方式:输入/输出重定向机制和管道。其中,输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。同样,输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。这样,该命令的输出就可以不显示在屏幕上,而是写入到指定文件中。就如上述例子中所用到的把“arm-linux-objdump -D led.elf”的结果重定向到led.dis文件中。这就大大增加了输入/输出的灵活性。
(部分内容摘自:《嵌入式linux应用开发详解》)
“>>”两个符号表示追加,
如 "echo "123">> hello.txt
表示将123追加到hello.txt文件中去。