5.31.2007

wget : 抓取某個目錄

使用 " -r " 參數,wget 會到處去抓,包括 上層目錄。
如果只要抓某個目錄就是加上 "-L" 參數。
 wget -r -L http://buildhost.openmoko.org/tmp/cross/
將prebuild cross toolchain 抓下來。
還是有不一樣的地方 .. 每個folde會多一個 index.html。

smbclient xp share with domain

Access 有 domain 管理的 XP share folder: 用 smbclient 的 -A option 指定 Authorization data file.
file

winxp內容是
username = <name>
password = <password>
domain = <domain>
然後run
 smbclient -L 10.1.1.5 -A  winxp
就可以正確 list 出 host 10.1.15 的share folder


繼續用 smbclient,當作是 samba 的ftp like client .. 連線到 xp host的某個folder上 (好奇怪,一定要是某個folder,不能是host) :
smbclient \\\\10.1.1.5\Charles -A winxp
注意,大小寫要完全符合喔。還有"\"要加escape character :"\"所以變成兩倍。

然後就會出現smb client 的promt了:
smb:\>
以下就和 ftp 一樣,用get 拿file,用put 丟file,用"!" 執行local 的command。

如果只是要單純的作一件事,可以用 "-c command-string"這個option :

上傳 myfile 上去
smbclient \\\\10.1.1.5\\Charles -A winxp -c "put myfile"

在install smbfs (其實不需要) package時,會詢問要不要採用dhcp server傳來的WINS設定,
回答Yes的話,就可以直接用 server name,不必用ip address囉 (但是雙倍斜線還是要)
很方便喔 :)

svn proxy

svn 不能過proxy:所以follow svn faq ,在 ./subversion/server 中加入 proxy server,port。

然後run svn co http://site local,一樣出現 400 Bad Request。
查是 因為 proxy 不支援 REQUEST command。所以改用https 試試 (http://tortoisesvn.net/node/87)

REPORT request failed on '...' REPORT of '...': 400 Bad Request (http://...)

You're behind a firewall which blocks DAV requests. Most firewalls do that.
Either ask your Administrator to change the firewall, or access the repository with https:// instead of http:// like in https://svn.collab.net/repos/svn/
That way you connect to the repository with SSL encryption, which firewalls can't interfere with (if they don't block the SSL port completely).

svn co https://site local

OK! 可以動作。

要注意 先前fail 的動作已經create 了local folder,並且在其中設定好了svn 紀錄,
所以第二次checkout會有message。

所以直接刪掉重新checkout就可以。

上一篇有關 svn proxy 的是 http://realchecko.blogspot.com/2007/02/googlesvn-hosting.html

新買的書


剛買,除了最左邊那一本,其他都還沒看. 不過馮內果那本好像很不錯(看了序)。

魯夫的爺爺,爸爸和哥哥都出來了喔。
...''千陽號" 還是沒"黃金梅麗號"好聽..

5.30.2007

RTC

kernel 啟動 oal call OALIoCtlHalInitRTC( )
但是傳近來的參數都沒用 (只有check non-null )
OALIoCtlHalInitRTC 照理要configure RTC register,enable it and hook the interrupt。
但是 只有 作OALIntrStaticTranslate( ) interrupt to IRQ_RTC
然後就call OEMSetRealTime( )傳入 ResetTime。
這個ResetTime 宣告在 OAL 的init.c 中。
就是 cold boot 的 時間。

iTune import APE cue

要將APE file 匯入到iTune 中..
  1. 先將 APE 燒成 CD image
  2. 用Daemontool 掛起 CD image
  3. 用iTune 匯入 CD
這樣就可以保留CD image的曲目內容 (iTune 也可以去找CD 資料)。

2. 3 還 OK。

1. 的話用Nero 燒,要加上nxmyap.dll 這個Nero 的Audio Plug in。就可以認得 ape 的 cue。
然後用燒錄 image (不是音樂CD喔)。讀入 cue ,就可以燒成CD image了。


nxmyape.dll 的安裝方式就是 copy 到 C:\Program Files\Common Files\Ahead\AudioPlugins 下就可以。

有些 cue Nero 讀入會顯示錯誤,這例如
PERFORMER "Strainsky, Chorus&Orch. of Opera Society of DC"
TITLE "Stravinsky--Oratorio - Melodrama, I"
FILE "CDImage1.wave" WAVE
TRACK 01 AUDIO
TITLE "OEDIPUS REX--Prologue - Act I"
PERFORMER "Strainsky, Chorus&Orch. of Opera Society of DC"
INDEX 01 00:00:00
其中
FILE "CDImage1.wave" WAVE
改為
FILE "CDImage1.ape" WAVE
就可以。
只是..燒的速度好慢呀!!

5.28.2007

quilt - patch tools

quilt 是用來patch 很多pathes時使用,使用的方法是
quilt cmd
可以用
quilt cmd -h
來看可用的command有哪些。

因為是多個patch files,所以有一定的patch 順序,quilt會幫我們handle這些順序 (因為當初這些patch 也是由quilt 產生的呀)。
就像stack操作一樣,push (apply) 一個patch。
用pop 把sourcecode回到上一個沒patch的狀態。

所以,quilt 也可以當作是 Version control system 用。

quilt 的操作,將所有的path 檔都放在 要patch 的source 中的"patches"目錄。 (可以是symbolic link)

剛剛講的patch stack (patch 順序)就紀錄在 patches/series 這個file中。

所以openmoko 的bootloader patch apply 的方法就是..

  • download u-boot latest versio (svn checkout lateset version)
  • download openmoko u-boot patch (是一個folder)
  • 把這個patch folder copy 到 download 的u-boot folder中
  • run quilt push 就會依照應有的順序apply 所有的patch.
希望是這樣..

Keyboard

platform.bib中,keyboard mouse driver一律叫做:
kbdmouse.dll
實際上是依照 LOCALE 決定採用的 kbdXXXX.dll

SOURCELIBS=
<Platform>KBD.lib
<Platform>_Layout.lib
PddList.lib
還有一些在COMMONOAKROOT 下的lib

各 LOCAL 不同的地方在 sourcelib 中所選擇link 的 kbd<local>_lib.lib

RSS + Geotag

會是怎樣 ? 就是subscribe to some location.

在這篇(http://geobloggers.com/archives/2007/05/25
/pssst-wanna-subscribe-to-san-francisco-or-london/)文章說的。

並且做了範例。

這好像是flickr 要提供的服務。

5.26.2007

Fail log - QEMU in Xming

qemu 的README說要看 qemu-doc.html,但是沒這個file,所以..
./configure --help

--target-list=*
--disable-sdl

target-list="i386-softmmu ppc-softmmu sparc-softmmu x86_64-softmmu mips-softmmu mipsel-softm
mu arm-softmmu"

使用 Xming.. 啟動qemu ... 出現...
       ---------------------- DirectFB v0.9.25 ---------------------
(c) 2000-2002 convergence integrated media GmbH
(c) 2002-2004 convergence GmbH
-----------------------------------------------------------

(*) DirectFB/Core: Single Application Core. (2006-12-04 07:00)
(*) Direct/Memcpy: Using MMXEXT optimized memcpy()
(!) Direct/Util: opening '/dev/fb0' failed
--> No such device
(!) DirectFB/FBDev: Error opening framebuffer device!
(!) DirectFB/FBDev: Use 'fbdev' option or set FRAMEBUFFER environment variable.
(!) DirectFB/Core: Could not initialize 'system' core!
--> Initialization error!
Could not initialize SDL - exiting
但是build qemu時,不可以 --disable-sdl 。

SDL 一定要用 DirectFB 嗎 ? 可不可以只用 xlib 呀?
拿SDL 下來build 看看..
一樣 ./configure ,從configure.log 中確認 DirectFB supporting is no.
make
sudo make install
和wxGtk 一樣,提供 sdl-config --libs --cflags 作compile option.
依照tutorial 的說明。寫一個 sdlhello.c:
#include <stdio.h>
#include "SDL.h"

main(int argc, char *argv[])
{
if(SDL_Init(SDL_INIT_AUDIO | SDL_INIT_VIDEO) < 0) {
fprintf(stderr,"Cannot Init SDL: %s\n",SDL_GetError());
exit(1);
}

atexit(SDL_Quit);
}
build :
gcc `sdl-config --cflags` `sdl-config --libs` -osdlhello sdlhello.c
試run..
ALSA lib confmisc.c:670:(snd_func_card_driver) cannot find card '0'
ALSA lib conf.c:3500:(_snd_config_evaluate) function snd_func_card_driver returned error: No such device
ALSA lib confmisc.c:391:(snd_func_concat) error evaluating strings
ALSA lib conf.c:3500:(_snd_config_evaluate) function snd_func_concat returned error: No such device
ALSA lib confmisc.c:1070:(snd_func_refer) error evaluating name
ALSA lib conf.c:3500:(_snd_config_evaluate) function snd_func_refer returned error: No such device
ALSA lib conf.c:3968:(snd_config_expand) Evaluate error: No such device
ALSA lib pcm.c:2143:(snd_pcm_open_noupdate) Unknown PCM default
嗯...這是??所以重新再來一次..disable ALSA..
--disable-alsa  --disable-video-directfb  --disable-video-fbcon --with-x
還是一樣。
所以... aptitude install alsa 之後,sdlhello 可以正常工作.
但是 qemu 還是fail..
Could not initialize SDL --exit
查一下這個error message是 sdl.c 印出來的。所以print out一下 SDL_GetError( ).是
No available video device
奇怪,sdlhello 都可以 SDL_Init( ) OK的。

而且很奇怪的是 colinux 上都可以用Xming 跑 qemu 的呀...

Xming behind NAT

其實也就是開啟 NAT 的 portforward.
Xserver lisen from 6000.
display 0 : 6000
display 1 : 6001
...
所以把對應的port 對應過來就是。

然後 linux 上 export DISPLAY=NAT's ipaddress:0

就醬..

XDMCP behind NAT 還是沒弄起來..

5.23.2007

Mass Storage, Notify

USB Mass Storage.

中介 MDD 到 SCSI 間的就是 BOT了 (果然)。
可以看到,跟USB Mass Storage Protocol 內容一樣,解開CBW 的就是BOT這一層

Pdd Initialize
USB PostInit - Mass Storage Class
BOT_InternalInit
BOT_ReadConfigurationValue
GetEndpointDescriptor
BOT_ReadConfigurationValue
BOT_TransferThread
BOT_DeviceNotify
..
BOT_ResetPipeState
BOT_DeviceNotify
BOT_HandleRequest
BOT_DeviceNotify
..

BOT_InternalInit 呼叫 UfnMdd_Start ( &BOT_DeviceNotify ... )
這樣就設定了 MDD 的pContext->lpDeviceNotify

enum.cpp:
  • ProcessConfiguration( )會呼叫這個function : pContext->lpDeviceNotify( ).
  • UfnMdd_Notify( )也會用SendDeiviceNotification( )呼叫 pContext->lpDeviceNotify( )
很奇怪,UfnMdd_Notify( )不在 ufnmdd.cpp 中,卻在enum.cpp。

所以整個"Notify"的流向就是..

Pdd --> Mdd --> BOT

Pdd 送給 Mdd 的Notification Event:
  • UFN_MSG_BUS_EVENT
    • UFN_DETACH
    • UFN_ATTACH
    • UFN_RESET
    • UFN_SUSPEND
    • UFN_RESUME
  • UFN_MSG_BUS_SPEED
  • UFN_MSG_SETUP_PACKET
  • UFN_MSG_PREPROCESSED_SETUP_PACKET
  • UFN_MSG_SET_ADDRESS
  • UFN_MSG_CONFIGURED

5.22.2007

BSP Common folder

有些BSP的安排方式會在SRC下有一個COMMON folder,這個folder會build成一個library 給 Kernel(folder) project 作 Link,所以修改過COMMON下面的folder source,要rebuild common。
之後到 kernel 下作build (他會只做Link)。

如果閒麻煩,可以把common 下的folder內所有的source都copy到 kernel 下的folder中 (OAL ?)。
修改 sources ,直接加入這些source,刪掉common.lib。

5.21.2007

git over http proxy

原來的command是
 git clone git://www.denx.de/git/u-boot.git
但是在proxy就不能動作。

news goupe(http://groups.google.com.tw/group/fa.linux.kernel/
browse_thread/thread/2155bdd213258f7a/7c98c532b4b04b0b?
lnk=st&q=git+proxy&rnum=1&hl=zh-TW#7c98c532b4b04b0b)說,改用http protocol 就可以..
git clone http://www.denx.de/git/u-boot.git
果然可以動(?),不過變得很慢,很慢。

當然,要export好http_proxy 變數

5.20.2007

another walk-through of Openmoko

原來openmoko 的 "WALK-THROUGH"在 http://svn.openmoko.org/developers/werner/WALK-THROUGH

還有 http://svn.openmoko.org/developers/werner/BBT-MIGRATION
有說明apply openmoko版u-boot的patch的方法,包括說明 他的upstream u-boot source到底是那一版,還有用quilt apply 所有patch的command。

這一頁 http://wiki.openmoko.org/wiki/Migration_to_bad_block_tolerant_builds
好像是更update的walkthrough,也包含u-boot的build process.

以上找到的文章,都是有關nand flash 的 BBT (Bad Block Table)支援說明,單純的u-boot 說明頁反而沒有那麼仔細。

用 debian 的 git package是"git-transition",配合WALK-THROUGH的command會出現error,要用 git-core package,然後run
 update-alternatives --config git
選 git-scm,才能正常checkout.

Xming - KDM

用Xming 值行XClient 比較簡單,只要設定DISPLAY變數就可以。
但是要用Xming 當remote Desktop,就要改比較多東西:

安裝完kdm後,start/stop script 在 /etc/init.d/kdm中。
啟動kdm,再 ps -aux | grep kdm 可以看到
/usr/bin/kdm -config /var/run/kdm/kdmrc
所以config檔是在 /var/run/kdm/kdmrc

修改kdmrc ,找到 [Xdmcp] section,其中有
Enable=false
改成 true
注意下面
Xaccess=/etc/kde3/kdm/Xaccess
知道要修改Xaccess,讓所有host都能連線:
有一行
#*     #any host can get a login window
把一開頭的comment 符號"#"拿掉。

OK,重新啟動kdm
/etc/init.d/kdm restart
接著在Windows上啟動Xming。
選 " Open session via XDMCP "然後 Connect to host 寫上 Debian 的IP,然後就會看到X window的黑白方格畫面,在等一下,就會出現kdm了。

5.19.2007

現成的openmoko toolchain

openmoko 的uboot source 和 patch 在 這裡
toolchain 在 這裡 href="http://people.gta01.hmw-consulting.de/laforge/toolchain/
這裡 有一堆 deb,不知道可不可以直接拿來用。

Wiki 中說明的u-boot patch 在這裡
有很多,用
 wget -r -l 1 http://svn.openmoko.org/trunk/src/target/u-boot/patches/
全部拿下來。

5.18.2007

MFC in CE 6.0

在CE 6.0 的Catalog-View中已經看不到 MFC 了。
Windows Embedded Blog 中,卻還有人提倡在 6.0 中使用 MFC。
那 MFC.DLL在哪裡呢?

C:\Program Files\Microsoft Visual Studio 8\VC\ce\Dll\armv4


像這樣的東西,怎麼寫在 Blog 裡呢?應該寫在CE 6.0 的說明中吧。
買power 接頭,公/母 - 和兩個鱷魚夾,串接 adaptor - 量測電流。

5.17.2007

soft reset, hard reset in CE

Factory Reset 和 software Reset (PIN)一樣,call OALReboot( )。
但是在 call 之前,會去清掉flash, 並且設定 CleanRebootFlag( )。

SetCleanRebootFlag( ) ref MSDN.

呼叫這個function 後,RAM中的object 會被ignore 掉 (? 可是已經不會再重load nandflash 了呀?)

這個function是CE提供的,可見CE kernel 就有soft reset, hard reset 的差異。

所以 在寫 software reset 功能時,要注意不能用 chip 的watchdog timeout 來作。

nandflash - block, pages and chip

兩顆nandflash,串成一顆,從block number看來是連續的。
所以physical layer要操作時,要先從block number算出,要access哪一顆nandlfash:

兩部份的程式又有不同的model:

ADS code : 用block, page (relative/offset)
Kernel : 用 page (absolute/total)

Block Number = Absolute/Total PageNumber >> 6
Block Number > 0x2000 的是在第二個chip select上

分出 是在哪一個chip上後,要算出是對應該chip的哪一個block, page。

不論是ADS或是Kernel,實際上 nandflash access 是用 page (relative/offset)。
所以要動作時,還是要轉為 page.

所以是ADS的話,就有一點囉唆:
(block,page) ==> (chip index, rel block, offset page)
(rel block, offset page) ==> (chip page)
Kernel的話,其實就直接將page 轉成 chip index, offset page就可以了)。
但是不知道為甚麼,code是這樣作:
(page) ==> (block, page)
(block, page) ==> (chip index, rel block, page)

5.12.2007

IDE for wxWidget : wxHatch

先download wxHatch 下來,解開
INSTALL.txt說看help\index.html
說道在linux w wxGTK的build方法:
 ./configure --with-wxWINDIR=../wxWidgets
需要wxWidgets的config.in
這個用deb安裝的就不會有,所以要download wxWidgets的source下來:

在sources.list加入deb-src,用
apt-get source libwxgtk2.6-0
download自己安裝的版本(可以用aptitude search wx來看自己裝的是那一版)
結果 : 還是不行,沒走config 檔。

wxHatch 的說說明中,有說道用package安裝wxWidgets的,要用
make -f makefile.unx
原來,這就是標準的wxWidget make command :
g++  -c `wx-config --cxxflags` -o wxhatch.o wxhatch.cpp
但是還是有error :

wxhatch.cpp: In member function 'wxString MyFrame::Do_wxw_Extract_All
(const wxString&, const wxString&, wxProgressDialog*)':wxhatch.cpp:10140
: error: cannot convert 'const wxChar*' to 'const char*' for argument '1'
to 'int chmod(const char*, __mode_t)'
make: *** [wxhatch.o] Error 1

5.11.2007

kde xserver install

在 apt 安裝上 KDE, Gnome 和 XServer 沒有相依性,
也就是說,安裝了 kde,並不會自動安裝 xserver,
因為,或許你是要用Xming 來run kde呀。

所以 要記得還要 install xserver-xorg-core
安裝xserver,就會出現選項,要你選一個...

Debain testing並沒有像ubuntu 7.0一樣,用upstart

5.10.2007

機油

Richard 學長今天告訴我一個好機油(for the old car)。
所以特別紀錄一下:

Celtex 5W50

參考價格 : NT 400.

5.07.2007

帳號併入fk,那平台呢?

所以併購不是因為他的技術,而是他的人數呀。

如果說是因為技術吸引這麼多人數,那麼應該會採用這個技術,而不是購入後就丟棄。
當然,也有可能是因為要納入現有的平台不容易,所以忍痛丟棄。


反正,拿到錢就好了,自己花這麼多時間,精力,引以為傲的那些code,,,被當作垃圾丟棄,也沒什麼大不了。
或許自己也鬆了一口氣,不用再mantain 那些爛code了 ?

Show Chinese in Pietty - Ubuntu

原來ubuntu是用 utf-8
所以用pietty 連線後,選"選項" -- "字元編碼" -- "Unicode-UTF-8"
就可以顯示中文了。

紀錄一下,免得忘記 :)

這裡 看到的。

Install wxWidget in ubuntu:

in Ubuntu, wxWidget is wxGTK, use ubuntu's package manager : /sbin/synaptic
search wxWidget, list a lot of packages, choose - libwxgtk2.8-0.
and it shows some dependent packages:
  • libc6-dev
  • libwxbase2.8-0
  • libwxbase2.8-dev
  • libwxgtk2.8-0
  • linux-libc-dev
  • wx2.8-headers
no g++?
install g++ (ubuntu's default version is 24.1)
and it shows some dependent packages:
  • libstdc++6-4.1-dev
After installation. check the wxWidget package (library and header) was installed in..
  • /usr/lib/wx/include

TEST BUILD:

follow the instruction : http://wxwidgets.org/docs/tutorials/hello.htm
download the demo hello program : http://wxwidgets.org/docs/tutorials/hworld.txt
rename to hworld.cpp

then build :
g++ hworld.cpp `wx-config --libs` `wx-config --cxxflags` -o hworld


OK. try run the hworld..


wx-config is a shell script, print out the wx's building environment.

5.01.2007

紀錄一下


聖保祿醫院 : 桃園市 建新路 123 號

圖是從聖保祿醫院拿過來的,但是網站上卻沒有地址。

上面的圖..廣明陸橋接的是復興路。就是桃園縣政府前那個叉路。

地址是從UrMap 的POI 拿過來的.