4.30.2008

MultiXIP : msdn

修改 config.bib

在config.bib 的 "MEMORY" section 中定義出run-time image 的 multixip regions, 以下是範例:
;  NAME           START ADDR    SIZE       TYPE
; ----------------------------------------------------------------
NK 80220000 007DE000 RAMIMAGE
SHELL 809FE000 00100000 RAMIMAGE
APPS 80AFE000 00100000 RAMIMAGE
CHAIN 80BFE000 00002000 RESERVED ; XIP chain info
RAM 80C00000 01000000 RAM
pdwXIPLoc 00000000 80BFE000 FIXUPVAR ; XIP pTOC
上面將原來的一個NK image 分成 3 個 BIN:NK, SHELL, APPS。另外一個 CHAIN 和 pdwXIPLoc 是MultiXIP另外需要的。

NK, SHELL, APPS 這三個區域是連續的,區域的大小可以自己決定,但是要考慮要放到該區域內得AP (要能放得下)。 一般來說,把該區域內所有AP的size 加總之後,+32K 就可以。

CHAIN 這個bin 要放在 NK, SHELL, APPS 之後。實際上chain.bin 的位置和bootloader 的實做有關。

pdwXIPLoc 區域被宣告為 FIXUPVAR,而且包含整個NK, SHELL, APPS。並且在CHAIN 之前結束。

之後,要修改 config.bib 的 CONFIG section:

有幾個是額外要設的:
  • AUTOSIZE=ON : 調整RAM 的start address 在最後一個 XIP region 後。
  • ROM_AUTOSIZE=ON : 自動調整每一個 XIP 區塊的大小。
  • DLL_ADDR_AUTOSIZE= ON : 調整DLL 的size,能夠橫跨 XIP region。
  • XIPSCHAIN=80bfe000 : 告訴 Romimage CHAIN.bin 的start address。
這樣config.bib 就做完了。

接著改 Platform.bib:

.. 懶得寫,而且跟我們的用法不一樣,大略來說,就是把一些dll, exe 分到 APP 和 SHELL 中。

然後是設定 platform builder的 參數:

Platform -- Settings -- Environment -- New : 加上 IMGMULTIBIN ,value 設為 1。

Build:

check - Make Run-Time Image After Build 和 Copy Files to Release Directory After Build。
sysgen.

完成後,會產生
  • Xip.bin
  • Nk.bin
  • Shell.bin
  • Apps.bin
  • Chain.bin
  • Eboot.bin
其中Xip.bin 包含 所有 XIP regions.

xip.bin -- 就是要download 的 bin 檔

-- 然後就是用 platform build 透過 KITL -- eboot download 到 target 上去。



有關 XIP Chain

XIP Chain 是一塊XIP region,由 OAL 讀取,內部資料描述 有幾個 XIP region。和每個region 的 entry。還有 XIP region 的starting memory address。

XIP Chain 會由 bootloader (eboot) 寫入flash/rom,
xip chain 在memory 的位置是由 Config.bib 設定的。然後由 fixup variable 傳給OAL。

Fixup Variable 是 ROMIMAGE.EXE 的一個功能變數,可以讓你在 makeimg 的階段

4.29.2008

NFS in Windows CE

在 nicolasbesson's blog : Debugging technics for Windows CE(Part I)
有提到,為了避免每次修改code,都要重新download OS。
可以使用KITL,當KITL啟動時,會用NFS 將 _FLATRELEASEDIR mount 到 RAM filesystem 中。
所以你可以直接改動在硬碟中 _FLATRELEAESDIR 的file,在 target 中也會同步改變。

另外一篇,如果要確認在 硬碟上修改的檔有update 到 RAM filesystem中,可以到 platform build中,Target -- Release Directory Modules -- 按下 "Add",把新增的 module加入。這樣不用重新start OS,OS也會把 module載入。


whaa!! 就像以往在作Linux 系統開發時一樣耶!

4.23.2008

OLPC 快完蛋了?

TC_Chu's Point 看到的,到 "source"去看。

大概是說,OLPC 最近一次重組,一堆大頭都離職了。
接下來決定要使用 Windows XP 來取代現在的Linux + Sugar。
所以不需要資訊長跟一些軟體開發的職務。

新聞中還有提到,OLPC 將會用XP這件事,大概是真的了。

follow post 的link 可以看到... OLPC 由慈善事業漸漸轉為營利走向.... 出貨的一堆問題.... 還有  keyboard pattern 問題.... 真是問題不斷呀。



我的疑問是..要是Sugar run 起來都不夠快了,run Windows XP 不就更慢了?
還有,Windows XP 的cost down 版本,會夠便宜嗎?  在對cost斤斤計較的OLPC專案而言?

其實他們都知道有那塊市場,也知道可以客制化出一個產品,足夠低價,並且足夠一般使用 (搞不好還是大部分使用都滿足)。
但是這樣會影響到主流/高階市場:一旦大家發現...這樣的產品就夠了呀,誰還會花錢買貴的呢?
所以一直不敢投入市場。

終於,有一個人敢投入了...而且他夠快。

而這個產品最困難的地方在....    定價



download image via RNDIS

eboot 加入rndis 的支援後,會用rndis 作為 ethernet 介面,對沒有 nic 的 target 很有用。

eboot boot 起來後,跟以前一下,按下"space"進入 eboot menu。
可以看到第一,第二的option 顯示 ip address 和 subnet mask。

然後.."D"  Download Image now

host pc (和target 有usb 連線)會出現"rndis裝置xxxx,安裝driver的訊息"。

PC 要安裝 usb rndis driver,MS 說..在win2000 後 rndis driver 已經是內建的了。
.. 但是很奇怪,還是會找不到,要自己安裝。

所以到 MS 去download "generic rndis driver" , follow readme.html 修改一堆..
最重要的是 VID,PID。

VID, PID 可以到 pc 的硬體去看,修改好後,就可以安裝 rndis driver 了。

driver 裝完後,eboot 會顯示出 Device Name : 'xxxxx'

rndis driver 啟動後,會多出現一個網路裝置。要把ip 設為跟 target board 的 eboot menu 顯示的ip address 同一網段,這樣 pc 和 target board 才能連上。

設定 platform builder -- target -- connectivity option - kernel service map 選 ethernet。
在 setting 的部份,會出現剛剛eboot 出現的 device name "xxxxx" 選他。

platform build -- attach device 會開啟一個dialog,顯示 download percentage... eboot 的 message log 也會出現 download 的 message..


重點:
  1. 要正確安裝 ms 的 generic rndis driver ,要修改 template。把 vid, pid 寫進去。並且save inf 到有 *.sys的folder。
  2. rndis 產生的網路裝置要設ip,要和 target board 的ip (see eboot menu) 在同一網段。
  3. platform builder 的connectivity 要用 ethernet,裝置要選 target board的名子。

4.18.2008

Let SVN works like VSS

也就是說,由 update-modify-merge 改成 lock-modify-unlock.

可以在文件上加上 property svn:needlock 來做到。

用 windows client 來作就是..
  1. 在要這樣作的文件上按右鍵,選 property
  2. 選 "Add",然後在pull-down menu 選 "svn:needlock",下面 "value" 部份隨便input一個value。
  3. commit
OK,該文件的icon 變成灰色了,代表是read-only。要get-lock 後,才會變成writable。
還有,get-lock ,modify  然後 commit 後,又會恢復 read-only。

4.17.2008

nand flash - page content layout

原來Nandflash Page content layout 是沒有一定的。

一個page = main data area + spare area.

以 pagesize 4k 為例:

有 4k 的main data area 和 128 byte 的spare area。

4k 和 128 實際上是連續的,以 512 byte 需要 9 bytes ECC的裝置。
可以這樣安排:

|----512----|----512----|----512----|----512----|--ECC1--|--ECC2--|--ECC3--|--ECC4--|-ECCECC-|
或是

|----512----|--ECC1--|----512----|--ECC2--|----512----|--ECC3--|----512----|--ECC4--|-ECCECC-|

4.14.2008

JAP : anonymous browing

一個用來隱藏IP的tool : Jondos Anonymous Proxy

跟 TOR 一樣,是經過一堆 relay(?) 來隱藏 source 和 path。
但是 JAP 好像有作SSL,所以比 TOR 好(?)

是 OpenSource.

安裝方式是去download client。
----需要java (JRE)。

啟動後,如果要通過proxy,先到config 中去設置 network-proxy。
然後她就會開始找server。

JAP 有 free 和 payment 兩種服務,選 free (no-cost)的server。連線成功後,UI 會有顯示。

之後設定browser經由 JAP 的機器 -- 設定proxy:

如果沒有變更的話,port是4001。所以run JAP的機氣上就設 127.0.0.1, 4001。

在config中也可以設定供其他機器連線 (真的像proxy一樣)。這樣其他的機器就要設proxy在這一台run JAP的機器上。

JAP 也可以run在Linux上, 也可以run在console mode (意思就是說...) :
..$java -jar JAP.jar --console
但是設定部份最好先進UI mode設定好。選OK後就會save在~/.jap.conf 上,再啟動 JAP console mode。



實際測試的結果,到"What'sMyIP"去看,IP是真的改了,變成 德國 的IP。
公司鎖住的網站也可以上了..

... 就.. 讓她繼續run 在哪兒吧..

4.11.2008

Initial Bad Block Mark : MLC and SLC

Nandflash 在出廠時都會作critical測試,確認每一個block是否OK。
測試不通過的block 會被標上記號,這些block 就叫 Initial Bad Block.

這些 Initial Bad Block 的資訊很重要,不可以輕易刪除,因為這些block 是在 critical condition 測試才會出問提,所以在一邊狀況下,或許會是OK的。
所以 user 自己是無法再(正確的)找出這些 bad block 。

Initial Bad Block 的標示位置,在SLC, MLC 上不一樣(或許廠商不同也不一樣)。

由 datasheet 來看:
  • SLC : 每個block 的第一或第二個page的spare area 的第一個byte,如果不是0xFF,就是bad block。
  • MLC : 每個block 的最後一個page的spare area的第一個 byte,如果不是0xFF,就是bad block。
ref : http://218.22.45.5/misc/Books/K9LAG08U0M_0.7.pdf

原來我以前就寫過了: http://realchecko.blogspot.com/2008/03/initial-bad-block.html

4.07.2008

原來DFUWizardCE執行時的baudrate checking是假的,實際少上還是依照main menu 設定的baudrate動作。

而 各版本的baudrate都不一樣,所以要先看version 再到firmware 的folder去看readme.
Fail Sample 分析:

Sleep/Wakup 測試 配合 mp3 play - repeat 30 min 後 system hang.
system folder disappear.

使用 debug version ,boot log 出現 [VFL:ERR] VFL_Read (nVpn:16776960) nVpn Overflow!

使用eboot cosole "Mark Initial Bad Block" 竟然沒有 bad block!
用VFL Format,也沒有report 有 bad block 。

ME - 2

不是 Me, too.

Engaget 這一篇 "Win7 明年推出"。

看完,我就聯想到一件事,想要留言時. . . . 第一篇留言,恰巧就是我想寫的。

沒得寫啦,所以只好留在自己的blog..

Vista... 會不會是第二個 Windows ME 呀!

4.03.2008

結果:

用 preserve initial bad block 的 RunEboot erasembr後。
用 eboot 中的 Make Initial Bad Block Information
再 format VFL
再安裝 OS

之後,install program 就沒有 nandflash read/write fail message了。

......接下來,要試試 Make Initial Bad Block Information 和 format VFL 和 erasembr是不是必須的。

erasembr 後直接format VFL 好像不行,要作 Mark Initial Bad Block 後再作 format VFL 才行。

由log 看來,有些被判定為bad block (非initial bad block),erasembr後就消失了(被判定為正常)?

erasembr後,VFL format 的initial bad block 有14個。
erasembt後,mark initial bad block,再 VFL format 的initial bad block有16個。

4.02.2008

Decoding_SpareECC( )
--- Read_Spare( )
--- Nand_Read( )

// Chip Select
_CE_L(nBank);

// Read Command (Always read spare area before main area in a page
_CMD(CMD_READ); // 0x00
//_SET_ADDR(nPpn, BYTES_PER_MAIN_PAGE);
_ADDR(BYTES_PER_MAIN_PAGE&0xFF);
_ADDR((BYTES_PER_MAIN_PAGE>>)&0xFF);
_ADDR(nPpn&0xFF);
_ADDR((nPpn>>16)&0xFF);
_CMD(CMD_READ_CONFIRM); // 0x30


Erase Block 的command 只需要 3 個address cycle。 也就是block index 就可以。
  • 0x60
  • Address x 3
  • 0xD0
  • Wait a moment