I have finally jail-broken my 3GS iphone using Pwnage Tool. There was two tricky things I need to write them down for my own future reference.
First, after built custom restore file and just before delivering the payload in recorvery mode, I should turn of iTune, otherwise, I will wait forever.
Also, when defining boot parittion size, I've changed the size from 580M to 750M, otherwise, I will wait forever.