binghelingxi 发表于 2007-10-30 20:14:26

linux系统下ELF编译探讨

http://www.uclinux.org/pub/uClinux/arm-elf-tools/arm-elf-tools-20030314.sh

网上查了一些资料。。。

ELF是一种规范化的文件格式,不但在windows可以用IAR编译适用于西机的ELF,其他操作系统,其他软件,在使用相同的开发库文件的时候,一样可以编译出适用于西机使用的ELF。。。
在linux下用readelf命令也可以清楚的观察到elf结构,我试了一下siehelpman.elf对照源码,很清晰。。。

目前我我看到的,似乎可以用的应该就是这条工具链arm-elf-gcc
http://www.uclinux.org/pub/uClinux/arm-elf-tools/arm-elf-tools-20030314.sh,这个应该就是我们需要的,具体我也不大懂,linux接触没多久。。。

这里有一个文档,里面有一些相关的内容,而我们在IAR下编译所使用的一些汇编语法也不能用了,如public,dcd,dcb这些都不能用了。

文档:
http://sieelf.googlecode.com/files/GNU之映象机理.pdf
——————————————
我知道的就是这些了。。。http://mobile.0110.cn/images/smilies/default/titter.gif,总感觉linux下开发ELF更有前途,哈哈,请高手出马。。。

sigarron 发表于 2007-10-30 22:11:57

嗯。linux下貌似是要比iar方便的,但是编译器不确定。一般在linux下做嵌入式都有个仿真器或者telnet环境,但是sie上没有。。郁闷坏我了。。

sigarron 发表于 2007-10-30 22:22:14

倒。。回复后才发现是阿冰老大的沙发。。呵呵。。爽呆。。
之前我是用的motorola的e680i,顺便做e680i程序开发。。所以对linux环境应该还算比较熟悉。。(可以在百度搜索下我的ID呢。)

因为用了N年的战友E680I的触屏坏了,所以新来到了西门子的门下。288入手一台西门子M65

感觉不错。看到了熟悉的ELF文件,很很很很很很很熟悉。。
在LINUX下边,一般的可执行程序也是ELF格式的。

所以。貌似很有前途的说,不过毕竟M65上不是个完整的开放式系统,需要借助做好的API和BIG LIB才能艰难的进行程序开发。

LINUX里边编译的程序可以编译成不依赖库文件,即可以独立执行的程序。

嘿嘿。。。。

jpg001 发表于 2007-10-31 08:19:16

我也下了个Ubuntu,打算用下看看。很久以前稍微看过红帽的linux,感觉是超不好用,不知道这个怎么样。

不过硬盘都装满了,暂时找不到空间安装了。。

这些是ARM的汇编语法,linux本身的可执行elf用的是x86的汇编语法,指令集都不一样的,不过是形同质不同。只要支持arm的编译器,这些汇编语法就有用。

不过要先找到在linux下支持arm处理器的编译器。除了编译器特定的语法,相信源程序是不用大改的。这么多年了,不知道老外有没有在gcc中加入对arm指令集的支持的办法。也不知道iar有没有开发limux下的编译器。

binghelingxi 发表于 2007-10-31 10:23:48

工具用arm-elf-gcc应该是没有问题的,arm-elf-gcc对arm指令的支持也应该是没有问题的

只是那些编译器特定的语法声明之类的东西是不能用了,因此我们需要一些关于gcc中作汇编和c/c++编程的资料和经验,关键是作汇编部分的资料,和IAR的差异很大,

昨天尝试了一下,源程序基本没有问题,一些地方有警告,稍微修改就可以。。。

似乎GCC编译是会检查所有用到的文件中的内容,而IAR会忽略没有被程序调用的内容,下面是siehelpman的main.c,简单的检查了一下。。。bingk@bingk-desktop:/windows_e/svn/SieELF/SieHelpMan$ arm-elf-gcc m.c
In file included from png.h:378,
               from swilib.h:19,
               from m.c:1:
pngconf.h:288: Invalid token in expression
pngconf.h:523: Invalid token in expression
pngconf.h:534: Invalid token in expression
pngconf.h:596: Invalid token in expression
pngconf.h:622: Invalid token in expression
pngconf.h:660: Invalid token in expression
pngconf.h:667: Invalid token in expression
pngconf.h:692: Invalid token in expression
pngconf.h:729: Invalid token in expression
pngconf.h:733: Invalid token in expression
pngconf.h:806: Invalid token in expression
pngconf.h:812: Invalid token in expression
pngconf.h:1296: Invalid token in expression
In file included from swilib.h:19,
               from m.c:1:
png.h:741: Invalid token in expression
png.h:1046: Invalid token in expression
png.h:1218: Invalid token in expression
png.h:1310: Invalid token in expression
png.h:1549: Invalid token in expression
png.h:1554: Invalid token in expression
png.h:1594: Invalid token in expression
png.h:1639: Invalid token in expression
png.h:1903: Invalid token in expression
png.h:1909: Invalid token in expression
png.h:1915: Invalid token in expression
bingk@bingk-desktop:/windows_e/svn/SieELF/SieHelpMan$ 对func.asmbingk@bingk-desktop:/windows_e/svn/SieELF/SieHelpMan$ arm-elf-gcc f.s
f.s: Assembler messages:
f.s:2: Error: bad instruction `elf_begin '
f.s:4: Error: bad instruction `arm '
f.s:5: Error: bad instruction `kill_data '
f.s:8: Error: bad instruction `seqkill '
f.s:14: Error: bad instruction `a EQU b'
f.s:15: Error: bad instruction `endm '
f.s:17: Error: bad instruction `end '
bingk@bingk-desktop:/windows_e/svn/SieELF/SieHelpMan$ 相当需要一位精通linux下编程的大侠指导一下

binghelingxi 发表于 2007-10-31 10:26:17

3楼可以提供一些编程实例否?
或者是相关经验?

http://mobile.0110.cn/images/smilies/default/finally.gif过swilib不是绝对不能少的。。。

sigarron 发表于 2007-10-31 12:01:55

e680i的编程是比较容易的,写好C代码之后用GCC编译,然后链接,就可以执行了,

moto e680i是arm9的处理器,貌似西门子m65是arm4的处理器,所以指令集上应该相差不大吧。。

我的QQ是27384387,期待阿冰能够指导下,让我也入门西门子的ELF设计吧。我相信在LINUX下的设计会要很好的。。。

sigarron 发表于 2007-10-31 12:06:08

在linux下并不只有gcc编译器的,里面有as编译器来负责asm部分,g++和GCC负责C/C++
还有其他的编译器我暂时没有接触。呵呵。不好意思。。我以为那个asm文件应该用as编译器吧

binghelingxi 发表于 2007-10-31 12:16:01

M65的CPU数ARM9的

你可以加这个QQ群46284079
一些源码你可以看我们的项目,SIEELF,也可以参考置顶的索引帖

根据一楼的文档看,.s文件是可以用arm-elf-gcc编译的,我是把func.asm改名为f.s的,而且从报错上来看,并没报"BX"之类的指令错误

一楼的那个文档是相当不错的。。。其中降到的.ld连接文件,大概就是相当于我们的.xcl文件

binghelingxi 发表于 2007-12-3 20:56:37

这几天继续看了一下。。。

目前的几个问题。。。
1.连接文件如何写。。。
2.:::
gcc不支持__swi关键字,所以swilib中的调用手机内部函数看来要用汇编写了。。。如asm("swi 0x101")

我上面的错误是由于库文件的书写问题造成的。。。没什么关系。。。

binghelingxi 发表于 2007-12-4 10:37:46

http://bbs.0110.cn/images/smilies/default/ee.gif

http://mobile.0110.cn/images/smilies/default/ee.gif

我试了试用wine模拟。。。效果还不错。。。IAR编译没有问题,IDA反汇编也好。。。

clxer 发表于 2007-12-13 20:23:45

原帖由 jpg001 于 2007-10-31 08:19 发表 http://mobile.0110.cn/images/common/back.gif
我也下了个Ubuntu,打算用下看看。。。

这些是ARM的汇编语法,linux本身的可执行elf用的是x86的汇编 ...
linux并不限于x86,linux可以工作的平台很多,包括arm、mips、x86、powerpc、power6等等,hp h4700 pda 都可以运行gentoo,moto的linux运行的是motavista linux

xuxu121 发表于 2007-12-16 18:53:43

关键是chaintool(可能拼写错误)的获得。
65系列用的都是ARM926EJS,在linux下应该没有问题,但是,我觉得,只要可以编译代码,在什么平台下没有关系的
页: [1]
查看完整版本: linux系统下ELF编译探讨