作者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
→ dakiyo:1.沒錯你要自行編譯或網路上找現成的binary來編. 01/23 00:22
→ dakiyo:2.make menuconfig完後,存檔後的組態檔叫.config(隱藏檔) 01/23 00:24
→ dakiyo:3.static和dynamic是指編譯方式,差別請google去研究,你的問 01/23 00:25
→ dakiyo:題比較像是我第一點提的,去找現成的編你的程式放上去看看吧 01/23 00:27
推 askacis:看了原po的連結,才知道是拿arm-elf-gcc編出來的丟上板子跑 01/23 01:09
→ askacis:這樣自然是不行啦XD,原po要自己作cross compiler應該是要 01/23 01:09
→ askacis:弄成arm-linux-gcc之類的才對~~ 01/23 01:13
推 askacis:另外你的kernel也要用新的cross compiler重編過比較保險 01/23 01:16
推 askacis:另rootfs裡面的ld-linux.so.2等也要換成新tool-chain的... 01/23 01:43
推 goldie:我覺得有現成新的就沒必要自己編吧?(熱血hardcore者除外XD) 01/23 01:54
→ goldie:要在Linux上跑的就選GNU/Linux版→All version→裡面很多版 01/23 01:55
→ goldie:我用 2010q1-202 沒遇到啥問題 01/23 01:56
→ JUSTLOVEAYU:不好意思,請問a大,arm-elf-gcc是我照那個網頁做出來 01/23 14:52
→ JUSTLOVEAYU:的,應該算是我自已做出來的cross compiler吧@@? 01/23 14:53
→ JUSTLOVEAYU:而你這句,原po要自己作cross compiler應該是要弄成 01/23 14:54
→ JUSTLOVEAYU:arm-linux-gcc之類的才對,我不太懂你這句話的意思 01/23 14:56
→ JUSTLOVEAYU:因為我也是把幾個套件一一做結合,這樣弄出來不算是自 01/23 14:57
→ JUSTLOVEAYU:已的cross compiler嗎?,另外,再次謝謝大家的指導:) 01/23 14:58
→ dakiyo:arm-elf-xx是for non-os的,你現在run在linux上當然就要用 01/24 01:07
→ dakiyo:arm-linux-xxx的阿..重編很麻煩,去找現成的看看吧~ 01/24 01:08
→ JUSTLOVEAYU:原來arm-elf-xx是 non-os 冏,現在我瞭解了,謝謝d大 01/24 01:18
→ JUSTLOVEAYU:的指教:) 01/24 01:19
推 i386:arm-elf-xxx不一定是for non-os的...主要的差別是library 02/08 11:22
→ i386:arm-linux-xxx通常包的是glibc,arm-elf-xxx可能會是包uClibc 02/08 11:23
→ i386:或者是newlib,不過這不是通則定論,因為cross-compiler的名字 02/08 11:23
→ i386:可以在建立的過程中去更改的.. 02/08 11:24