Chinaunix首页 | 论坛 | 博客
  • 博客访问: 268551
  • 博文数量: 38
  • 博客积分: 2208
  • 博客等级: 大尉
  • 技术积分: 374
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-22 13:50
个人简介

没有介绍

文章分类

全部博文(38)

文章存档

2017年(2)

2014年(1)

2012年(2)

2011年(5)

2008年(28)

分类: LINUX

2011-01-16 10:57:32

嵌入式开发的时候,我们的编译一个*.S文件,并最终生成bin文件,编译命令大致如下:

CC=arm-softfloat-linux-gnu-gcc

LD=arm-softfloat-linux-gnu-ld

OBJCOPY=arm-softfloat-linux-gnu-objcopy

$(CC) -g $(CFLAG) -c boot.S     #先将boot.S文件生成boot.o

$(LD) -g -Bstatic -T$(LDFILE) -Ttext 0x12345600 boot.o --start-group -Map boot.map -o boot.elf    #再将boot.o生成boot.elf, boot.elf通常就是可执行文件,类似于gcc -o test test.c 中的test文件,在Linux Shell下输入./test就可以执行。

$(OBJCOPY) -O binary boot.elf boot.bin    #接着将boot.elf->boot.bin,这样可以缩小代码尺寸。

运行arm-softfloat-linux-gnu-objdump -h boot.elf 可以查看该文件的信息,但是如果变成

arm-softfloat-linux-gnu-objdump -h boot.bin会提示错误,为了看boot.bin文件信息,输入:

arm-softfloat-linux-gnu-objdump -h -b binary -m arm boot.bin就可以了。哈哈我也是现学了一招,其中参数-h可以被替换成为-D, -S, -s等等,请用arm-softfloat-linux-gnu-objdump --help查看器中表示的意义。

说说ELF Bin 文件区别:

我们有了Linux OS,为了运行可执行文件,他们是遵循ELF格式的,通常gcc -o test test.c,生成的test文件就是ELF格式的,这样就可以运行了。

arm-softfloat-linux-gnu-objcopy命令将去掉ELF格式的东西,仅仅保留最纯的汇编(不知道如何解释),

在Embedded中,如果上电开始运行,没有OS系统,如果将ELF格式的文件烧写进去,包含一些ELF格式的东西,arm运行碰到这些指令,就会导致失败,如果用arm-softfloat-linux-gnu-objcopy生成纯粹的汇编,程序就可以一步一步运行。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yudingding6197/archive/2009/02/06/3866140.aspx

阅读(2855) | 评论(0) | 转发(0) |
0

上一篇:使用 Qemu调试linux内核

下一篇:BFD库

给主人留下些什么吧!~~