Chinaunix首页 | 论坛 | 博客
  • 博客访问: 330676
  • 博文数量: 85
  • 博客积分: 3433
  • 博客等级: 中校
  • 技术积分: 844
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-29 01:11
文章分类

全部博文(85)

文章存档

2013年(1)

2012年(12)

2011年(13)

2010年(59)

我的朋友

分类: LINUX

2010-10-31 16:50:52

  按一般正常的顺序我们开发一个嵌入式程序需要经过,预处理, 编译, 汇编,连接四个步骤。对应的命令为:

 

   编译: arm-linux-gcc -c xxx.c -o xxx.o 

   连接: arm-linux-ld  -T user.lsd -o xxx  xxx.o     

   从上面的命令中有些参数不是必须的,如: -T user.lsd ,这个表示在连接的时候应用自己写的连接脚本,不采用系统默认的连接脚本。下面一起来看看怎么自己写连接脚本:

  eg: user.lds 

 

            OUTPUT_FORMAT("elf32-littlearm","elf-bigarm","elf- littlearm");

        OUTPUT_ARCH("arm");

        ENTRY("_start");

        SECTIONS

         {

              . = 0x30000000

              .text : { *(.text);}

 

              . = ALGIN(4);

              .data : { *(.data); }

 

              . = ALGIN(4)

              .rodata : {*(.rodate);}

             

              . = ALGIN(4)

              __user_sigment_start = .;

              .user_sigment : {*(.user_sigment);}

              __user_sigment_end = .;

 

              . = ALGIN(4)

              __bass_start = .;

              .bss : {*(.bass);}

              __bass_end = .; 

         }

 

   从这边配置文件你可以看出,我们定义了自己的段 user_sigment. 当使用自己编写的连接的脚本后,我们就可以定义一些段。非常方便。有的时候你可能要在没有操作系统上调试一些程序,这半个时候连接的程序是不能运行的,因为使用 arm-linux-gcc 编译 和使用arm-linux-ld 连接的后的可执行文件是 ELF 格式。这个是Linux 系统下可执行文件格式,可是我们现在还没有系统,你想能运行吗?所以还要进行相应的去ELF 头工作:

一般我们用:

 

        arm-linux-objcopy  xxxx -O binary xxxx.bin

 

这个时候 xxxx.bin才是我们arm 能运行的格式。我们可以通过u-boot 的 tftp功能下载到我们内存中运行。

 

 eg :  tftp 0x30000000 xxxx.bin

       go 0x30000000   

阅读(1223) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-10-31 19:00:37

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com