2007年12月27日 星期四

聖誕夜驚魂

這全台僅有的活動, 已是外語學院的傳統了, 也吸引我每年都來參加. 專程從台南趕過來, 原班人馬我, 廖哥, 皓呆, 老伯, 育誠, 這次還加入許多新血, 都是lab的朋友.
一票難求的盛況, 不排個3小時是進不去的, 在門外當然是亂哈拉, 有這幾個好朋友在不怕冷場, 隨便個話題就笑翻了, 即使沒多大意義. 等了許久也輪到我們, 擺明就是進去惡搞的, 希望這次不要再破壞人家的道具.
阿嘉比較大膽走第一個, 對於未知的世界總是充滿畏懼, 儘管知道裡面都是人扮的還是會被嚇到. 不過照著固定的動線走, 少了點冒險個感覺, 燈光過於昏暗, 看不清楚用心的場佈小可惜. 我們太會拖了, 頻頻被趕, 看得出來他們生氣了, 有好幾隻還笑場 真的好可愛.

嘉義, 好久沒回去了, 比起台南的繁榮, 這邊的步調比較適合我, 至少有山可以看, 還有蘭潭 這個交情很深的地方. 文化路豆奶擔都有店面了, 真可說是看著他長大阿. 時間太晚了,沒到經國新城去探一下.
晚上住在宿舍, 幾個男人住一起不外乎就是亂, 啤酒罐砌成的牆壁, 地板舖滿巧拼, 充氣床墊, 給人一種悠閒放蕩的感覺. 一堆運動器材, 在宿舍沒事就鍊身體, 還有拳擊手套, 怪不得隔壁的宅宅看了都會怕. 好久沒用公共衛浴了, 想到以前洗澡都抓整群的, 大聲說話都沒人管.
man's talk~ 當晚聊到快天亮, 關起門來什麼都能講, 報了好多八卦, 久了沒見面我的思想都快跟不上他們.
一個什麼事都幹得出來的地方, 令人流連忘返.

2007年12月13日 星期四

Porting QT/Embedded-3.3.6 on PXA270

QT/Embedded 3.3.6
Cross-Compiler: gcc-4.0.2
以下流程為編譯QTE並驅動Touch Screen(尚未成功)

事前工作
編kernel時要加入touch screen及LCD module
->UCB1400 Touchscreen support
->LCDtype(MTLCD-0353224A 3.5 inches)

下載:
qt-x11-free-3.3.5.tar.bz2
qt-embedded-free-3.3.6.tar.bz2
tslib-1.0.tar.bz2

編譯Qt-X11 (後面會用到)
./configure -thread -no-xft -no-cups -no-stl -no-ipv6 -no-freetype -disable-opengl -disable-xml -disable-canvas -shared
make

編譯tslib (後面會用到)
將toolchain路徑加入$PATH
echo "ac_cv_func_malloc_0_nonnull=yes" > arm-linux.autogen
//解決rpl_malloc的error
CONFIG_SITE=arm-linux.autogen ./configure CC=arm-unknown-linux-gnu-gcc CXX=arm-unknown-linux-gnu-g++ --host=arm-linux --target=arm-linux --prefix=$PWD/_install
make; make install

編譯QT/Embedded
QTE對路徑要求嚴格,在target的library路徑需和編譯時的一樣,這邊預設為/opt/qte
為了讓QT支援Touch Screen
修改qte/src/embedded/qmouselinuxtp_qws.h, 加入
#define QT_QWS_IPAQ
#define QT_QWS_IPAQ_RAW

修改qte/src/embedded/qmouselinuxtp_qws.cpp, 指定TS的device node為/dev/ts
...
#if defined(QT_QWS_IPAQ)
# ifdef QT_QWS_IPAQ_RAW
if ((mouseFD = open( "/dev/ts", O_RDONLY | O_NDELAY)) < 0) {
# else
if ((mouseFD = open( "/dev/ts", O_RDONLY | O_NDELAY)) < 0) {
# endif
qWarning( "Cannot open /dev/ts (%s)", strerror(errno));
return;
}
...

將QT-X11編出來的bin/uic, bin/moc copy到 qte/bin底下
將tslib編出來的include/tslib.h copy到qte/include底下
修改qte/mkspecs/qws/linux-arm-g++/qmake.conf, 修改gcc為自己所用的
arm-linux-gcc -> arm-unknown-linux-gnu-gcc
arm-linux-g++ -> arm-unknown-linux-gnu-g++

開始編譯
./configure -thread -embedded ipaq -shared -depths 16 -no-cups -no-ipv6 -thread -no-gfx-qvfb -no-freetype -disable-opengl -disable-xml -disable-canvas -qt-libjpeg -qt-mouse-linuxtp -xplatform qws/linux-arm-g++ -L/tslib/lib -L/tslib/lib/ts -I/tslib/include -lts
make sub-src
-L接tslib的library, -I接tslib的include 編譯時一同加入
make完成在qte/lib下產生libqte-mt.so, libqte-mt.so.3, libqte-mt.so.3.3, libqte-mt.so.3.3.6, 前三個為link, 最後一個即為object檔

安裝到target
受限於空間的不足, 可以將object檔放在flash,再用link的方式完成
假設libqte-mt.so.3.3.6放在sda1的根目錄mount /dev/sda1 /mnt/sda1
ln -s /mnt/sda1/libqte-mt.so.3.3.6 /opt/qte/lib/libqte-mt.so
ln -s /mnt/sda1/libqte-mt.so.3.3.6 /opt/qte/lib/libqte-mt.so.3
ln -s /mnt/sda1/libqte-mt.so.3.3.6 /opt/qte/lib/libqte-mt.so.3.3

寫一個hello world放上去跑, 經測試可以正常顯示, 不過touch screen的部份不能使用, 目前僅能以外接滑鼠的方式來操控. (註: 執行程式前要記得export QTDIR=/opt/qte)

參考資料:
QT/Embedded-3.3.8初步交叉编译的完全整理
Qt-embedded-3.2.3到PXA270上的移植
Qt/Embedded 2.3.10 到PXA270上的移植

TSLIB相關資料:
QTE與觸摸屏
tslib 1.4 - WeiBing
Qt-embedded-interest Archive - Touchscreen with qt examples?
Embedded Systems-GUI
tslib download and cross compile for arm

2007年12月12日 星期三

Porting MPlayer on PXA270

期末專題要在PXA270上實做一個播放器, 為了要能播mp3而且支援stream的形式選擇MPlayer. (MADPlayer 不支援stream, VLC太過複雜). 移植過程供大家參考.

Target: Create XScale-PXA270
Kernel: 2.6.15.3
Cross-Compiler: gcc-4.0.2
MPlayer-1.0rc2
libmad-0.15.1b (MAD: MPEG Audio Decoder用來mp3解碼)

事前工作:
toolchain路徑加入$PATH
編譯kernel時把audio相關的module一起編入
在target上建立device node (此為OSS預設的device)
mknod /dev/dsp c 14 3
ln -s /dev/dsp /dev/sound/dsp

編譯libmad
CC=arm-unknown-linux-gnu-gcc ./configure --host=arm-linux --prefix=$LIBMAD
make; make install
$LIBMAD為安裝library的目錄

編譯MPlayer
./configure --cc=arm-unknown-linux-gnu-gcc --host-cc=gcc --enable-cross-compile --target=arm-linux --enable-linux-devfs --disable-dvdread --disable-libdvdcss-internal --enable-fbdev --disable-mencoder --enable-liba52 --enable-mad --disable-libmpeg2 --disable-mp3lib --enable-static --disable-dvb --disable-dvbhead --disable-live --with-extraincdir=$LIBMAD/include --with-extralibdir=$LIBMAD/lib 2>&1 | tee logfile
make
--enable-static 用靜態編譯, 避免安裝library到板子上麻煩.
--enable-mad 採用mad的codec
--with-extraincdir 指向libmad的include
--with-extralibdir 指向libmad的lib
因為我只需要播放mp3的功能, 其他configure的參數就沒太理會, 其實大多可以disable. 只是過程可能會遇到error, 大部分都可以找的解決方法.
make 完之後在目錄下產生mplayer執行檔, 大概7mb, 可以用strip在將其大小縮減.

放到板子上測試
./mplayer -ao oss -ac mad test.mp3
./mplayer -ao oss -ac mad http://192.168.0.1/test.mp3
-ao指定device
-ac指定codec
經測試後播放時delay很嚴重,使用mad library來解碼,將浮點運算轉成整數運算,以滿足沒有浮點數運算的cpu,理論上應該很順才對.

補充: PXA270上對應的audio device node是/dev/dsp 需自行建立.

參考資料:
摩托學園討論區-embedded system
最新版本mplayer移植pxa270成功
MPlayer播放選項

2007年10月25日 星期四

happy hour

話說lab每月都有"娛樂時間",也就是花公基金去happy.這個月剛好是職棒總冠軍賽,提前定了票準備殺過去摟.老闆也是其中的一員,嘖嘖...坐在他隔壁應該會蠻悶的吧,只好來抽籤決定位子摟,幸好苦主不是我.

我沒特別支持那一隊,以前在經國新城的時候晚上常常會和阿銘,鬍鬚一起幫兄弟加油.這一場我們坐La new這邊,台南地主是統一,進去後才知道什麼叫主場優勢,統一的人不只坐滿外野還坐到我們這邊來,真可怕,一方面是因為統一3:1可能在今天拿總冠軍.


一個專業的球迷就是要拉拉棒,K牌交替使用,球迷文化是很深奧的,不同的打者有不同的吹奏聲,投進好球帶,上壘,得分加油方式也不一樣,抱歉我不夠專業,不過跟著人家喊也很過癮啦. 整場以拉鋸戰的形式演出,真的有緊張的感覺,而且都是全壘打得分氣氛high到爆.中繼投手鈴木誠球速一直飆到150,雖然還是一直被打安打,不過好在都是殘壘.

球場另一個焦點當然是啦啦隊,看現場就是不一樣,各個青春洋溢,又超會扭的,抱歉我沒辦法用詞語來傳達我的感覺,只能說前排觀眾真的賺到了.
八局的時候back to back成功超前對手,全壘打的選手把吉祥物丟上來,被我接著正著,運氣超好的 ^^b. 時間來到末局,工作人員開始發送氣球,是勝利的時候要放的.九局上在添兩分,註定要到澄清湖去迎戰了.

回家的路上遇到雙載的統一妹盯著我們看,拿出拉拉棒還有吉祥物挑釁她們一下,沒想到就真的尬起車來了,統一妹飆起車來挺快的還闖紅燈,真是熱血的球迷阿.

2007年10月14日 星期日

懇親

壽年哥最後還是免不了當兵的歷程,新訓兩個禮拜就是懇親日了. 經濟拮据的我本來還想用騎車,看在老伯面子上,少吃兩噸飯也要去,這本來就是自由心證的啦,也不用強迫別人來. 早上5點就得起來,前一晚看星光幫一直到12點半才睡,真的是在賣命阿! 秋季的早晨天色依舊昏暗,帶點微微的涼意. 早餐店老闆手腳真慢,一路趕趕趕的我的胃都痛了.車站前不見某人的身影,月台上笛聲響起,看著火車緩緩駛離.

懇親一定要帶肯德基,我們認真了.下了烏日站被迫搭上坑錢的小黃,一小小段的路程價格隨便他叫的,為了壽年的全家餐不管摟. 到了3號門時間也差不多10點了吧,聽噹說有男朋友在裡面的,早上六點就來排隊了,門一開就像搶頭香一樣瘋狂向前衝,第一個被領出來的大家一定會歡呼吧.

見到本尊還是一副無憂慮的樣子,好像不太操唷.現在都剩一年了,眼睛瞇一下就過摟,是這樣嗎? 年哥說他看到我們很感動,可是我從表情卻看不出來,聲音也沒變哽咽,可能他表達情感的方式不同吧. 說真的我覺得他家人準備不夠豐盛,當然不是我肚子餓想吃,這是面子的問題阿.開玩笑的說我當兵時一定要包一台遊覽車,從南到北接送同學來看我,並準備10鍋雞湯,當歸,四物之類的.

忘了說大師變fashion了,米嘟頭髮長的不像話也是fashion啦.大家都過的很好.

2007年10月9日 星期二

第二次值班

禮拜一是忙碌的開始,happy了兩天心情轉換也不是那麼容易,每次早上聽學長報paper一定會打瞌睡,儘管老闆就在我背後...下午值班有做粗工的感覺,颱風後的落葉夾雜著泥沙,一袋袋厚實,手都起水泡了就知道我多認真.衣服溼透了,不過事情還是要做,踩著腳踏車分送公文,行政大樓來往的正妹特別多,一不小心就上搭同一部電梯.尷尬的事情發生了,只見她摀著鼻子頭撇了過去,也不用這麼明顯吧,我的汗臭味,有種被汙辱的感覺-_-

晚上碰巧電腦教室又是我值班,一天的時間都奉獻在打工了.沒有網路的電腦教室最好有人會想來,睡了一覺還是空蕩蕩的一個人.八點也是該做正事的時候了,今天老闆放大絕,一連十封mail叫人吃不消,硬著頭皮做吧...待lab最晚的一次.

在學校有固定的收入,試著自給自足.開了一個戶頭,也開啟我投資的旅程,跟著阿銘一起學理財.上個月開始記帳,雖然生活費沒明顯減少(因為我是餐餐都得吃的人),至少能掌控金錢的流向.

2007年10月2日 星期二

第一次值班

今天是第一次值班,早上反覆看著工作流程,深怕會表現不好. 下午一點開始打掃系館四周,長期待在冷氣房關係,室外的溫度真不好受,沒流點汗怎麼算在工作,清潔我拿手的. 再來是信件分發,寄來的信分別投遞到各教授,實驗室的信箱.忙碌的星期一,一百多封的信件,分配到四十個多信箱,這個排列組合怎麼算?遇到學生的信還要先查詢所屬的實驗室,超過一半的信件是寫英文的,這是考驗耐心的時候. 很快的跑公文的時間到了,行政大樓在隔壁校區得用騎車的,投遞公文的櫃子也是含有全校各處室各系所,這是考驗眼力的時候. 再來又要收信,收公文,日赴一日循環著.

對於自己的表現算滿意. 就在一切美好的同時,卻犯了可笑的錯誤,記得關閉所有教室偏偏忘了系館大門,直到晚上吃飯的時候才發現,背脊涼了一下,大門難得這麼開,很容易就被注意到的,得趕緊求救系辦小姐,好在她肯送鑰匙過來,太感謝了. 賺錢不容易阿,得早點適應,畢竟一待有可能就是兩年.

最近總算適應lab的環境,能夠專注做研究,不再力不從心.當前還是以熟悉linux與8051為主,課程慢慢開始,再來也會有一些作業要應付了.

很多瑣碎的事,就算逃避也會有人來催促你.