友善之臂第一个裸板驱动LED程序的详细分析(新手向)

第一个程序,驱动LED灯亮。包含4个文件:Makefile,make命令批处理文件。write2sd是一个脚本文件。start.s汇编文件,驱动开发板亮灯的逻辑实现。mkv210_image.c文件,它的的作用就是用来给原始的bin文件添加头部。

Makefile(听说linux区分大小写,所以首M还是大写的好)

代码:

led.bin: start.o 
	arm-linux-ld -Ttext 0x0 -o led.elf $^
	arm-linux-objcopy -O binary led.elf led.bin
	arm-linux-objdump -D led.elf > led_elf.dis
	gcc mkv210_image.c -o mkmini210	./mkmini210 led.bin 210.bin 
	
%.o : %.S
	arm-linux-gcc -o $@ $< -c

%.o : %.c
	arm-linux-gcc -o $@ $< -c 

clean:
	rm *.o *.elf *.bin *.dis mkmini210 -f

其中

“$@”可代表目标文件的完整名称

“$<”可代表第一个文件的依赖文件的名称

“$^"可代表所有不重复的依赖文件

.o文件:目标文件

.s/.S文件:汇编语言原始程序

.h文件:预处理文件(头文件)

.c:c原始程序文件

.cc/.C/.cxx:c++原始程序文件

.m:Objective.c原始程序文件

.i:已经预处理过的c原始程序

.ii:已经预处理过额c++原始程序文件

.a/.so:编译后的库文件


%.o(要生成的文件) : %.S(依赖文件)
                                          arm-linux-gcc -o $@ $< -c(操作)

表示对所有的".S"汇编文件编译成“.o”文件。“-c”(compile)参数进行预处理、编译、汇编操作 , "-o" 参数用于指定输出的文件,后面紧接着的就是文件名

%.o : %.c
           arm-linux-gcc -o $@ $< -c

表示对所有的".c"汇编文件编译成“.o”文件。

arm-linux-ld -Ttext 0x0 -o led.elf $^
arm-linux-ld 连接命令,这里表示将“所有不重复的依赖文件”连接成led.elf这个文件,此可执行文件的代码段的起始地址为0x00000000(从此处开始执行)

“-Ttext 0x0”设置代码段的起始地址为0x00000000;

arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objcopy 复制一个目标文件的内容到另一个文件中,可以用于不同格式文件之间的格式转换

参数:

.-l bfdname(格式名)或—input-target=bfdname
用来指明源文件的格式,bfdname是BFD库中描述的标准格式名,如果没指明,则arm-linux-objcopy自己分析
-O bfdname 输出的格式(binary二进制)
-F bfdname 同时指明源文件,目的文件的格式
-R sectionname 从输出文件中删除掉所有名为sectionname的段
-S 不从源文件中复制重定位信息和符号信息到目标文件中
-g 不从源文件中复制调试符号到目标文件中

arm-linux-objdump -D led.elf > led_elf.dis

常用来显示二进制文件信息,和查看反汇编代码。

'>' 表示将这个程序的反汇编程序写入到led_elf.dis这个文件中,在终端中不显示出来.
当你打开led_elf.dis这个文件时就会看到上面命令的输出的反汇编程序了。
至于led_elf.dis是什么文件,我也不知道,网上也没有详细的讲解
<span class="m"></span>“./” 表示当前路径 linux下 “.” 是当前目录 “ ..” 是父目录

参数:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值