Re: [問題] 自行編譯cross compiler

看板LinuxDev作者 (海費爾)時間14年前 (2011/01/22 22:34), 編輯推噓6(6022)
留言28則, 5人參與, 最新討論串2/4 (看更多)
※ 引述《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

01/23 00:22, , 1F
1.沒錯你要自行編譯或網路上找現成的binary來編.
01/23 00:22, 1F

01/23 00:24, , 2F
2.make menuconfig完後,存檔後的組態檔叫.config(隱藏檔)
01/23 00:24, 2F

01/23 00:25, , 3F
3.static和dynamic是指編譯方式,差別請google去研究,你的問
01/23 00:25, 3F

01/23 00:27, , 4F
題比較像是我第一點提的,去找現成的編你的程式放上去看看吧
01/23 00:27, 4F

01/23 01:09, , 5F
看了原po的連結,才知道是拿arm-elf-gcc編出來的丟上板子跑
01/23 01:09, 5F

01/23 01:09, , 6F
這樣自然是不行啦XD,原po要自己作cross compiler應該是要
01/23 01:09, 6F

01/23 01:13, , 7F
弄成arm-linux-gcc之類的才對~~
01/23 01:13, 7F

01/23 01:16, , 8F
另外你的kernel也要用新的cross compiler重編過比較保險
01/23 01:16, 8F

01/23 01:36, , 9F
http://tinyurl.com/4lchuyr ,人家直接編好的...
01/23 01:36, 9F

01/23 01:43, , 10F
另rootfs裡面的ld-linux.so.2等也要換成新tool-chain的...
01/23 01:43, 10F

01/23 01:54, , 11F
我覺得有現成新的就沒必要自己編吧?(熱血hardcore者除外XD)
01/23 01:54, 11F

01/23 01:54, , 12F
我也是推薦直接拿CodeSourcery編好的 http://goo.gl/tsGB
01/23 01:54, 12F

01/23 01:55, , 13F
要在Linux上跑的就選GNU/Linux版→All version→裡面很多版
01/23 01:55, 13F

01/23 01:56, , 14F
我用 2010q1-202 沒遇到啥問題
01/23 01:56, 14F

01/23 14:52, , 15F
不好意思,請問a大,arm-elf-gcc是我照那個網頁做出來
01/23 14:52, 15F

01/23 14:53, , 16F
的,應該算是我自已做出來的cross compiler吧@@?
01/23 14:53, 16F

01/23 14:54, , 17F
而你這句,原po要自己作cross compiler應該是要弄成
01/23 14:54, 17F

01/23 14:56, , 18F
arm-linux-gcc之類的才對,我不太懂你這句話的意思
01/23 14:56, 18F

01/23 14:57, , 19F
因為我也是把幾個套件一一做結合,這樣弄出來不算是自
01/23 14:57, 19F

01/23 14:58, , 20F
已的cross compiler嗎?,另外,再次謝謝大家的指導:)
01/23 14:58, 20F

01/24 01:07, , 21F
arm-elf-xx是for non-os的,你現在run在linux上當然就要用
01/24 01:07, 21F

01/24 01:08, , 22F
arm-linux-xxx的阿..重編很麻煩,去找現成的看看吧~
01/24 01:08, 22F

01/24 01:18, , 23F
原來arm-elf-xx是 non-os 冏,現在我瞭解了,謝謝d大
01/24 01:18, 23F

01/24 01:19, , 24F
的指教:)
01/24 01:19, 24F

02/08 11:22, , 25F
arm-elf-xxx不一定是for non-os的...主要的差別是library
02/08 11:22, 25F

02/08 11:23, , 26F
arm-linux-xxx通常包的是glibc,arm-elf-xxx可能會是包uClibc
02/08 11:23, 26F

02/08 11:23, , 27F
或者是newlib,不過這不是通則定論,因為cross-compiler的名字
02/08 11:23, 27F

02/08 11:24, , 28F
可以在建立的過程中去更改的..
02/08 11:24, 28F
文章代碼(AID): #1DEkhaSu (LinuxDev)
討論串 (同標題文章)
文章代碼(AID): #1DEkhaSu (LinuxDev)