2010年12月9日 星期四

static lib (.so) 製作

心情不好來寫點筆記....

這個 .so 很類似 windows 下的 DLL, 不一樣的是, windows 下被 link 的要是 .lib (雖然有些工具可以從 DLL 裡拆出 lib 檔出來, 但不一定 100% work) 才行, .so 是可以直接被 link 使用.

製作方法參考這裡, 只有幾點要注意..
1. soname 要是 lib 開頭如 libtest, 也就是說不管取什麼名字, 前面都必須要是 lib 開頭..
2. gcc 在最後做 link 時, 加上 -l???? 才可以找的到該 .so 裡的東西, 如上例就是 -ltest.
3. 做出來的 .so 一般都要擺在 /lib 或 /usr/lib 或 /usr/local/lib 裡, 或是用 export 指令去改:
export LD_LIBRARY_PATH=./

這樣去聯結自己的 .so library 檔案使用.

後記: .so (static object ) 跟 .DLL 當然是不一樣的, DLL 會把一些不用的 function 砍砍掉, .so 會全部留著, 外面能不能 link 的到那是你家的事 =_=

2010年12月8日 星期三

鐵吱銀行寫的東西, 看看就好..

究竟留在原東家好,或是勇敢找尋新舞台?綜合《華爾街日報》與《金融時報》報導、人資顧問,當出現以下五項徵兆,你就該跟原東家說再見了。

一、遠離目標、難激熱情。諮詢公司施普斯帝表示,如果你想成為團隊領袖,但直屬主管與老闆都不想幫你,就該換工作。但前提是,若能力比你更強的同事獲提拔,你最好學習新技能,而非負氣離去。

二、原地踏步、挑戰不足。如果工作變成例行公事,技能與職位都無法提升,員工將難保工作動力。職業倦怠難免,若主管不願放手授權,不如另尋出路。

三、主管刁難、傷害員工。蓋洛普蒐集兩萬名剛離職人員意見,75%是想離開老闆;獲慰留員工隔年仍有九成因「受不了上司」求去。《金融時報》建議,每個人都該先尋找共事方法,但若主管一再傷害員工信心,那就該另擇良木。

四、辦公室政治問題複雜。香港城市大學曾訪問逾六百名全職雇員的工作滿意度,發現打擊員工的頭號兇手竟是辦公室政治。《華爾街日報》說,辦公室政治難免,但當複雜的人際關係抵消專業能力的優勢,對員工弊大於利。

五、公司出現道德危機。當企業挑戰道德極限,如品質低劣、交期跳票、從事不法商業競爭,從上到下卻無動於衷,該趕快閃人;為敗德公司賣命,對個人職涯資產表百害無益。

ps. 不過, 104的新聞稿可信度一向非常的低, 我只是挑中間看起來梢微可信的東西貼上來..

2010年12月3日 星期五

一種感覺..

工作重不重要, 在於用什麼心態去做它. 而且, "自己" 就是一個招牌, 一個口碑, 而且做垮很簡單, 做好很難..

沒有足夠的時間驗證我這樣的想法對不對, 最少就現在所看到的, 有正面有負面, 負面就必需要有個挺自己的上司補足一些問題..

我是不知道, 我去重視做好自己的案子, 跟後來 embedded 的案子都轉到我這來有沒有關係就是.. ~_~

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

2010年10月25日 星期一

busybox 改 prompt

我用的 busybox 是 1.13.2 這版, 改預設的 shell (ash) prompt 字串..

busybox/shell/ash.c 1952 行附近

#if ENABLE_FEATURE_EDITING && ENABLE_FEATURE_EDITING_FANCY_PROMPT
vps1.text = "PS1=\\w \\$ ";
#else
if (!geteuid())
vps1.text = "PS1=# "; //自己高興改啥就改啥..
#endif

因為我在開機的 script 裡設 PS1 參數 ash 都不理我..