作者JUSTLOVEAYU (海费尔)
看板LinuxDev
标题Re: [问题] 自行编译cross compiler
时间Sat Jan 22 22:34:10 2011
※ 引述《JUSTLOVEAYU (海费尔)》之铭言:
: 标题: [问题] 自行编译cross compiler
: 时间: Wed Jan 19 19:09:38 2011
:
: 这二天我在编译新的cross compiler,因为我想把PXA270版子所附赠的toolchain做更新
:
: 我是按照以下网址做
:
: http://ccwang-jay.blogspot.com/2010/09/arm-gcc-toolchain-cross-compiler-for.html
:
: 刚刚终於搞定了
:
: 结果我把编译好的程式(简单的hello world)拿到PXA270版子上执行
:
: 结果显示 Illegal Instruction,请问为什麽会这样呢?我缺少什麽东西呢?
:
: 上面做出来的compiler不是全部嵌入式平台通用的compiler吗?
:
: 有人可以指导我一下吗?
:
: 谢谢!
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 140.125.45.103
: → dakiyo:check ISA version 01/19 21:55
: → JUSTLOVEAYU:请问从哪边去check ISA version? 01/19 23:02
: → rawpacket:先 file 一下你的执行档看是不是 for ARM 的. 01/20 00:01
: → JUSTLOVEAYU:the message is:a.out: ELF 32-bit LSB executable, 01/20 00:53
: → JUSTLOVEAYU:ARM, version 1, statically linked, not stripped 01/20 00:53
: → JUSTLOVEAYU:看来应该有for ARM,接下来我该朝哪个方向去debug呢? 01/20 00:56
: → badwork:你是照网页教的用arm-elf-run ./hello来执行吗? 01/20 13:37
: 推 shaopin:我觉得从一开始"更新toolchain"这件事就有问题..why? 01/20 15:03
: → shaopin:去读ARM cp15的register就能独到ARM version 01/20 15:04
: → JUSTLOVEAYU:对,我是用arm-elf-run ./hello来执行,这样是ok的 01/20 16:54
: → JUSTLOVEAYU:後来我把hello执行档传送到板子执行却是出错的 01/20 16:55
: → JUSTLOVEAYU:因为厂商所附赠的cross compiler不支援gcc的某些参数 01/20 16:57
: → JUSTLOVEAYU:所以我才会想自行更新cross compiler 01/20 16:57
: → JUSTLOVEAYU:s大不好意思,现在在板子上执行hello都有问题了,更不 01/20 16:59
: → JUSTLOVEAYU:说是去读register了@@ 01/20 16:59
: 推 dakiyo:你是放到板子上的linux跑吗?如果是的话用arm-linux-gcc来编 01/20 22:30
: 推 askacis:EABI的问题?不知道原本的tool-chain版本是多少? 01/20 22:39
: → askacis:原po可以check一下kernel config里面, Use the ARM EABI 01/20 22:41
: → askacis:to compile the kernel这行有没有被勾选,没有的话把他开启 01/20 22:42
: → askacis:或者是用arm-linux-readelf -h 读一下你的hello的header 01/20 22:43
: → askacis:以及kernel的,看他们的Flag属性是不是一样... 01/20 22:44
: → askacis:如果kernel跟userspace的ABI介面不一样,userspace会有问题 01/20 22:47
: → JUSTLOVEAYU:是的,hello是在host端做编译,之後再把编译出来的执 01/21 01:16
: → JUSTLOVEAYU:行档放到板子上的linux跑 01/21 01:16
: → JUSTLOVEAYU:感谢楼上两位的指导,等我回LAB我再check看看 01/21 01:19
: 推 shaopin:也不用run linux, 你有debugger的话用jtag读就好了 01/21 11:09
dakiyo大,目前系统并没arm-linux-gcc,是否要去下载重新编译呢?
askacis大,原本的toolchain版本是arm-linux-toolchain-bin.4.0.2
另外,请问kernel config要从哪面看呢?是在menuconfig那里面看吗(编译kernel时)?
shaopin大,我没有debugger 冏
刚刚,我把hello.c分别使用两种不同的compiler去编译,一个是厂商附赠的,
另一个是我自已编译的,然後再用file指令去查看,我发现
使用附赠的compiler出现的讯息是:
ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared
libs), for GNU/Linux 2.4.3, not stripped
而使用我自已编的compiler出现的讯息是:
ELF 32-bit LSB executable, ARM, version 1, statically linked, not stripped
一个是dynamically linked另一个是statically linked
请问是不是这边出现了问题呢?如果是的话,我该如何去修正呢?
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.125.45.103
1F:→ dakiyo:1.没错你要自行编译或网路上找现成的binary来编. 01/23 00:22
2F:→ dakiyo:2.make menuconfig完後,存档後的组态档叫.config(隐藏档) 01/23 00:24
3F:→ dakiyo:3.static和dynamic是指编译方式,差别请google去研究,你的问 01/23 00:25
4F:→ dakiyo:题比较像是我第一点提的,去找现成的编你的程式放上去看看吧 01/23 00:27
5F:推 askacis:看了原po的连结,才知道是拿arm-elf-gcc编出来的丢上板子跑 01/23 01:09
6F:→ askacis:这样自然是不行啦XD,原po要自己作cross compiler应该是要 01/23 01:09
7F:→ askacis:弄成arm-linux-gcc之类的才对~~ 01/23 01:13
8F:推 askacis:另外你的kernel也要用新的cross compiler重编过比较保险 01/23 01:16
10F:推 askacis:另rootfs里面的ld-linux.so.2等也要换成新tool-chain的... 01/23 01:43
11F:推 goldie:我觉得有现成新的就没必要自己编吧?(热血hardcore者除外XD) 01/23 01:54
13F:→ goldie:要在Linux上跑的就选GNU/Linux版→All version→里面很多版 01/23 01:55
14F:→ goldie:我用 2010q1-202 没遇到啥问题 01/23 01:56
15F:→ JUSTLOVEAYU:不好意思,请问a大,arm-elf-gcc是我照那个网页做出来 01/23 14:52
16F:→ JUSTLOVEAYU:的,应该算是我自已做出来的cross compiler吧@@? 01/23 14:53
17F:→ JUSTLOVEAYU:而你这句,原po要自己作cross compiler应该是要弄成 01/23 14:54
18F:→ JUSTLOVEAYU:arm-linux-gcc之类的才对,我不太懂你这句话的意思 01/23 14:56
19F:→ JUSTLOVEAYU:因为我也是把几个套件一一做结合,这样弄出来不算是自 01/23 14:57
20F:→ JUSTLOVEAYU:已的cross compiler吗?,另外,再次谢谢大家的指导:) 01/23 14:58
21F:→ dakiyo:arm-elf-xx是for non-os的,你现在run在linux上当然就要用 01/24 01:07
22F:→ dakiyo:arm-linux-xxx的阿..重编很麻烦,去找现成的看看吧~ 01/24 01:08
23F:→ JUSTLOVEAYU:原来arm-elf-xx是 non-os 冏,现在我了解了,谢谢d大 01/24 01:18
24F:→ JUSTLOVEAYU:的指教:) 01/24 01:19
25F:推 i386:arm-elf-xxx不一定是for non-os的...主要的差别是library 02/08 11:22
26F:→ i386:arm-linux-xxx通常包的是glibc,arm-elf-xxx可能会是包uClibc 02/08 11:23
27F:→ i386:或者是newlib,不过这不是通则定论,因为cross-compiler的名字 02/08 11:23
28F:→ i386:可以在建立的过程中去更改的.. 02/08 11:24