2009年6月18日 星期四

作業五~作業七 + Final Project

hw5_KGDB
hw6_pthread
hw7_uCOSII
OS_final_project


hw5_KGDB:
先clone一個Fedora 8(用Fedora8的步驟比Fedora 10簡單方便)
設定serial port,virtual box的設定比較麻煩,請看下圖

(感謝TaiZai提供)

使用 cat/dev/ttyS0 及 echo [TestMsg] > /dev/ttyS0 測試serial port
下載Linux source,修改make menuconfig
make ; make modules ; make modules_install ; make install
把產生出來的三個檔 vmlinuz-~、initrd-~、System.map-~丟到target端
修改menu.lst開機選單,兩邊都重開,之後host開始對target做debug
gdb /linux-~下的vmlinux
用 l 跳到程式碼區,用 p 印出參數的值就結束。

hw6_pthread:
這個作業使用QT就滿分,感謝強者我同學指導。
對於動作要用slot來控制動作發生時的反應,使用socket來處理連線,對於一個狀態下

如果沒有用QT的話就要處理critical section的問題,要防止兩邊同時對socket寫入及印出。
傳送檔案的時候要先告知對方檔名或是順便告知檔案大小,傳檔時要對訊息的header特別處理以免被誤認為是一般文字。

hw7_uCOSII:

先修改 C:\SOFTWARE\uCOS-II\Ix86L\BC45\OS_CPU_A.ASM 當中,把原來的TickISR改成自己寫的HackISR,在HackISR中寫要CALL的C function
在 C:\SOFTWARE\uCOS-II\EX1_x86L\BC45\SOURCE\TEST.C 當中寫要被CALL的C function,內容自訂,可以加上顏色,顏色的宣告要自己找,不過基本上都差不多,BGND是背景,FGND是前景的顏色,BLINK好像是變亮,例子:
PC_DispStr( 0, 4, " Hello! OS HACKED!! Hello! OS ", DISP_FGND_WHITE + DISP_BGND_PURPLE + DISP_BLINK);

我的結果:
OS_final_project:
這個也是開學講過的systemtap,不過這次要求要trace深一點,我一開始不會做,照著reference上面的網址,對一個system call會經過的特定路徑有的kernel function來trace,不過深一點的比如說set一個buffer由於不是kernel function因此就抓不到了,同學說似乎是要去該function所在的地方去trace才能trace到完整的流程。
一開始丟oslab上面的測試code去追蹤do_fork這個function還想說他怎麼卡在那邊很久都沒結果,
後來才知道要觸發才會有東西跑出來,我做的是 sys_sync (同步),測試方法很簡單,就打sync這個command就好了。
如果不確定什麼時候要開始打,可以在用systemtap的時候加上-v的參數,看到Pass 5: starting run就可以開始輸入了。


沒有留言:

張貼留言