9.29.2006

Try Windows Live Blog Writer with Blogger Beta

 

Technorati tags:

不直接支援,在atom feed那一邊要自己加上blogger beta的atom link。

所以?這樣就可了嗎?

試試 tag:<pre>固定sourcecode</pre>

還有html mode,這樣就ok了 :)來段code:
#include %lt;stupid.h>
int main()
{
tab ok;
return;
}

如何?


好像不支援blogger beta的tag...我不知道要怎麼設 :P

9.27.2006

ARM MMU :Address Translation : Level One Descriptor

在ARM User Manual 上看MMU : address translation 時一直有一個疑問,作level one translation時:


mmu 的 TTB (translation base register) 內的bit 14-31


要轉換的address的 bit 20-31

組合成一個 30 bit的address
H  --------------------------L
[TTB 31-14] [ Address 20-31] 1. 0
這個位址就是level one descriptor。
descriptor的內容決定address要怎麼轉換。

問題是...address只有 30 bit呀,後面還有兩個bit怎麼辦?
都用 0 ? 那這個descriptor table不就不連續 ?

真蠢。

descriptor的size是32 bit,所以一個descriptor需要4 bytes。
最後兩個bit當然就不能用囉。


會被混淆的原因是 descriptor的內容,
剛好bit 0, 1 用作 traslation type 的id:
00 - Fault
01 - Coarse Page
10 - Section
11 - Fine Page

9.25.2006

CE : Kernel Startup Sequence and some others

在MSDN 這一篇:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnce50/html/ce50prev.asp
有說明 CE 的startup sequence..

從bootloader開始講,範例是ARM。
要配合BSP的code來看,BSP的code中,bootloader 依照boot flash type : NOR 或是NAND。而有不同。(BSP中有一個readme,說明boot environment: FLASH Layout)

NOR : EBOOT
NAND : STEPLOADER

EBOOT 就是 etherboot,支援download image from ethernet,writing to NANDFLASH。
(這個功能是因為demo board上有一個JMP可以設boot device : FROM NOR/NAND)。

STEMPLOADER是一個小size的bootloader,配合cpu NAND boot support的功能。boot時,cpu會從NANDFLASH讀取4k的data進入internal SRAM,再由internal SRAM boot。


Wakeup 和 Reset不一樣的地方在於Wakeup 時,SDRAM的內容是Sleep時的內容,沒有消失,所以只要適當將週邊再設定好,就可以回到當初sleep的狀態繼續執行。
Reset就不一樣。

這個bootloader的starup code要作的事情很多,因為不管是wake from sleep,reset 和WDT timout都是從這裡開始執行。
所以要判斷是wakeup,reset還是WDT,wake up的話,要check saved data是不是OK。restore saved data (CACHE/MMU control)。
WDT的話,要clear DRAM data。
reset的話,要將kernel從NANDFLASH load進來(C code)。


Bootloader的部份都是以EBOOT為範例解說。 -- 這部份略過,因為NAND FLASH不使用EBOOT作bootloader。

Kernel

由 Src\Kernel\OAL\Startup.s 開始。 負責hardware 相關的初始化(dram, cache...),最後計算好OEMAddressTable 的位置,當作是argument,呼叫KernelStart。
OEMAddressTable 宣告在Src\inc\oemaddrtab_cfg.inc。

KernalStart在MS的private code folder的armtrap.s(也就是說,其內容是不能在公開場合提及的)。在msdn這一篇 ( http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcecoreos5/html/wce50conNkexeBootProcess.asp ) armtrap.s 這一個assembly 不太好看,裡面包括很多部份,大部分是要setup MMU,所以有一堆Virtual, Physical 轉換。

ARM MMU architecture (furber P.302)

ARM MMU 使用 2-level page table和一個TLB(存放最近用過的translations)。
memory mapping的size可以有以下選擇:
  • Sections - 1M byte
  • Large Pages - 64K Byte,其中每16K byte又被分為一個sub page,可以分開控制
  • Small Pages - 4K Byte,分成 1K byte subpage
  • Tiny Pages - 1K Bytes tiny page
CE好像使用1M - Section.
所以oalAddressTable中的單位也是



有關MMU - ARM MMU : CP15 (P.299 furber)

C3 : Domain Control - 16 個domain的access control (2 bits/domain)
C2 : Translation Table Start Address - 在RAM中存放Translation Table的start address
C8 : 控制每個domain動作 - Flush.. etc
C1 : MMU的各項funtion (enable MMU,address alignmnt fault, data cache, Write buffer...)




CE 的system call 和Linux kernel service 類似,有implement一個call-gate,將API轉為Service_ID傳入統一的kernel 介面。

Service ID 定義在oak\inc\psyscall.h

9.24.2006

Filesystem in Windows CE

這一篇是翻譯這裡(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnembedded/html/embedded06172003.asp)的前半段...
CE 的 File 操作是由 FileSys.exe完成的,也就是說,program中有關file 的操作,file的api都是由FileSys.exe 這個 progam 完成。

詳細一點說,FileSys.exe 負責 ObjectStore和Storage Manager。

CE的檔案系統結構跟Linux比較相似,存在於 Root : "\" 下。
跟Windows 的file system 有很多driver letter 為root 反而比較不同。

CE中,File Driver 會mount在 Root "\" 下的一個folder (跟linux一樣)。

FileSys.exe 含有以下三個component:
  • ROM Filesystem
  • Storage Manager
  • Object Store
Object Store實際上是在memory heap中,Object Store內含 RAM system Registry,RAM filesytem,Property Database。

Registry 是所有CE所必須的,在CE 4.0 之前,registery 都是存在RAM 中,到了CE .NET後,registery 可以在RAM 或是以file的形式存在其他storage中。

RAM filesystem和Property Database則是optional,designer可以依需要選擇是否要加入這個支援到FileSys.exe這個module中(在platformbuilder)。

RAM File System一般就會mount在root上"\",也就是說,Root就是RAM Filesystem。
RAM File system下的file會直接出現在root"\"下。

ROM File System則會mount在"\Windows"下。也就是說,CE的"\Windows" folder是read-only。

Storage Manager是CE .NET新增加的module,負責所有Storage和Storage中使用的Filesystem。
Storage Manager主要處理四件事:
  • Filesystem Filter
  • Filesystem Driver
  • Partition Driver
  • Storage Driver
這四個driver和整個FileSys.exe的關係如下圖所示:

圖中可以看出,Block device負責storage hardware相關的read/write動作,Partition Driver負責在Storage中模擬出partition的動作(分割),其上是Filesystem。在Partition(在沒有partition的storage則直接對Block)做出filesystem。
上面是Filter,Filter可以讓designer implement一些像encription之類的動作
。另外,看Filter的位置,可以知道,Filter的動作只能對Block device,所以designer沒有辦法在ROM Filesystem和Object Store加上自己實做的encription動作。

除了實際的Block device外,Storage Manager也可處理network filesystem,只要filesystem implment所有 Storage manager和Filesystem Filter所需要的API,就可以完成一個實際的storage。

以下說明system loading filesystem的動作:

boot - NK.exe 啟動,將在ROM Filesystem中的FileSys.exe 載入,FileSys.exe將在ROM 中的registry 載入到RAM中初始化。
FileSys.exe讀入registry,依照registry中的設定值load其他的driver,第一個load的是device.exe,這個driver依照HKLM\Driver\builtin的內容依序將其他driver load進來。
Block driver也會在這個registry key下,所以也會被load進來。Block Driver "advertise" 一個特殊的class id : BLOCK_DRIVER_GUID {A4E7E......略}。

FileSys.exe中的Storage Manger提供一接口,接收所有block device driver loading, unloading時發出的通知訊息。
當有Blockdevice driver loading時,Storage Manager 對block device driver作open動作,並且查詢他的profilename。
每個block device都在registry中存有一個自己的PROFILE,說明這個block device使用的partition driver和filesystem driver種類。

Storage Manager 知道了block device使用的partition 和filesystem driver後,就去把這些driver load進來。

partition driver load進來後,Storage Manager請parition driver將block device中所有的partition 列出。同時列出partition使用的filesystem,Storage Manager再將filesystem driver loading進來,將對應的partition mount到對應的目錄。

9.01.2006

Online Presentation Website



這個線上簡報編輯網站挺不錯的,基本功能都有,又能export成html+folder格式(一般browser就可以撥),反應速度也不錯。
還可以將簡報 publish出來,這樣只要寄link給別人就可以了,別人可以在線上看(所以也可以link在自己的 blog )。

另外還有一個remote功能,可以讓你控制公開簡報的換頁動作,所以配上只要將link寄給所有人,在將大家一起加入skype,就可以作線上簡報囉。

http://www.thumbstacks.com/index.php


喔,是免費的。

這是測試的Link (http://www.thumbstacks.com/play.html?show=98481cdd620bda98da77eeaaa3600e4b )

嗯。越用越不錯.. 速度快,還有一些標準的"Arrow", "Circle", 基本圖案可以用。
大概說一下使用方法(其實很簡單,大部分就是用"右鍵"叫出選單。
投影片內容也是和powerpoint一樣,用"物件"的方式操控(移動,放大,縮小,底層...)。
登入後,會顯示你目前所有的簡報

每個簡報都會有一些Link讓你操作。"Edit"就可以編輯。

編輯畫面是兩欄式的,新增投影片,在左蘭按"右鍵",出現選單,選"Add Slide".

就可以新增一張投影片

為了讓你方便,新投影片上已經

據Thumbstacks的"development blog"所述,由於 google code 提供的javascript chart library,將會有以下的圖形元件功能:


這樣就更好用囉。
希望他們加加油,以後或許有機會像writely一樣被google買下。增加 "google office online"的實力。