November 23, 2006

How To - VxWorks CLI security

Filed under: 電腦記事 — afoofa @ 2:30 pm

今天研究出來的功能,是關於如何在VxWorks的console端加上login/password的步驟進到系統。

講這個功能以前先提一下VxWorks的telnetd也可以有這個功能,而且簡單許多, 只要打開INCLUDE_SECURITY相關的Flag(可以參考vxworks_programmers_guide)。還有一些相關的設定,例如login table的初始以及如何新增一組帳號、密碼。

我讓console端的login功能和telnetd採用的是同一套,減少維護帳號密碼的成本。說穿了很簡單,首先把 console的shell關掉(參考google groups的這篇討論來做),然後啟動login/password功能(參考google groups的這篇討論來做),login成功再把shell打開。

會用到的function有ioTaskStdSet(), taskNameToId(), 其實還有一些不足的小地方,剩下的麻煩自己測試/修改囉。

這麼簡單的東西,我竟然花了三天才作出來?老實說,要不是學長丟給我google.groups的網址,我現在應該還在vxworks文件裡面遊蕩吧。

我現在遇到一個奇妙的問題, 就是security的功能啟動之後,我用telnet連線進去,不能用ls看到原本應該看到的、在PC上的檔案列表。不知道是不是security的功能打開之後和ftp client的功能互相衝突呢?這樣我不就不能作遠端upgrade了…

October 28, 2006

COSCUP 2006 參後感

Filed under: 亂記, 電腦記事 — afoofa @ 11:16 pm

今天跟寶貝一起參加COSCUP 2006,算是小有收穫吧!

早上聽中文輸入法,對輸入法的理論與實作都有進一步的了解,不過講理論演算法的那一段我睡著了,呵呵。原來閩南語和客語輸入法是外國人在寫啊,這個外國人真有心耶~

早上的茶點還蠻不錯的,是小蛋糕和雜糧麵包。中午的便當也還ok,有點太油就是了。

終於見到久仰大名的Gene(貘), 感覺就是很nice的人~ :D

下午聽好多東西喔,而且我聽一聽又睡著了,不過聽到布丁人要表演吞布丁的時候我馬上清醒過來,上次OSDC沒親眼看見,這會兒補足遺憾了!不過看到中間我忽然覺得布丁人好可憐喔,所以一方面躲起來不敢看,可是另一方面又很想看他表演連續技…囧

然後有介紹網頁開發的一些技術,因為我興趣不大所以又睡又醒又打電動這樣,整個就是很廢的存在。偶爾偷看寶貝在irc上面跟別人聊天,我們今天也是閃亮亮的閃光彈一枚。 *^O^*

下午有茶點,晚上又有buffet,真是不錯吃耶!因為赤字的關係,寶貝捐了五百元~現在想想五百元兩個人吃了一整天,好像還挺便宜的呢。 :)

雖然我平常沒在碰這些東西,聽得有一搭沒一搭,可是看寶貝很開心,他有很多朋友在這裡,所以我也很開心囉~ *^^*

October 24, 2006

論文發表+1

Filed under: 亂記, 電腦記事 — afoofa @ 10:40 am

昨天資策會的人通知我,我的碩士論文投到ISBAT 2006(International Symposium on Broadband Access Technologies in Metropolitan 2006),論文名稱"An Implementation of IEEE 802.16e General Handover Emulator",但是沒有人去報告,因為論文註冊費就要3萬(資策會出錢),會議在加拿大舉行,飛機票還要另外算,所以只請一位資策會的人員到場撥放投影片。

我拿到論文電子檔打開來看嚇了一跳,總共只有三頁!我畢業的時候有做one column的版本,刪來刪去最後還剩十幾頁呢,博班學長好強竟然能弄成三頁(我這次沒出手,完全就是論文上了才被通知的) XD
不知道IEEE Xplore什麼時候才查得到~我現在已經沒有學校資源供查詢,不過這是我人生中發表的第三篇論文,非常開心。 :D
資策會的人說我既然發表這麼多篇(竟然被他發現我另外兩篇論文),有沒有意思再攻讀博士,可是我想了想,最主要是我沒什麼耐心,而且頭腦有點僵化,想不出什麼重大變革的idea,趁現在還年輕,搶錢比較要緊,以後再弄幾個榮譽博士學位也未嘗不可。 :p

所以現在要努力闖出個名聲,以後大家就知道榮譽博士的缺要找我去補啦,哈哈哈~

August 16, 2006

聽說寫driver是一件很xxx的事…

Filed under: 職場經驗, 電腦記事 — afoofa @ 9:48 pm

今天學長跟我們分享寫driver的經驗,他說:

如果是寫windows的driver還算OK,因為chip都有統一的標準,所以學會一種,其他的很快就上手。在這種情況下,windows才是老大,不遵守windows的規定,chip就會賣不好。

可是embedded system的chip各家爭鳴,沒有一個統一的規格,chip的design不一樣、optimization作法不同、甚至流程都不一樣。所以這裡好不容易搞定一個,下次遇到不一樣的chip,全部都要重弄,沒辦法包成library重複使用。

再加上寫driver只有spec.可以看,沒有說明文件,沒有好用的debug tool,只能一直測測測測測,有時候測出問題,也沒辦法確定是hardware還是driver出錯,只能用各種方法try(考驗想像力?)。或是自己測沒有問題,送到客戶那邊才又被退貨,因為客戶使用的data我們剛好沒測到之類的。有時候發生問題,但不會造成當機,只是performance會變差,又只有在很小的機率會遇到這樣的情況,所以很難debug。

如果沒有電機背景的話,對硬體架構、流程不熟悉,寫driver就變得吃力了。

就因為寫driver需要電機背景、會coding,也許再加上一點經驗,所以很少人會。(原來是這樣!~)

也因此寫driver的人通常要價都比一般的工程師高,

所以,聽說寫driver是一件很賺錢的事?

難怪MIT要把EE和IE合在一起。

June 5, 2006

Frequency Reuse - from WiMAX Forum

Filed under: 電腦記事 — afoofa @ 3:57 pm

早上程式寫到一半,老師走進來要我看懂三頁東西,是講關於 Frequency Reuse的,這是某篇文章的一小部份,我只知道是從WiMAX Forum來的。

內容提到現有的Frequency Reuse是讓one deployment(includes many cells or sectors)使用同一個frequency以提高utilization的技術,會讓一個cell的edge user因為和其他cell重疊而容易發生 CCI(Co-Channel Interference)而擁有較差的channel quality.

所以文章中提到要修改分配subchannel的方式,用以下兩個方法:
1. Segmentation:一個segmentation包含數個或所有的subchannels,
2. Permutation Zone:在DL或UL的frames中將OFDMA的symbols加以排列,
使用上述的方法,讓每個cell的central user可以使用到full load frequency reuse,而edge user只能使用到fractional frequency reuse,並且以此減低CCI的問題。

文章更提到,可以依據整個network或是各個cell的loading/interference情況,動態調整segmentation和permutation的值,以達到frequence reuse效益的optimization。

文中的subchannel是什麼呢?一個frequency底下可以切出許多subchannel,這是OFDM的技術,也許還有搭配CDMA的技術來達成吧。那麼segmentation是怎麼用的呢?我猜測是讓每個cell 的 edge user能使用的 segment包含的subchannels與相鄰cell的edge user的segment不會有交集,如此就可以避免 CCI。而central user因為不會有衝突的可能,所以可以使用全部的subchannels。

permutation是什麼?我看不懂。因為文章中提到的OFDM symbols我不知道這是作什麼用的。但我猜是要廣播讓所有user知道的一項資訊,讓使用對應的 symbol 的user在指定的時間使用channel。

最後,因為文章說,可以動態調整參數,所以老師說,這個應該是可以切入研究的題目。

但這是一項cross-layer的技術,因為要依據mac layer或更上層的資訊去調整physical layer的資源,我想應該還蠻複雜的吧,也可以說是蠻抽象的。

以上是我個人對這一小片段文章的解讀,如果有謬誤的話,請不要見怪,並多多指教 @@

May 26, 2006

終於,完整了

Filed under: 電腦記事 — afoofa @ 1:01 am

今天一直ㄍㄧㄣ到晚上十點多,終於把Handover+Tunneling的功能作完了,我的論文總算可以開始動筆。
不過還有一點小bug待修,決定先回寢室好好睡一覺,明天稍微改一下應該就沒問題了。

打電話跟寶貝說的時候,寶貝好像比我還興奮呢!之前我總是擔心寫不完,那麼難過好像笨蛋一樣,看到資料正確無誤地顯示出來的那一瞬間,我彷彿看見一道白光,整個LAB變得明亮起來,我覺得我的人生觀徹底的改變了!

不過,這個禮拜的大瞇聽得知一個很糟糕的消息,就是碩二全員要把自己的研究成果做成海報參加系上的競賽,要在畢業典禮之後的某一天公開展覽,還要在現場解說,而且報名期限就在6/9,老闆說他要強迫我們全部都參加,所以除了趕論文之外,還要趕海報製作,好像小學作科展一樣啊,真詭異。

還剩下兩個禮拜,希望一切順利(祈禱ing)。

May 24, 2006

BCB - Socket 的 property - Blocking v.s. NonBlocking

Filed under: 電腦記事 — afoofa @ 11:24 pm

因為我必須用一個Client Socket 以跑 loop 的方式傳同樣的一份資料給很多個neighbor BSs,所以遇到了這個問題。

 Encode_DATA();
for(i = 0; i < neighbor_number; i++)
{

Socket->Address = Neighbor_DB[i].IP_Addr;

Socket->Port = Neighbor_Port;

Socket->Open();

Socket->SendBuf(&Data_Buf, Data_length);

Socket->Close();

}

起初,兩台BS互傳,接收端沒有收到任何東西,所以把socket轉向到我寫的echo server去,但echo server也是什麼都沒收到,還試過一次傳很多資料(怕是有buffer住的情況),也試過用另一個socket傳送(還是失敗了)。

陷入困境,開始把程式碼到處亂移,把不必要的部分全部註解掉,甚至把loop也註解掉,結果最後發現,連續傳送兩次的話,只有第二次送出的資料會傳到echo server,又進一步發現,只有偶數次的傳送會成功,雖然是一大發現,但還是摸不著頭緒。

發呆,亂晃,隨手開了BCB的Help逛逛TClientSocket的各種Methods看看有沒有出清buffer的方法,結果沒有。再看看一堆Property,忽然看到ClientType的值分為Blocking和NonBlocking,隱約覺得:「好像就是這個。」

 Description裡面說,NonBlocking是讓Socket的讀、寫動作不會讓程式的運作中斷,在我的想法又可以解釋為,讀、寫的動作不會馬上執行,而可能會先執行後面的程式碼,所以我的Socket->Close()可能比Socket->SendBuf()還先執行,那想當然資料送不出去囉。

而設定為Blocking,便可以使Socket的任何讀、寫動作先中斷程式的進行,等讀、寫動作完成之後,程式再繼續跑下去。果不其然,這個bug莫名其妙的解決了…

 補述:

後來用google查 socket, nonblocking 找到 gracefully close socket的方法,就是在Socket->Close()之前先寫一個Socket->OnWrite,這會讓socket在關閉之前把資料清出,這應該是比較正確的解決方式。

May 11, 2006

視窗程式有哪些好的debug方法?

Filed under: 電腦記事 — afoofa @ 5:28 pm

因為接手兩支上萬行的程式互相丟資料,其中又有定期廣播的動作,所以每次debug都要重開兩支程式,如果一行一行trace,還會被那些解讀封包的functions煩死,根本跑不到想要偵測的部分。

如果能知道出錯的檔案行數,就很容易解決,多半是變數沒有處理好,程式邏輯的錯誤我還沒有遇過。

可是今天發生的錯誤都是直接跑出組語和記憶體位址,程式畫面爛掉不給看,所以印出來的訊息都看不見了,找不到出錯的關鍵點,花了一整天在縮小錯誤發生的可能範圍。

還好最後讓我找到問題了,問題出在我另外寫的echo server,因為是拿以前寫的shell server改過的,裡面會去把’\r’和’\n’切掉換成’\0′,資料出去的和進來的長度不一樣,但是header顯示的資料長度還是原來的,所以就導致之後的讀取動作會讀到不該讀的地方。

搞了一整天,尤其明天就要demo的壓力,讓我差點就要砸電腦了。不過,總算是自己想到問題發生的地方,算是不幸中的大幸吧,希望我接下來的工作,不需要很順暢,但總能在時限之前完成,這樣我就心滿意足了。

今天整天發瘋,坐在我旁邊的wenjen都看在眼裡。解決bug明天可以順利demo很開心,就告訴wenjen我是怎樣找到bug,聽完bug的原因之後,她說了一句讓我很囧的話:「接到手上的程式本來是可以跑得很順的,所以之後會出錯一定都是自己寫錯。」

不過話又說回來,昨天為了一個很誇張的bug也是差點要砸電腦,只因為一個 bool 變數,指令明明是寫 inUse = false, 可是 inUse卻變成 true,害我也是花了好久的時間在程式碼一行一行trace,等到發現這個狀況的時候真是哭笑不得,學長把指令換成 inUse = true,inUse還是變成true,用false也是true,我跟學長都覺得莫名其妙,最後就寫inUse = 0 將這個bug宣告法定死亡了。

只是,我還有很多 bool 變數,我彷彿看見明天 demo 完之後的第二階段 debug 無間地獄正在向我招手哪…

April 24, 2006

如何在BCB動態產生timer

Filed under: 電腦記事 — afoofa @ 4:37 pm

看到的參考範例是這樣:

void __fastcall Form1::Button1Click(TObject *Sender) { 
   // 動態產生Timer
   TTimer *NewTimer = new TTimer(this);
   NewTimer->Interval = 100;
   NewTimer->Enabled = true;
   NewTimer->OnTimer = GoTimer;
   Timer1 = NewTimer;
   NewForm->Show();
}

//————————————–­–
void __fastcall HTTPThread::GoTimer(TObject Sender) {
   ProgressBar1->Position++;
   if(ProgressBar1->Position==ProgressBar1->Max) {
      ProgressBar1->Position= 0;
      Timer1->Enabled = false; 
   }
}

從這個例子學到怎樣assign trigger function到new出來的timer,以及timer可以把自己的Enabled變成false。

所以其他的VCL元件應該也都是類似的方法在產生吧…

Thread如果要動態產生就不是這樣簡單了,不過目前還沒有需要用到,所以先不研究。

但如果我動態產生的timer個數是變動的,且每個timer被分配要控制的元件也是動態決定的,我要怎麼去寫這個trigger function 呢… @@

看樣子還得寫「管理一群timer」的function和database才行了,唉。

April 21, 2006

把VC的.dll拿到BCB上使用…

Filed under: 電腦記事 — afoofa @ 12:30 am

看到寶貝的今日連結忽然很多東西想寫,寫在comments好像太擠了,所以決定自己寫一篇記錄一下。

因為要在WLAN的環境上模擬802.16e的handover,老師說盡可能仿真,所以需要抓無線網卡的訊號強度等資訊,Windows XP內建的無線網路控制就可以看訊號強弱,所以應該是有API可以用,也真的讓我找到一個,叫做WRAPI,可以在Windows XP上運作,可是在download頁面發現它是在Microsoft Visual Studio上開發的….能不能直接拿到BCB上面用,不知道~

問了學長之後,得到一個Borland介紹DLL的網頁,先把文章大概掃一遍,內容實在很多,我只挑重點看,重點就是 Visual C++ 和 BCB 的 .lib 格式不一樣,命名規則也不一樣,在文章中的「在Borland C++Builder 下 使 用Microsoft Visual C++ 所 編 譯 的DLLs 」這一行底下開始有很詳盡的說明,最後還有筆者的經驗指出要用VC製作.dll給BCB使用必須「抑制name mangling 的行為」以及「禁 止 輸 出 類 別 」。

看完了,先試試看 bin/tdump.exe,產生了一個文字檔裡面寫啥看不懂。
再試試 bin/implib.exe,產生了需要的.lib檔案,從BCB開啟project然後從Add加入,結果compile的時候出現linker error,說是格式不符。…..

接著寶貝又提醒我,在software requirement有提到Windows XP miniport drivers for the NIC 和 Windows XP DDK (driver development kit) …後者我在交大的機器找沒有~而且寶貝說要 Windows Server 2003 Service Pack 1 版本的 DDK 才好,我也不知道為什麼寶貝會知道。寶貝還說DDK可以在網路上免費申請,Microsoft就會寄來,只是不知道要等多久,所以就先不管它了。

嗯~以後還會用到嗎?不知道。

« Previous PageNext Page »

Freely hosted by Weblogs.us. Powered by WordPress. Theme by H P Nadig