2010年11月30日 星期二

[sheeva plug] compiler..

其實 sheevaplug 上 SD 卡在 uboot 下讀不出來的問題, 困擾了我很久, 有篇文章之前看過卻沒有看到文章裡的重點...
"Are you refer loading kernel give you crc error or compile give you crc error?
my gcc is armv5tel-softfloat-linux-gnueabi-gcc (Gentoo 4.3.3-r2 p1.2, pie-10.1.5) 4.3.3 I am not familiar the one you refer to. (I know nothing about compiler to be honest) what I did notice is that the code seems to be very sensitive what compile is used or toolchain. for example the one posted in this fourms does not work for me, I always get error during loading kernel in both FAT and EXT2 case, however I use the source compile myself it begin work for FAT (as EXT2 have bug in code so it does not work for me)"
我簡單翻譯一下. 如果 u-boot 是用 SDK 內的 arm-mv5sft-linux-gnueabi-??? 編譯的話, SDcard 讀取動作不管是 fat 還是 ext2 通通都會 fail, 但如果換成 armv5tel-softfloat-linux-gnueabi-gcc 的話, 以上的問題就解決了.

這還是後來客戶 email 給我一封信裡提醒了我這點, 但我去找 armv5tel-softfloat-linux-gnueabi-gcc 這個東西, 發現它好像是給 ARMv5 平臺專用的, 沒有看到可以在 x86 上跑的版本. 幾經搜尋我才發現到有這個社群專門在為 ARM 做跨平臺編譯套件, 包括 ARM 版的 fedora. 而使用它們做的 ARM compiler 後, 問題真的解掉了.

於是我講一下我在 CentOS 5.4 上用的做法, 其實很簡單, 比去 google 找那些問題簡單很多..
1.Marvell sdk 裡的 nativefs 跟 devfs 還是最好先編過一遍, 這時可以用 arm-mv5sft-linux-gnueabi- 的編譯器無所謂.
2.照網頁所寫的, 給 yum 安裝的參考網頁路徑.
3.直接 yum -y install armv5tel-redhat-linux-gnueabi-gcc 順路裝一大票亂七八糟相關套件.
4.Marvell 版 u-boot 3.4.27 (原本是 u-boot 1.1.4) 內 Makefile 裡, 搜尋 "arm-mv5sft-linux-gnueabi-" 找第二個前面 label 是 CSL 的 (在 2034 行付近, 不是前面那個) 改成:

CSL = armv5tel-redhat-linux-gnueabi-

這樣就好, 就可以回 u-boot 裡編譯整個 u-boot image. 但原本的 sdk 要留, 因為編譯過程中會 link 到那個 sdk 裡面的東西.

然後其它的套件可以依舊延用原本的 arm-mv5sft-linux-gnueabi-, 只有 u-boot 這個因為 code 的關係要改 compiler...

我還會再追蹤看看 u-boot 中是哪段 source 有問題, 畢竟裝好幾個 compiler 很不胡蘇...

2010年11月26日 星期五

Makefile for multi-job

一般 makefile 的寫法, 通常無法支援多個工作同時進行 (make -jN), 而 make 記得好像是 3.5? 版開始支援這個語法, 可以同時跑多個 make rule 完成整個專案. 不過我這裡講的是 c++ 用的:

我覺的 makefile 裡有幾個重點要貼到, 以下是我自己的例子:

EXEN = test
SRC = main.cpp timer.cpp
OBJ = $(SRC:.cpp=.o) ;//這地方會指定將哪些副檔名更名成哪種副檔名
.cpp.o:
$(CXX) $(CFLAGS) $< -o $@ ;// $< 這個就是整串字串裡逐項抓出..
$(EXEN): $(OBJ)
$(CXX) -o $(EXEN) $(OBJ)
all: $(SRC)
這樣可以視需要指派 make 一次要跑的 jobs 數量 (-jN, N是數字, 看你有幾顆CPU..)
也可以這樣取得系統內可用 CPU 數量:
CPUS = $(shell cat /proc/cpuinfo |grep cores|sort -u|cut -f2 -d":"|cut -f2 -d" ")

祝各位有幾顆 CPU 就打爆幾顆 CPU.

2010年11月17日 星期三

AMD CPU 送修

從不知道幾時開始, AMD 在臺灣不再接受 end user 送修, 必需由指定代理商返修. 原本的主角 9500 (barcelona, 有 TLB bug 那顆) 用原始頻率已經沒辦法跑 x64 win7 了, 於是送修... 不過那顆 CPU 是距今三年多一個月前買的, 也就是說原廠出廠日期到今天一定超過三年, 不過我在建達網站上查 (直接 key CPU 序號) 是還在保內, 於是就送修去, 光華新天地大樓六樓就有建達的哨點, 某天晚上就帶那顆 CPU 過去, 但是店員說, 我附的散熱器不對, 那是 939 用的, 不是 AM2 用的, 所以不收... 有圖做個比較:
最左邊那顆就是 939 用的, 當時還是 3pin 的風扇, 之後都改 4pin PWM 款的, 而且扣具也不再是塑膠桿, 而是兩條金屬壓條取代. 於是就打我槍了... 不過店員說, 送來光華也是要送去林口的, 你也可以自己寄去林口, 於是我拿了一張單子就走. 當天晚上從友人那再弄到一顆 AM2 用的散熱器後, 隔天填寫了一下單子一起寄去建達林口的據點, 但是, 我竟然連存根都一起寄出去 ~_~


寄去後, 建達並不會主動跟我聯絡說東西收到沒有, 而我害怕 "因為沒有留下存根, 無法證明寄出那顆 CPU 是我的" 這點, 就主動打電話聯絡建達問維修單號, 問到後, 原來東西已經收到而且在測試中了...
然後, 建達要換新品要貼錢這事也是幾天後我用單號去查, 才知道的... "換 X4 925, 貼 500" 我打電話去建達問, 才問到要怎麼匯款.... (要不然建達真的是完全安安靜靜的, 完全不聯絡...)

今天收到 CPU 了, 所以來拍拍照記念 XD

首先是封條...
這兩張圖是比較封盒貼紙的差別, 我買過 x6 1055T 跟 9500 的封條都有一點點的凸起, 很像鈔票印刷那種感覺, 而這顆 x4 大概是因為不到 4K NTD, 就很平淡無奇....

CPU正面來一張... 沒猜錯的話這顆是 C3 step 的...

這不是疊疊樂, 而是我覺的盒子越來越縮水了....

風扇也是很糟糕的款式.....

看看 1055T 用的, 差那麼多..... 雖然我 1055T 用的是 sonic tower..

然後這張貼紙 x4 925 也沒有.... 這張是 x6 1055T 的...


我想這顆用三年後再問建達有沒有保固, 大概會被罵吧 XD