星期五, 6月 30, 2006

ffmpeg - read_packet

av_read_packet 從input stream中讀取一個packet
實際使用 s->iformat->read_packet( )來讀。

s在av_read_packet( ) argument中的 is, is = input_file[ist->file_index];

input_file[ ] 在 opt_input_file ( )中初始化:input_file[nb_input_files] = ic;

ic 在 av_open_input_file(&ic,filename... 初始化( 取得實體 alloc )。

av_open_input_file ( ) 中 ic->iformat = fmt = av_probe_input_format( )找到format。

av_probe_input_format( ) 依序呼叫 first_iformat list中每一個node的 read_probe( )來決定是否"認識" input stream。

first_iformat 這一個list 是由 av_register_input_foramat(AVInputFormat *)設定。

grep av_register_input_format 就可以看到 libavformat 下每個source file都有呼叫這一個function來註冊自己的 read/write function。

所以省略掉 probe 找到iformat的地方不看,s ->iformat ->read_packet ( )執行的就是libavformat下有 使用 av_register_input_format( )的source code中 read_packet 對應的function。

修改source,在 libavformat/utils.c 的av_probe_input_foramt( )最後加上
fprintf(stderr,"av_probe_input_format fmt->name:%s\n",fmt ? fmt->name : "");
看看最後是找到哪一個iformat。

make,播放 5th.m2t ,顯示 :
av_probe_input_format fmt->name:
av_probe_input_format fmt->name:mpegts
有兩次是因為第一次呼叫av_probe_input_format時,不open file。
第二次呼叫才open file。

mpegts 的probe( )方式有點難 @_@...換一個好了...用chevy6.mpg 顯示
name:
name : mpeg
source : libavformat/mpeg.c
mpegs_probe( )就比較清楚了
probe也就是在找...mark ...
000001BA   :  packet start
000001BB : system header start
000001E0 ~ 000001EF
000001C0 ~ 000001DE
000001BF : private stream 2
000001BC : program stream map
000001BD : private stream 1
000001BE : padding stream
.找一找video file是不是有這個pattern..用以前講過的xxd來作hexdump..
$xxd -l 32 chevy.mpg
0000000: 0000 01ba 4400 0400 060d 00f4 c3fa ffff ....D...........
0000010: 0000 01bb 000c 807a 6106 21ff c0c0 20e0 .......za.!... .
果然,000001ba。

這一篇文章(http://www.mav-magazine.com/Aug1999/MPEG/),有說明用hexeditor "編輯" MPEG檔 ....@_@

ffmpeg - HIS modification

上一個post是"原版"的ffmpeg 內容,接著看HIS的修改.
原av_encode ( ) 切割為兩個function :
av_encode_open_stream( ) : initialize in/out stream variable
av_encode_video_thread( ) : 真正作encoding的地方.

av_encode_video_thread
read_packet( ) then free_packet - 丟掉第一個packet(why?)

for(;;)
av_read_packet 從inputstream 讀取一個packet到pkt中。

decode input packet (?) why ? 不是bt656嗎?

do_video_out : encode and write out(?)
重要的encoding 動作也是在do_video_out作
計算pts, frame同步

img_convert : convert picture pixel format ?? 一樣用ffmpeg的convert function,沒有用dsp作(why?)

resize : 也沒用dsp

img_resample : 也沒用dsp

avcodec_encode_video : 呼叫 encode( ) 作encode。

av_write_frame : 呼叫 write_packet 把encode好的pkt ......
s->oformat->write_packet
s : ageument of do_video_out : os
os = output_files[ost->file_index];

output_files[] 似乎是在opt_output_file 作initialize。
opt_output_file( )只有在parse_arg_file( )引用。
parse_arg_file( )只有在parse_options( )引用。
parse_options( )在 main 的一開始引用。
parse_arg_file 在 parse cmdline的filename (output filename?)。
用guess_format( )猜測filename 應該使用的格式.

ffmeg - continue

ffmpeg.c 部份:

SIGSEGV (Segment fault) : access 一個無效的memory address時,會觸發這個signal。

從原av_encode( ) local variable 中分出來的變數:
AVInputStream  : *ist, **ist_table
AVOutputStream : *ost, **ost_table
AVInputFile : *file_table
原ffmpeg.c中..
av_encode - 作decode-encode的function

for(;receive_sigterm==0;){

由pts找到現在要decode/encode的input - file_index

av_read_frame(input_files[file_index], &pkt)
讀出一個frame的packet。

計算out stream的delta time

output_packet(ist, ist_index, ost_table, nb_ostream, *pkt)
decode pkt to picture : avcodec_decode_video
encode picture : do_video_out
encode的動作: do_video_out
 img_convert : convert source pixel format to output pixel format.
這個ffmpeg內建一個各format互轉的function table : convert_table. @_@ 真是寶庫.

img_resample : ~

avcodec_encode_video : 把處理完後的 big_pitcure encode後放到bit_buffer

av_interleave_write_frame : 把 pkt(就是bit_buffer) 包裝後寫入out stream
.

星期四, 6月 29, 2006

ffmpeg : custom codec - dsp

ffmpeg 設計了一個完整的架構,讓你將自己implement的dsp 加入。

例如,外加的mpeg4 codec。

ffmpeg 的application 啟動的時候,要呼叫 av_register_all ( ) 建立所有support的codec的 function table。

以下是某平台的code trace...

config.mak 中多定義了 CONFIG_MY_CODEC

grep 整個source,有CONFIG_MY_CODEC的地方

libavcodec/allcodecs.c 的avcodes_register_all( ) function,可以看到,利用CONFIG_MY_CODEC來決定使用原來的ffmpeg codec還是自己的codec (heading with g):
#ifdef CONFIG_MY_CODEC
register_avcodec(&gmpeg4_encoder);
register_avcodec(&gmjpeg_encoder);
#else
register_avcodec(&mpeg4_encoder);
register_avcodec(&mjpeg_encoder);
#endif
這樣就知道codec function table name 是gmpeg4_encoder, gmjpeg_encoder。
如果整個folder執行過 ctags -R,用
$vi -t gmpeg4_encoder
這樣就可以open gmpeg4_encoder實做的source code。
AVCodec gmpeg4_encoder = {
"mpeg4",
CODEC_TYPE_VIDEO,
CODEC_ID_MPEG4,
0,
encode_init,
xvid_encode,
encode_close, /// close
NULL, /// decode
0
}
三個function : encode_init, xvid_encode, encode_close。
這樣還可以對應使用原ffmpeg mp4codec與custom codec的不同處。

AVCodec的 structure:
typedef struct AVCodec {
const char *name;
enum CodecType type;
int id;
int priv_data_size;
int (*init)(AVCodecContext *);
int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
int (*close)(AVCodecContext *);
int (*decode)(AVCodecContext *, void *outdata, int *outdata_size,
uint8_t *buf, int buf_size);
int capabilities;
const AVOption *options;
struct AVCodec *next;
void (*flush)(AVCodecContext *);
} AVCodec;
int encode_init:

open dsp mpeg4 encoder driver dev.
將ioctl 的參數structure設定好,用ioctl(codec_fd,ENCODE_INIT,&encod_parm) 通知driver。
將AVFrame (儲存frame property and start address的結構) allocate好。
把ratecontrol parameter設好。


xvid_encode:

將傳入的YUV plane base address 取出,設定到ioctl 的arument structure。
將argument structure的bitstream (encoder的結果輸出address),

FIC8120 - part III : MPEG4 codec

MPEG4 Programming Guid 說明 FIC8120 MPEG4 codec的使用方式。

一樣,codec driver以kernel driver的方式提供service,driver source code也完整提供。

一樣,有example code,和source code說明。 driver IOCTL argument說明。

mpeg codec output 利用mmap的方式讓codec 將輸出mapping 到 framebuffer。
讓codec輸出顯示在bt656 output上。

encode 部份,一樣,open capture device(bt656 input),mmap input region ,用ioctl 設定給encoder 的input region。

MPEG4 Motion Detection

定義好MACROBLOCK 檔,CFG,當detect到motion動作會signal 設定好的pid process。


基本上MPEG4 的program方式和JPEG的方式類似。

FIC8120 SDK - part II : jpeg codec and motion detection

SDK中有JPEG programming guide,MPEG4 Programming Guide,說得很清楚。

JPEG Programming Guide

jpeg encoder/decoder已經由usermode program轉為kernel driver了,所以要compile module,load module後才可以使用。

說明driver source code。 source file - content.

說明 jpeg 的example program。

jpeg codec driver也是用IOCTL 控制,

以下在說明jpeg encode/decode example的source code,配合IOCTL 解釋.

FIC8120 的JPEG codec 有提供motion detection function.

工作方式是: 利用一個config 檔,設定motion detection 的region sensitive,
當程式偵測到motion detection 時,會signal 設定檔中 設定好的pid process。

Text (console) mode pdf reader ?

真的存在嗎?

google了一下似乎是沒有,所以只好用pdftohtml 將一個pdf檔轉成多個html檔,還會將pdf中的圖片轉為jpg檔。

pdftohtml會保留pdf檔中的link,讓你browse 轉換後的html file時比較方便。

console mode 的html reader ? 就是 lynx 囉。

或者,會有其他更直接的方法?

星期三, 6月 28, 2006

Faraday : FIC8120

ARM9 core + MPEG4 Codec
CCIR656 I/O , PCI , USB OTG, Ethernet(MAC), IDE , RTC, I2C, I2S, PowerManagement.

SDK是Linux 2.4.19.

SDK中source code很完善,包括 dsp driver部份也都有。
從dsp driver中可以看到,codec與arm 之間是用share memory作interface,source code中定義好share memory command format,driver就是利用share memory mapping的structure 送command,check state, wait complete。

除了capture, codec部份,其他的device好像都在kernel source中。

所以算是很Open的作法,(就差codec部份沒有sourcecode了,但是搞不好是cell gate implement也不一定)。

FIC8120 可以做到realtime D1 30fp mp4 壓縮 或 解壓縮 (目前的clock rate還不能做到同時)。
所以適合作 ..

IPCAM : 從bt656 capture image ,壓縮成mp4後stream out , via buildin ethernet 或由PCI接Wlan out。當然,是linux ,所以可以內建http server,snmp... etc,你高興的server都可以。

Location Free : 如圖


Video IN ==> SAA7117 ==> BT656 ==> FIC8120 =MP4 stream --WLAN

WLAN -- FIC8120 ==> Video out
這像一組可以用來取代video cable。

以上兩個產品,如果加上stream server的話,應該可以做到多組接收吧。

有I2S/AC97,所以audio in/out都不是問題。

IDE & SD controller -- 可以幹嘛? 沒想到。

一顆單價大概是12塊(? 忘了)。
contact window : 忘了問...

以後再寫一些這個的SDK內容...

ffmpeg - on Sarge stable - why XOpenDisplay not found ?

在真正的開發環境上install ffmpeg :
  1. 先在proxy server上run netselect-apt,找到source mirror site。
  2. 將netselect-apt 的source.list中deb src 的那一行copy到dev platform的source.list上(dev platform 是用CD ROM裝的,所以沒有src link。
    copy 完後,修改/etc/apt/apt.conf (follow以前的post)。
    記得proxy server要把dev platform加入Allow。
    run apt-get update
  3. apt-get source ffmpeg
  4. 取得20050313(跟testing果然不一樣)
  5. apt-get install libsdl1.2-dev
  6. 到ffmpeg 下run config
    檢查一下 CONFIG_SDL=yes 這樣sample program : ffplay才會build。
  7. make
    這一個版本不需要修改XOpenDisplay,
    如果需要,才run make install (root)
ffplay make出來有兩個版本 : ffplay, ffplay_g。
ffplay_g是沒有strip的版本,可以gdb 來run。

奇怪的問題: testing 的ffmpeg為甚麼不能使用XOpenDisplay ?
查XOpenDisplay是declare在 /usr/include/X11/Xlib.h ,
sourcecode中,只要有 define __linux__ 就會include X11/Xlib.h 進來。
用 這一篇 http://lists.debian.org/debian-devel/2001/01/msg00979.html 的方法,可以偵測出compiler是否有define __linux__。

沒錯,因為make error是發生在link,不是為宣告,所以X11/Xlib.h是有include。
問題是X lib 沒有link進來..

用ldd check一下stanble (OK)的ffplay,看看link到哪些X11 library..
libX11.so.6 => /usr/X11R6/lib/libX11.so.6
libXext.so.6 => /usr/X11R6/lib/libXext.so.6
這兩個。
在testing搜尋一下..嗯。位置不一樣...
stable  在 /usr/X11R6/lib 下
testing 在 /usr/lib
但是為甚麼link不到?

新加坡 為何有權、有廉、又有能?

這是這一期天下雜誌的標題。
內容又是歸就到領導人的問題。

其實在freedom.org中,台灣民主程度已經列為世界第一。
媒體自由程度也和日本並列世界第一。

這樣人民高度自主,又有超級自由媒體環境下。
政治機關出了問題,就是人民自己的問題,因為是你自己投票選出來的。

怪誰? 怪自己。

:P

Another microkernel - kaneton

OSNews 介紹的又一個新的microkernel : kaneton,
法國人做的(據說是兩位學生),以教學為目的。
所以"易懂"與"大量的文件"是這個project的兩項特色。
其他像.. POSIX compliant, efficency..之類的都是次要因素。
也因此他可以完全遵守microkernel的精神-- 完全以message作為service間溝通的方式。
其他還有很多特點,光是OSNews的文章就寫了圖文並茂的7頁 : http://www.osnews.com/story.php?news_id=15018&page=1

但是... 他不是OpenSource !!

所以,說這麼多,也是白搭,除非你去那間法國學校就讀,選那們課,才會有機會看得到這一個據說是從bootloader到所有kernel source都是非常容易看得懂的microkernel的sourcecode。
OSNews這一篇文章後面的comment也都是這樣的評語
...說得天花亂綴,文件再多也沒有,沒有code可以看和修改,甚至沒有binary可以run,那樣跟國王的新衣有甚麼不同.....

星期二, 6月 27, 2006

Pika - MCX and Media Center

Microsoft推出Media Center雖然不怎麼成功。但是還是沒有放棄。
像下一代的Windows - Vista,就會大量加入Media Center的功能,
讓Media Center PC成為每一個家庭的Media Server。

除此之外 Microsoft也開始了Median Center的Client端的計畫......



MCX : Media Center Externsion

Media Center原本只包含Median Streaming 與play list的部份。
現在MCX補足了UI的部份。

所以你的 device只要有這兩部份,就可以播放Media Center的所有媒體,也可以控制Media Center,同時也讓你的 device與 Media Center有一致的操作方式。

這個Media Center Extension 就叫做 "Pika"。

Microsoft也為所有有興趣的家電業者,提供了一個mxc partner program。
讓大可以取的最新消息,同時提供意見回饋。

至於hardware mcu 的合作廠商,目前好像只有看到SigmaDesigns的8622L chip有提供Pika EVB(台灣的contact windows請找一下這個blog,大概在2005年年尾的archive..)。

詳細的消息在 Chris Lanier's Blog 中寫得比MS網站還來得詳細:
  • Hardware, operating system, and middleware independence and adaptability
  • OEM-local user interface flexibility and extensibility
  • Based on DLNA 1.0 framework and protocols (including an optional DLNA stack implementation)
  • Reliable wired and wireless network AV streaming
  • Standard and high-definition graphics and video
  • Support for Windows Vista-compatible premium digital TV, including U.S. Digital Cable (Open Cable)
  • Simple, inexpensive OEM licensing
但是詳細的內容與那個 MXC partner program 都要在 "2006 fall" 才開始。

需要製作投影片向老闆申請經費的PM們可以用google image搜尋 " mcx microsoft ",

可以找到microsoft幫你們做好的許多精美的 use scenario diagram。為你擘畫MCE + MCX的願景,包管讓您拿到大筆的經費。

在PM手下的RD們也不要介意,

依照慣例,MS應該會做好很多漂亮方便的 tools,讓你點一點,拉一拉 就完成一個產品。而且保證與你實力堅強的競爭廠商做出來的產品相差不到1%。

只要你準備好一些錢向這些hardware ready 的partner購賣SDK,和向MS談妥license就可以。



以上所述,如果與事實不符(或雷同),本人不負任何責任。 :P

exceed transfer allowance : Eponym

收到一封mail :
The following blog has been placed on-hold because it has exceeded its transfer allowance. To reactivate your blog please visit https://secure.eponym.com/upgrade/ to purchase an upgrade package that includes an additional bandwidth transfer amount.

All upgrade packages include additional disk space and bandwidth, email support, custom domain support, and the ability to remove all eponym.com branding and ads. Go to https://secure.eponym.com/upgrade/moreinfo.php for more information.

Username: checko
Hostname: checko.eponym.com
Allowed: 100MB
Used: 107MB

Thank you for using Eponym.com!
想不到我這種小水管的blog,竟然也會超過100M。

前一陣子因為blogger一直"維修中",加上種花電信一直把blogspot當作惡意網站.. orz...
所以想找個備份blog host,以防萬一。

當初心理盤算好,利用blog by mail 功能和blogger的自動通知工能和gmail的filter-forward方式做到同步post的動作。

所以找到這一家 https://secure.eponym.com/signup/

結果...寫不到幾篇,就出現..


然後就通知請購買upgrade頻寬的點數.
果然免費的就連"堪用"都做不到。唉。

星期一, 6月 26, 2006

startx fail : Cannot open device /dev/input/mice

上次還動得好好的,今天要進入X時,卻出現Error :
(EE) xf86OpenSerial:  Cannot open device /dev/input/mice
No such device.
是沒有mouse ?

用Xorg下命令試試:
$Xorg -allowMouseOpenFail
成功,但是果真沒有游標。

看看有沒有load mouse driver :
$lsmod | grep mouse
psmouse
到另一台機器去看看...
$lsmod | grep mouse
mousedev
psmouse
所以是沒有load mousedev ?

安裝後(modpeobe mousedev)試試,果然OK了@_@.

這是甚麼原因呀,誰把我的mousedev unload了???

X - startx - xinit

一般啟動X都是用startx。
/usr/bin/startx 是一個shell script..
到處找設定檔,如果沒有,就用default。
將$client, $clientargs, $server, $display $serverargs 這些參數都設好。
最後,用
xinit $client $clientargs -- $server $display $servargs
啟動X Windows。

xinit是一個程式,man 一下 ..X Window System initializer。
xinit其實是一個為X client開啟X Server的程式,所以理論上要給定 client 作為argument。
如果執行xinit時沒有給定argument,xinit就會子動採用以下command作為argument:
xterm -geometry +1+1 -n login -display :0
也就是說,單純的執行xinit,會在X windows下啟動一個xterm。

xinit的另一個特性,就是在client結束後,也會同時關閉X Windows。


不知道是不是真的是這樣..

Use VIM instead of VI as the default Editor - update-alternative

Debian 剛裝好時,是沒有安裝VIM的(只有安裝VI),所以也發生過幾次 number, syntax on沒辦法動作,而找了很久的情況(結果發現是VI,不是VIM)。

安裝了VIM後,要更改default edior,debian要用"update-alternative" 這個command。
#update-alternative --config editor

There are 4 alternatives which provide 'editor'.

Selection Alternative
--------------------------------------
1 /bin/ed
** 2 /bin/nano
3 /bin/nvi
4 /bin/vim

Press enter to keep the default[*], or type selection number :
輸入 4

OK!
結果沒有這麼簡單...-___-.

看看 vi 的位置:
$which vi
/usr/bin/vi -> /etc/alternatives.vi
再看看/etc/alternatives.vi..
/etc/alternatives/vi -> /usr/bin/nvi

update-alternatives 這個command就是用來更改/etc/alternatives下的link。
所以剛剛改錯了,應該用..
#update-alternatives --config vi
然後選vim。

apt-get : connect source list by proxy

Debian stable的一些package版本都太舊了一些,所以都要用testing 或 unstable。
這兩種都沒有辦法用CDROM安裝,都要連到網路上,所以,需要用proxy。

apt-get proxy的用法:

debian安裝完後,在/etc/apt下沒有apt.conf,所以要從 /usr/share/doc/apt/examples下copy過來。

copy完後,在 "Acquire" 那個{ } section中,加上:
Http
{
Proxy "http://10.3.3.194:8888";
};
就可以了。

可惜netselect-apt 這個command不聽apt.conf的話,所以firewall後面的debian 主機沒辦法用netselect-apt找到最佳source site。

星期五, 6月 23, 2006

Picasa and Picasa-Web are different

今天正要將U10相片拿出來時 ,想順道用一用Google Albrum。
所以download了Picasa(還check一下最低硬體需求:剛剛好..:P)。
結果download 下來後,竟然找不到web , albrum,突然想起這個picasa web好像還沒有中文介面,所以去google albrum check一下,果然,picasa-web和picasa是不一樣的兩個軟體,
只好再download一次。

但是....他們長得還真像呀..

vendor : Mobitek Communication Corp

使用MediaTek 的baseband, RF chip 的design house,
當然,也作MediaTek的代理。
量的單也是只能跟他們拿,不是跟MediaTek拿。

Software部份好像是跟ASUS合資的? 統一的UI。
但是一般功能都有.. mp3, camera.. 鈴聲..雙lcd..


Mobitek Communication Corp.
易連科技

C.M.Yin
尹其敏
cmyin@mbk.com.tw

Product Business Division Director
產品事業處 協理

Tel : 886-2-2657-0889 # 2009
FAX : 886-2-2657-7368
Web : http://www.mbk.com.tw
.

ffplay - in ffmpeg and SDL

要試試ffmpeg的sample program : ffplay,在configure時會check libsdl1.X-dev在不在。
所以要 install libsdl1.X-dev。

但是由ffmpeg svn 取的的source code。卻需要 libsdl version 1.3。

以為是我的debian version太舊,所以 upgrade到testing ,, 結果libsdl 也還是1.2。即使是sid,也是1.2,所以到 SDL 去看看,發現release只有1.2 和SVN 兩種..

不知道要怎麼從svn 取得1.3的版本.
同理,也不知道要怎樣取得ffmpeg以前的版本..

所以 .. 使用debian的版本的ffmpeg來試好了。

用netselect-apt 找一下deb mirror site,uncomment掉deb-src那一行。
$apt-get source ffmpeg
download 下來debian的ffmpeg(source & diff都有)。
apt-get 自動把patch上了(?)。

查一下ffmpeg的configure - sdl版本要求是1.21,所以這一版應該可以...

install libsdl1.2-dev
configure
make
出現 "unsolved reference XOpenDisplay, XCloseDiaplay"

google一下,大概有人說,這個section把他comment掉舊可以,因為只是跟full-screen mode有關。
查ffplay.c,剛好就是在 #ifdef HAVE_X11 的define block中,把這一段comment掉,make就OK了。

當然還要安裝xorg 和gnome。
測試
ffplay trial.mpeg
OK!

Try post in Galeon

just install gnome and xorg..
the default browser is Galeon.
..try post with it..
issues:
1. the HTML tab is not shown.
2. cannot get in the page directly

星期四, 6月 22, 2006

Why reinvent the wheel ?

Because that wheel is too expensive !!

星期三, 6月 21, 2006

ARMLINK : ~PRES8 and REQ8 Error

uLionel 買的是arm9的devkit。
用的是新版ADS - RealView。

先拿一個簡單的sample project:
init.S : 只有initialize stack,就跳到Main label.
main.c : initialize peripheral io,讓 pio pin hi/low --

make時出現
Error: L6238E: init..o(.text) contains invalid call from '~PRES8' function to 'REQ8' function Main.
看起來毫無頭緒的Error。init.S哪一個symbol有被Main reference到?

移除main.c,單獨make init.S -- OK (把 "b main"拿掉)。
移除init.S,單獨make Main.C -- semi OK - warnning = no entry point specified.

但是一起build就有問題。把main()剔除成空殼也一樣。
沒辦法,只好問google.. 真的有答案
http://mail.millennium.berkeley.edu/pipermail/tinyos-help/2004-October/006298.html

follow 這個thread的link 到 : http://www.arm.com/support/faqdev/1242.html

原來再ARM 5TE以後的architecture有LDRD,STRD這兩個一次load 8 bytes的指令,
RealView會用這兩個 instruction 來存取stack,所以要求 function的interface (B, BL)要保持stack align 8 byte。在linker上,這對應三個predefined symbols:
PRE8 : 這個object file預留8 byte aligned stack.
~PRE8 : 這個 object 的stack不是8 bytes aligned.
REQ8 : 這個object的stack 必須是8 bytes aligned
所以就可以看出前面的Error message"翻譯過後就是 init.o 包含一個需要不是8 byte align的call,到一個需要 8 bytes aligned的 object : main。

解決方法:

就強制stack對齊就好啦:
i) 所有STMFD command,注意要store 偶數個data。
ii)在assembly file 的head宣告: PRESERVE8。

如果很倒楣,沒有source code (例如是.a 的library 或是close source 的.o)。
那就... 用 "fromelf -C" disassemble .o 檔(...這是ARM website說的喔...),查stack operation的地方是不是都是8 bytes aligned.

如果是的話,用"--diag_suppress 6238"告訴 linker 不要作 stack aligh check 就可以消除這個Error。

也就是說,用手動取代自動。
WEB SITE還說舊版的ADS/SDT都沒有PREVS8 這個attribe,所以都會有Error。但是比較後面版本的ADS是以Align 8 的方式compile的,所以還是有機會。但是assembly code就沒有了。

所以說 opensource 還是很重要的事呀,否則你就要disassemble .o 出來check了......

EasyARM2200 - use devkit jtag adaptor

Richard 也買了EasyARM 2200 (這麼暢銷?)。
和Jimmy不一樣,他的JTAG adaptor是OK的。
所以他的target board可以設定在 RAM boot.

JMP : bank0 - ram, bank1 - flash.
AXD中JTAG configure - flash address - 81000000 (ref 以前的post, lpc2200的cs map是固定的)。

這樣就可以用AXD load 所有的code了(不用修改 loader script)。

附記: Jimmy 因為不能用"官方"的JTAG Adaptor,所以boot memory configuration的部份要手動。所以不方便,到不如 修改loader script的memory 來得快。

Alky and interesting surfing history

Alky - Cody Brocious - one of Cody's blog - Evelyn Beatrice Hall - Voltaire -

從另一個"run Windows Program in Linux/OSX"計畫開始,最後會link到 Voltaire..
Alky

類似WINE的計畫,目的是要在Linux/OSX上run MS Windows的程式,但是和WINE採用不同的方法。

WINE是直接拿Windows的程式來執行,所以需要實做Win32的DLL。
但是Alky 不一樣,他先做出一個parse程式,讀入並且分析Windows Program。
當有呼叫Windows API時,就跳出一個dialog,並且由MSDN取出這個API的prototype。然後寫好一個stub。讓你implement這個API。

當所有需要的API都reimplement後,這個程式也就可以像native program一樣run了。下面就是project網頁的示意圖:


Alky有點像是重新翻譯Windows 程式,轉換為native program。而WINE是提供需要的環境,一字不改的run Windows 程式。
這兩個是不一樣的.

這個計劃會由"翻譯" 大型,流行的game開始.
原因之一Game的windows api用得比較少,大部分都是和繪圖有關的DirectX,reimplement起來比較方便。
原因之二是他認為很多人stay with Windows是因為game的關係。

這個計畫的coordinat是Cody Brocious,他就是那個reverse iTune DRM的18歲hacker。
個人的blog上有一句話:
I disapprove of what you say, but I will defend to the death your right to say it.
是Evelyn Beatrice Hall說的,Google了一下這個人(真是沒完沒了@@),他是寫Voltaire傳記的人,所以這句話也有人說是Voltaire說的。

所以,Alky和Voltaire的Google距離是4。

Vender : ASCENDANT - DTV streamer

亞迅科技

各國數位電視信號產生器,有
Streamer - 將mpeg2節目資料modulize 成DVBT, ATSC,DVBH甚至日規的?。由RF BNC 接頭送出。
RFModulator - 將program data modulize,並且加入echo, niose.. 測試tunre的分辨力。
OFDM modular - PCI 卡,比較便宜(1X萬NT)的DVBT, DVBHmodulator。

OFDM modular 這一款的功能.. 支援各國的bandwisth (channel spacing/2) :5 ~ 8 MHz。
(像台灣就是6MHz)。
Bitrate range : 0 ~ 31.7Mbit/s
RF range : 400 ~ 862MHz.

這一款需要P3@3G以上,256MRAM。


業務經理

彭譽忠 U.C. Pon

uc.pon@ascendant.com.tw

02-2999-2626
台北縣三重市重新路5段609巷16號8樓之3
.

Free Personal Wiki - Wetpaint


有點像Google Page的東西(因為都是Ajax的關系?)。
但是是以Wiki系統的方式呈現。

所以編輯起來比一般的Wiki方便許多。可以放圖,首頁會自動產生subpage-link(當然,也可以自訂)。

和Google Page 最大不一樣的地方大概是Wiki的特性: 共同編輯功能吧。
在註冊時,就必須要選擇你的Wiki Site特性,事public to all,還是由你授權。

public to all 的話,就會像一般Wiki一樣,所有人都可以編輯。

可以使用中文,蠻方便的..

Blogline - @#DF%&%

最近blogline 的s內容出現很多亂碼,整篇都是。
想想是不是該換rss reader了,正在找的時候,看到這一篇.. Feedburner 亂碼大暴走
原來是feedburner出現 UTF-8 coding 問題,而且6/20晚就修好了。
難怪,blogline中有些新post都正常了。

好吧,這樣我也省得找rss reader,和 outpot/impot feedlist的麻煩事。


可以看出網路服務,使用者的忠誠度真是低呀...

星期二, 6月 20, 2006

Shell Script : test exit status of command

上次的shell script需要判斷執行程式exit code。-- 結果沒找到。
現在找到了,原來是用 ' $?' 符號。

常用的符號有:
$# 參數的數目
$* 代表所有參數
$? Exit status of previous command
$$ PID of this shell's process
$! PID of the most recently started backgroup job

這樣就可以啦。

使用的時候...
./probe_program   <先執行程式
if test $? = 0;then
echo ok
else
echo fail!
fi
...

ffmpeg - ffplay - libsdl1.2-dev

ffmpeg 已經包含一些demo code,其中一個就是ffplay

在configure中看到 ffplay.c 需要 sdl,也就是會先check sdl-config 這一個shell script存不存在。
用apt-file search sdl-config,發現是在libsdl1.2-dev 這個package中。

另外... 從ffmpeg的Makefile中看到..
刪除安裝: make uninstall - 會刪除在/usr/local 安裝的include 和library。
clean : make distclean - 會刪除所有configure, make 產生的檔案。

sdl 安裝後 --- 還是不行,因為 configuer 中說:
if test "_sdlversion" -lt 130 ; then
sdl_too_old=yes
..
所以要1.3版以上。

workrecord - ppt for product -

  1. 圖 - 系統架構 (hardware)
    • cpu 與週邊,著重在IO(network, usb, tuner, vga-in, hdmi, smcard)
    • cpu 內部 - arm, dspx2, demux
  2. 能力 - 產品
    • 播放影片。
    • 讀取stream
    • tuner - demux
    • vgain - 作monitor使用
    • hdmi - 高畫質影音monitor
  3. 限制
    • ram buffer 不足
    • 一般性運算不足
  4. 可能的使用方式
    • 一般TV,但是有與Media Center溝通能力,最為stream player。
    • 播放IP TV
    • 播放高畫質數位電視
就先照這樣寫吧... :(

PC Revive, 100 Million in next 3 years (?)

pchome電子報說的,大概記一下原因..
  1. NB 使用率提昇,但是DT 也沒有衰減(?)。
  2. 數位家庭 成熟,刺激新需求
  3. 新興市場 - 金磚四國

這幾點,除了金磚四國那一點外,其他的好像10年前就聽過了。

希望這次是真的..

想到SONY說的.. PS3將取代PC。大概就是第2點吧.
如果PS3成功的話:
  1. NB使用率提昇,DT市場為PS3取代
  2. 數位家庭成熟,PS3全面普及
  3. 新興市場,金磚四國。
如果PS3便宜一點,並且使用OpenSource的話,大概比較容易成功吧(我個人一廂情願的認為..)。

e.g & i.e

William's Blog看到的
原來,常用的
for example 是 e.g 的原因是拉丁文縮寫來的。

i.e 也是。

還有一篇說到,使用i.e時,後面就不用加上...etc了。

星期六, 6月 17, 2006

阿努比斯之門

看到灰鷹的介紹後,在博客來買了這本





試試flock的直接拖拉 貼圖..嗯。挺方便的 :)

星期五, 6月 16, 2006

Install svn in Debian

就是subversion,這是第二次install了,稍微紀錄一下,免得又要再google一次

svn 需要apache2(如果要http:\\ protocol) 和subversion。所以要install..
#aptitude install apache2 subersion libapache2-svn
完成後,要config apache2,
如果已經config好的,就只要修改dav_svn 這個module的設定。
在 /etc/apache2/mode-enabled 下的 dav_svn.cof:

這個file 裡面已經有些說明,follow 說明把一些 # 拿掉就可以。

SVNPath 放repository 的位置,改成 /var/local/repos

使用 Basic 的 AuthType 。 注意下面 AuthUserFile 的path,待會要create user password file。

完成後...

svn 不能自己create reposity folder,所以要手動:
#mkdir -p /var/local/repos
#chown -R www-data:www-data /var/local/repos
然後就可以叫svn create databas..
#svnadmin  create /var/local/repos
接著... create access passwd : (剛剛AuthUseFile)
#htpasswd2 -c /etc/apache2/dav_svn.passwd charles
把"charles"加入可以commit的名單中..

重新啟動apache2,就可以開始svn的操作。

svn 的操作會在folder中create ".svn" 隱藏目錄。
----- 所以有些動作不用指定 host 名稱..svn會自動由 .svn 這個folder的資料決定動作方式。

checkout時,要指定 svn path和 project。並且checkout會複製出整個folder。

update, diff, log 都是針對local 與 svn server間的動作,所以都要在project folder中動作,
這樣svn 才能根據 folder中的 ".svn" 來動作。

也就是說,一旦checkout一個project後,只要每次在folder中值行:
svn update
就可以保持這個project在最update的狀態。
(但是一般sourceforge的svn server不會容許你這樣作....)

也就是說,一旦checkout後,其他動作就只要在folder中動作,不用再記 PATH了。



一旦checkout後,svn有一份原始檔案列表,每次update, commit都是針對這分列表的檔案動作,所以要是新增一個檔案,svn 並不會 紀錄進去 (想想 build後的目錄,裡面有一堆.o 和log...)。

要在 project中新增檔案,要用 "add" command
svn add newfile
這樣svn就會把newfile加入你的local .svn sourcelist中,之後你 commit後,newfile就會被update到repository。

同理,delete file也一樣,要用"del" command:
svn del junkfile
才會修改sourcelist。



svn 的help是
 svn help command
.

ffmpeg - some code reading..

Start point : http://www.cse.msu.edu/~minutsil/linux.html 的ffmpeg_decode.c
ffmpeg 的library有libavformat和libavcodec.

libavformat是分析file, stream codec type用的。
這一篇(http://www.inb.uni-luebeck.de/~boehme/using_libavcodec.html)有說明。

目標是要查看分析file 標頭的code:

follow 以上說明文件,開啟video file :
av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL);

會將 filename開啟,填入相關資料到pFormatCtx 結構中。
function的最後3個argument 分別代表: fileformat, buffersize, format_parameter。
設為NULL, 0, NULL 以意思是: 用libavformat detect file format, default buffersize。
av_open_input_file -->  av_probe_input_file
av_probe_input_file則是一一呼叫registered codec中的 read_probe( ) function來解析。

所以要找 parse video file的code,就在各codec的 read_probe( ) function。

先找找register_codec 的function - av_register_input_format( ).

呼叫這個function的有.. 都在libavformat 下..很多 file都有..
並不是每個format 都有 probe function.

以 mpegvideo_probe( )來看..


先build一下好了

ffmpeg要從svn 取得,之後,和一般package一樣,
./configure
make
sudo make install
三步驟。
在common.mk 中可以看到library install 的path,在/usr/local/lib
build test program... 試試.


Linux : folder size - du -hs foldername

linux中要知道folder size : 使用du
$du -hs myfolder
可以man du 看看。
其中 "-s" 就是 summation的意思,否則 du 會將 myfolder內的file 一一列出。

"-h" 是 human readable 的意思

星期四, 6月 15, 2006

OLPC - LinuxBios

剛剛到LinuxBIOS的source svn 去看,config部份果然已經有olpc 目錄了。

另外寫一篇是因為...剛剛那一篇竟然沒辦法改...Q_Q..奇怪的blogspot...

Some Info About OLPC - wiki.laptop.org

olpc 的wiki site : http://wiki.laptop.org/index.php/Main_Page

裡面有詳細的進度和資料

Hardware :
  • CPU: AMD Geode GX2-500@1.0W
  • CPU clock speed: 366 Mhz
  • Graphics controller: Integrated with Geode CPU; unified memory architecture
  • DRAM memory: 128MB dynamic RAM
  • BIOS: 512KB SPI-interface flash ROM; LinuxBIOS open-source BIOS
  • Mass storage: 512MB SLC NAND flash, No rotating media
  • Liquid-crystal display: 7.5” Dual-mode TFT display 1200 (H) × 900 (V)
  • Keyboard: 80 keys, 1.2mm stroke; sealed rubber-membrane
  • Touchpad: Dual capacitance/resistive touchpad; supports written-input mode; vendor to be selected June 10
  • Audio: Analog Devices AD1888, AC97-compatible audio codec; stereo, with dual internal speakers; monophonic, with internal microphone
  • Wireless: Marvell 88W8388, 802.11b/g compatible;
除了強調低耗電,x86base外,沒有硬碟,用512M的NAND Flash,使用LinuxBios。
Wireless 使用前一陣子宣佈要將source code貢獻給linux kernel的Marvell。

What Make This system unique ?
  • 在cpu 和週邊device都power off時,lcd 可以維持在開啟狀態
  • Lcd 的reflash rate 可動態設定,減少電源消耗。
  • Wireless mesh : 無線網路都可以作router使用,減少ap 的需要。
  • Marvell network chip在 main cpu 停止時,依然可以forward packet,盡力完成mesh network 的工作。
有關 ODM ,在量產後,視需要olpc.org會將設計圖釋出,programmer將不需要NDA來取得spec文件。
(? 真的?)

Software 的說明太多了...

olpc 的整體環境稱作Sugar:
  • OS基於Fedora Core修改
  • 桌面環境是基於Python, GTK GUI
  • 和GECKO Html engine.
有關Sugar,網站上(http://wiki.laptop.org/index.php/OLPC_Python_Environment)已經有OSX, Windows, Linux 環境的package可以 download。





星期三, 6月 14, 2006

binary disassembler - ndisasm : tools in nasm

一般disassembler 都是用binutils 的 objdump,但是objdump 只能用來disassembly obj 和 elf 檔。
當要dissembly 沒有section 資訊的 binary 檔案時,就不能用了。

要disassembly binary 檔,就要用 nasm 附的tool : ndisasm。

debian 要安裝 nasm。

使用很簡單 :
$ndisasm -a bootsector
其中"-a" 是自動判斷sync point,也就是由jump 指令的target address來決定該處是data還是instruction.
(但是好像不怎麼有效)


assembly 是platform dependent的,objdump 有各種平台的版本。所以只要有cross-tool,都可以用。但是nasm 只是x86 版,所以其他平台要再找過。

vi - to edit a hex file (hex editor)

vi 要編輯hex 資料,要如何作呢?

這一篇回答中有提到,配合外部程式 xxd 就可以了。

man xxd 看看說明.. xxd 用來作hexdump 或是由 hex dump data 轉回文件。

簡單的用法:
$xxd     hexfile           - 將hexfile 這一個file hexdump 出來
$xxd -r dumpdata orgfile - 將hexdump 的 file 轉回原來的file
很方便,可以用來dump 所有檔案,看看標頭。

在vi 中使用是用 shell 命令 %!
$ vi myfile
因為是hexfile,所以都是看不懂的字。
[ESC]
:%!xxd
這樣就看到 hex mode 的 data了,可以進行編輯...
編輯完後
[ESC]
%!xxd -r
這樣又轉回看不懂的字
:wq
回存結束。很方便。
當然,也可以在外面先用xxd 將檔案轉成hexdump,用vi 編輯後 再用xxd -r 轉回來。
(不過這樣就比較麻煩了)

* 要注意的是,xxd 作reverse 時,碰到error會ignore ,不會有任何error message。
所以在編輯hexdata時,輸入了0-F以外的字,reverse時沒有 error message...

星期二, 6月 13, 2006

UnixLite - Lightweight Unix in C++

今天在OSNEWS看到的新聞,所以跟著到網站去看看...似乎是不錯的東西喔...

About:

UnixLite 是用C++寫的 ,相容於unix/linux的os。使用OpenSource, GPL 授權。
一個完整,可用的OS,通常需要兩部份: kernel 和 Application。
UnixLite 只包含kernel的部份 (就像Linux一樣)。

這個kernel 大部分都是用C++寫的,但是他使用 uClibc,而不是 glibc,所以size會小很多。
(所以也不會有一些複雜的standard template libarary....我猜的 :P )

UnixLite 實做了一些linux常用的system call (所以不是全部? 所以不是posix complait?)。和linux是 binary compatible,有些 gnu的軟體已經 ported成功了。

UnixLite 現在的目標是實做一個教學目的用的Unix 系統,將來,UnixLite或許會作為一個soft-realtime的 embedded OS。

UnixLite 是一個小而完整的Unix系統,並且附有完整的說明文件,對於想瞭解OS的學生和programmer來說是一個很好的學習環境。

功能上,UnixLite和Minix的差異是UnixLite支援Paging,但是Minix沒有。
(minux386 好像就有了...)

由於以C++實做,以OO方式設計,UnixLite大約只有20000行程式,kernel 也看起來比較modular 和易於瞭解,


Technical Features
  • 支援paging 和flat memory model (幾乎和linux一樣)。
  • 實做約80個posix system call
  • Binary compatible with Linux
  • run bash/gcc, 和一些UNIX tools
  • 基本的TCP/IP,足以執行簡單的http server
  • 約20000行程式
  • 以C++寫作,模組化且易於擴充
  • Minix的32-bit filesystem


從網站上看來,文件還沒有很多,但是已經提供 qemu的 image作測試。

FAQ部份說了更多..
  • unixlite不是microkernel
  • 原來要能使用glibc,kernel 要implement的api 要更多,這是他採用uclibc的另一個原因。
  • 只用到c++的一點基本語法。沒有用到:
    • Exception
    • 多重繼承
    • run time type id
    • operator overload (new, delete除外)
    • template.
大概看的一下source code,果然比minix容易瞭解一些(或許是因為還是0.2版的關係吧..)。



C++的OS,以前看過的就只有embedded in C++ 這一本書中 的ADEOS,原版本是用在x86上(186),但是有人port到ARM過。 可惜,都是很久以前的事了...

Meet IRC , again

IRC ?

只記得當年 在實驗室用過(當年-----算個 CFD 都還要連線,上傳程式,compile,batch run...隔天收結果的時代.)。

那時候覺得很新奇,在 irc channel上可以跟國外的人聊天。
所以也就認為 irc 就是個聊天程式,後來..Windows 出現...(對,當年用irc時,還是dos時代),之後一些IM出現,以為 IRC大概都不見了,偶而在一些source code readme中看到.."有問題,向irc XXXX 問",我也以為是文件太舊,所以還有 irc xxx。

但是,今天。在 jserv的blog,看到這篇 : Debian@Taiwan IRC 與線上研討會

? irc ? 以前那個 irc ? 而且這個討論會已經有2 年了。

所以也想 試試看,現在的 irc 是甚麼樣子...

jimmy's ChatZilla 輕鬆上IRC 有很詳盡的step by step 介紹。

原來,裝上 https://addons.mozilla.org/firefox/16/ 就可以了 :)

然後,舊還是以前 irc 的command :

/server irc.debian.org
/list --- 很久.... console mode比較快。
/join #dot -- 這個就是台灣debian的channel
.剛裝完,proxy 的問題...沒辦法通過,所以我又試試在adsl 那裡裝上ircii。嗯。OK。

把firefox的連線設定改掉後,就可以連得上了。



join #dot 後,果然有好多人呀....

而且 "那個" jserv 就來打招呼了。.... 還好,我沒有亂輸入一些測試 字串... :P

不可思議的是,竟然問我 是不是 owner of checko.blogspot.com ?
只好心虛的答應了.....想不到...... 竟然會被問這個問題....

後來,陸續又有一些人加入...

加入的人應該都是linux 或 open source的愛好者吧。
這樣真不錯,代表 使用linux和open source 的有很多人。



雖然已經過了10 多年,irc 還是一樣的有趣。

期待 下個月 5號的 Debian@Taiwan IRC Conf 囉。

星期一, 6月 12, 2006

電子零件代理商 : 凱悌

很多電子零件的代理商,IC,被動 都有。
在大陸也有對應的窗口,所以也適合 台灣設計,大陸生產的方式。




http://www.pernas.com.tw

客服電話 0800768123


業務專員
邱品蓁 Joyce Chiu
(02)82271188 ext 390 助理:陳秋方: 128
Joyce@pernas.com.tw

業務經理
陳章銘 Jacky Chen
(02)82271188 ext 212 助理:洪逸玲: 160
jackychen@pernas.com.tw
.

"Life is too short for the wrong job" - interesting adv

toung's blog 看到的。

這個廣告很有趣 (很對不起,把照片拿來用了,因為看照片 才能看出有趣的地方)






很有趣吧,剛好就放得下一個人耶。

星期日, 6月 11, 2006

An news alert site : ee3

ee3 http://www.eg3.com/(全名是甚麼 我倒是忘了),大概是一個雜誌吧。

每個禮拜會寄一封email 給你,內容是你有關的一些embedded system 的消息。
這就很像是google的new alert 服務一樣,不過ee3 的這個service 是很久以前就有了。

以前,在 web 資料還不很發達的時候,我就subscribe這個service。
那時的 mail 還是文字模式的呢。

但是 不知為什麼 (好像是因為公司換了email address),所以就停了。
今天不小心又進去了,才想到。雖然 現在類似的服務已經很多了,尤其是blog + RSS 讓你每天都有看不完的消息,但是我還是去subscribe 了一些,,,順便懷念一下以前每個禮拜一 看embedded system 新消息的日子。

星期六, 6月 10, 2006

No Fix for 'Critical' Hole in Windows 98, ME

大概說一下這一篇osnews的"新聞"
MS說,關於這個嚴重的漏洞,將不會有98, ME 的patch,因為要修正這個漏洞將會影響到很多其他的程式。
MS在四月時警告說,這個嚴重的漏洞是在IE上,會讓入侵者取得電腦的控制權。 MS已經公佈的Server 2003, XP 和2000 的patch,但是發現98和ME的不適用。
這..真是證明 將一大堆東西放在kernel 中 的確不是好主意,kernel 還是維持 "功能越小越好"。

這個有點呼應前一陣子 的復古 風 : http://checko.blogspot.com/2006/04/osnews-on-microkernel.html

星期五, 6月 09, 2006

Windows NT - Repaire Console

前面那麼多的麻煩,在這一篇 說明中 找到 NT 的修復主控台 http://support.microsoft.com/default.aspx?scid=kb;en-us;Q229716


在XP 的安裝CD上 開機,會讓你選 是否要進入修復主控台。按 ' R ' 進入。
之後會要你選一個要修復的hard disk (如果你有兩個hd 的話)。
之後會要你輸入administrator的password,三次失敗就quite。

之後 就會出現command console,書入 help 會列出所有的command。


利用這個console的幾項工具,來做出能讓XP Embedded 從NTFS開機的HD。

DISKPART 分割disk
FORMAT C: /FS:NTFS format 成NTFS
FIXBOOT C: 寫入開機磁區
FIXMBR C:

之後,就缺一個set partition active 了。這就要用平常的fdisk

這樣設好後的hd,就可以掛在 xp 機器下,將XPE 的image全部copy 過來。
就可以開機了

麻煩的是XPE的image folder copy動作還是要在xp 下作,因為沒有適當的 boot disk 可以做到ntfs write動作。

要注意:如果先在XP 下將HD format 成ntfs,並且copy 好xpe image folder,
再 進入reparire console 執行 FIXBOOT,FIXMBR的話,會因為 repaire console要求administrator password而進不去(雖然你的 XPE中並沒有設定用password)。

所以正確步驟是:
  1. 先將空白的HD裝在target上用CD開機,進入repaire console,用DISKPART, FORMAT,FIXBOOT,FIXMBR 將ntfs partition 準備好。
  2. 將HD裝到XP 系統上,再xp 中把XPE 的image folder copy 到HD中。
  3. 將HD裝回target上,用dr dos開機(可以用XPBurnXPPro的boot cd做出來)。fdisk ,set hd active。
  4. 移除target上的CD,用HD開機。
還是很麻煩.... Orz ... 東西都不在一起。而且看來沒有依存關係的步驟竟然會都 lock 住,一定要照順序。

ps : 使用superXX 的人,可以到"全手動安裝"才可以進入repaire console..

唉! 要是在只有一個IDEsocket的target上要做到XPE NTFS開機,不知道要怎樣作.....真是個 變扭 開發方式...

more about NTFS - boot sector , mbr

很多篇整理來的

上一篇的"Volume Boot Record" 是partition 的boot sector。
disk 的boot sector還是叫做 mbr 。
http://en.wikipedia.org/wiki/Volume_Boot_Record


NT Loader (ntldr) 安裝在 partition 的boot sector中,不需要裝在mbr。
ps boot process是:
  1. MBR code 尋找 active partition,load active partition的boot sector。
  2. boot sector code 在partition中找 ntldr 這個program
  3. ntldr 這個program 在partition中找 boot.ini 這一個檔案。
  4. 依照boot.ini 描述的內容。開機
http://www.edatapower.com/edpforum/viewthread?thread=7752

這一篇也有說明NT Boot動作:
  1. partition boot sector 找到partition中的 ntldr - load and run ntldr
  2. ntldr 切換32bit flat memory mode,找到partition中的boot.ini。
  3. ntldr follow boot.ini 的設定,run ntdetect.com 做出硬體列表。
  4. ntldr 列出 boot.ini 的內容,讓user 選擇。
這一篇說明NT的boot process說得很詳細,包括 NT Kernel,Service 的boot process都有寫出來。
BOOT.INI 的第二段 [Operation Systems] 使用ARC 作boot path 指定,"ARC"就是"Advance RISC Computer"。

有關boot error message:
Non-system disk or disk error
Replace and press any key when ready
這是DOS boot disk中沒有system file。重新format並且copy system file。

Boot: Couldn't find NTLDR
Please insert another disk
這是NT 的boot process但是bootloader不在disk上。(說明說..bootloade 要在第一個partition的mbt上?? 越說越不清楚 @_@)。
http://www.comptechdoc.org/os/windows/ntwsguide/ntwsbooting.html
http://www.felgall.com/ntsrv5.htm


BPB
在每個partition的sector0 中有一塊BPB (BIOS Parameter Block),存放partition的geometry parameter : sector number, head..。
這一塊的參數,同樣個一顆HD,在不同的hardware下作partition的話,結果會不一樣。
Win98 會忽略BPB中head 參數的檢查,所以不會出錯。
NT 會檢查所有參數,一有不合,就會出現"NTLDR is missing" 的訊息。
解決方法:
  1. 要在本機上進行partition。避免不同的hd controller會產生不同的BPB資料。
  2. DOS的 sys c: 命令會重寫BPB。可以用這個方法將BPB 寫正確,但這個動作同時將boot sector的ntldr覆蓋掉了。
http://www.teway.net/Support_techInfo.asp?NewsID=4123

Opensource firmwae for mp3 player : rockbox

OpenSource真是甚麼東西都有,連mp3 player 的firmware都有opensource, GPL的版本。

rockbox

適用的model 有:
  • Archos: Jukebox 5000, 6000, Studio, Recorder, FM Recorder, Recorder V2 and Ondio
  • iRiver: H100 and H300 series
  • Apple: iPod 4th gen (grayscale and color), 5th gen (Video), Nano and Mini 1st/2nd gen
  • iAudio: X5 (including X5V and X5L)
從manual 上看來,會要更換player上的bootloader,"加入" rockbox的image,然後就可以"dual boot"。
天哪,pc的壞習慣竟然蔓延到mp3 player上..
使用opensource mp3 player的好處是 支援的 codec更多了,這裡有詳細的列表。lossy,losses 的都有,幾乎除了WMV外,所有的codec都支援了 ( WMV implementation 需要floating point,所以目前只有20% 的速度,跟不上)。

除了一般播放功能外,也加上很多game....在那個小小的螢幕上(比較誇張的有DOOM和馬力兄弟)。

OpenSource的好處是,有source code,網站上 當然也很好心的提供developement guide,從setup linux platform (分為四種喔 : native linux, cygwin,colinux & vmware),也提供cross-tools的build方法,而且由於各種player的host mcu不同,網站上也提供arm, coldfire, sh-1 等mcu的cross-tool build procedure。

從sourcecode上看,host和codec dsp是用i2c溝通。
由此,link到 http://www.rockbox.org/twiki/bin/view/Main/DataSheets 裡面有詳細的各player的chip parts, spec。

還有Archos, iriver 的電路圖. 有些還是 手繪的,看來是用reverse engineering 做出來。

資料上比較多的是有關usb 和ATAPI, FAT。

從sourcecode上看來,除了原來hardware dsp 支援的codec外,其他的codec都是用host mcu 來跑,codec library 是以file的方式存在flash (或是hd?)中,需要時再load到ram中。

文件中說明,要MAS的DSP允許download firmware 到internal ROM中,但是spec不足,所以沒辦法做到利用dsp decode。


可惜,還是因為hardware不夠open,要是DSP部份也能open的話,社群應該就可以做出hardware codec。讓他支援更多的格式。

問題 : 既然host mcu 足以擔任software decode的動作,為甚麼他們還要加上dsp呢?

順便提一下,另一個,mp3 player 的open source 計畫 : http://s1mp3.org/
但是這個比較小,是在那種目前最常見的flash mp3 player 上,修改gui 的那種計畫。

星期四, 6月 08, 2006

XPE Workrecord - run in VMWare .. FAT

想用NTFS一直不成功,看看 book和online document都是說明FAT的方法。
所以先照著作一次試試..

要用VMWare來run的話,要準備兩個VM,一個是用來format , copy hd 用(develop),一個是用來run target(run)。
另外,還需要能作dos boot cd iso image的tool - 這裡用的是 free的CDBunerXP pro.

--- 以下就是 不可思議,超囉唆的 run XPE的步驟 ---

先follow 以前的說明,在vmware上run tap.exe (brain-dead的要xp環境,所以剛好在vm-develop上run)。得到device.pmq。"設法" 將這個file copy出來..

launch target designer, import device.pmq (去上個廁所,喝個茶,或是找meme聊個天...)。

選 check dependency (繼續剛剛沒聊完的部份...)

這部份就很囉唆,要解決dependency error,注意所有filesystem選項部份都要有FAT。

OK - build image

用qemu create一個512M的vmdk hd image (ref 前一篇)。

vm-develop (要install XP ),將 512M的hd 加入,是IDE HD 2.
用 XP 的磁碟機管理,把512M hd format 成fat。

用CDBurnerPro create一個iso image : 將bootcd功能啟動,data部份把 XP build好的 Windows Embedded Image folder copy進去,同時 bootprep.exe也要copy進去。

vm-develop 的cd 設定使用剛剛create好的 iso image,把iso image中,所有的資料都copy到512M的hd中。
vm-develop poweroff。

vm-target 設定 IDE HD 1 用512M 那個hd image,CD用剛剛create好的bootable iso image。
開機

進入cd boot - drdos, run fdisk ,將C drive partion 1 設為active.
到C: run bootprep.

vm-target reboot,使用C: 開機,就可以看到XP Embedded 開始動作了。

作第一次boot。-- 很久...



這些囉唆的動作,都是因為兩件愚蠢的事:

  1. xpe 的target designer 要在XP上run。
  2. 修改hd mbr的bootprep.exe要在dos下run。
但是DOS 開機大部分都是floppy,現在的機器哪裡會有floppy driver ?

其他還有..

XPE開機後,還會類似XP安裝完"第一次開機"的動作...probe hardware,install driver...
register data...作很久,然後reboot !

完全不像個embedded system。

NTFS - some basic concept

Partition Boot Sector

說得很不清楚.. 一個format成NTFS的"Volume"。Volume是disk 還是partition?
從"format" 來看,應該是 partition的意思。

但是這樣就沒有提到mbr 的部份。FAT和NTFS的MBR都是一樣的?
應該說..boot ntfs 和FAT的mbr 是一樣的?

0x00 | 3 | Jump 指定
0x03 | LongLong | oem id
0x0B | 25 | BPB
0x24 | 48 | Extend BPB
0x54 | 426 | Bootstrap Code
0x01FE | Word | End of Sector Mark
.BPB的用來存放NT loader (Ntldr)需要知道的disk geometry 資料。
NT loader利用BPB內的資料找到 MFT (Master File Table),
和FAT不一樣的是,NTFS的MFT並不是放在固定的sector位置(所以才要由BPB的資料找到)。

NT loader如果找不到valid MFT,就會認為這個partition 是沒有format好的。
這就是一個混淆的訊息..Boot sector都正常,帶是由BPB的資料找不當MFT,應該說"找不到MFT",而不是"unformatted",如果是"unformatted",會連 bootsector的資料都不對。
.MFT

MFT 有點像FAT,紀錄partition中所有file的資(位置?)資訊。
為了保險,MFT有兩份 : MFT 和MFT mirror。
MFT和MFT mirror的位置都紀錄在boot sector中( BPB ?)

XPE Workrecord - use VMWare - create vmdk by QEMU

想用VMWare來測試一下XPE的image。
但是VMWare create disk 最小size是1G。我喜享用256M。

上一次的blog : Use VMWare Player in Linux : create VMD with QEMU 中,剛好有sshlog 用qmeu create vmware type virtual hd的方法..

google "qemu windows" 到 http://www.h7.dion.ne.jp/~qemu-win/ download qemu 0.8.1 解開到c:\ 下。開啟cmd ,如果follow qemu的readme.txt,create出來的會是qmeu的virtual hd type。
所以 要用sshlog 中提到的方法,加上一些options:
#qemu.exe create -f vmdk harddisk.vmdk 256M
這樣就會產生harddisk.vmdk 這一個256M的virtual disk image。

接下來就可以用vmware - edit virtial machine,add hd - use existing vmdk。使用256M.vmdk。


opensource software真是不錯。好用多了 :)

星期二, 6月 06, 2006

XPE - About BootPrep

XPE 的開發方式真的讓人很不瞭解..

當做好target platform,又用SDI Loader 將disk image 都做好的人,要怎麼辦?
copy到 DOM中就可以開機了嗎?

...沒試過..但應該是不行,因為mbr 沒有寫入boot loader。

但是看到很多地方說有關 BootPrep 的事,概略是說...要用來boot的HD,要用BootPrep 修改一下,將FAT16的mbr改成可以用NTLDR開機。

那不就又要準備一個開機run BootPrep的環境,同時能"操作" boot HD(當然,這時候就不是用他開機了)。才能用BootPrep修改boot HD。

多麼愚蠢呀。

還好在MSDN 這一篇:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xpehelp/html/xeconbootprepexe.asp

有提到,只有使用FAT的boot partitiom才需要用BootPrep 修改。
若是使用NTFS,不用修改就可以直接開機了。

--- 我沒試過,希望真的是這樣。

XP Embedded - Book

寫了這麼多,這本書就有,STEP BY STEP 的一張一張圖說明。

xpe_book

想不到Embeddd system building 也可以做到像介紹Office的書一樣 ,。
難怪會是市佔率No2的Embedded OS..

XPE Workrecord - Stage III : SDI Loader

這部份要感謝TS的說明.

上一次做到 把 image (應該說是安裝目錄) build好後,接下來就是要將這些資料copy (安裝)到HD上了。

SDI Loader就是用來作image的裝置。
使用linux 的人應該會很瞭解這樣的動作..就是create 一個loopback device。fdisk,mke2fs, format,mount ....
啟動SDI Loader..
按"ADD"先create一個file - 就是要來當作虛擬硬碟的檔案。

sdl_add

然後輸入檔名,決定大小。
sdl_ds

完成後,SDI Loader就會顯示一個DiskID。

接下來,就要"mount"進來啦。

到"控制台" -- "電腦管理" -- "磁碟管理" 去看看。
(這時候會出現一個莫名奇妙的簽章精靈,要你打勾,我也不知道這個是幹嘛的..)。
就像是真的加入了一顆硬碟一樣,你會看到多了一顆硬碟。

sdl_pcm


要用的話,就要像真的硬碟一樣,create partition, format...完成後就會被加入。

到"我的電腦." 去看...已經可以看到這一個hd了.

然後把build好的XPE target folder (C:\Windows Embedded\) 整個copy進去..
再把這個partition 設為active。
然後run ntloader 把ntloader裝在這個partition的MBR上..

這樣image就做好啦。

然後就可以用 Windows Embedded\utilities\sdi2hd.exe 這個程式,把剛剛做到的那個*.sdi copy到DOM (或HD上)。



2000很奇怪,剛剛那個會變成動態磁碟區,這樣是不能開機的。

但是第二次 Add 後,就可以了,到 電腦管理 -- 磁碟管理,把那個"hd" 寫入簽章,然後就可以create partitionm format,這樣就是 "基本" 而不是"動態磁碟" 了。

星期一, 6月 05, 2006

XPE Workrecord - Stage II : Analyze the target device

上一篇的動作果然是太快了,在 XP Embedded Help 中,有說明如何決定要加入的hardware component有哪些...利用他提供的Target Analyze Tool..

Building a Run-Time Image

Analyze the Target Device

用TAP.EXE 偵測並列出target system上所有裝置。
  • TA.EXE是16 bit environment用的。比較陽春。
  • TAE.EXE是32 bit環境用的,列出的資料比較詳細。
也就是說,一個run在dos/98,另一個run在2000/xp
XPE CD1 包含一個preinstalled Windows Environment,讓你可以run TAP.exe而不用在tagret上安裝XP。硬體需求是:
  • CD bootable
  • P II
  • 128M RAM
  • VESA display
用VMWAR試試:

將CDROM指向XPE CD1 iso .. booting...果然一個XP 藍天綠地畫面出現,並且有一個console.
RUN TAP.EXE ... error : cannot create file !!
真是偉大,CD image當然不能create file,那要怎樣run TAP.EXE,又要如何將probe data copy出來呢? XPE Help 沒有說..
所以只好裝hd上去。format好一個partition..讓TAP.EXE能在上面create probe data。
ok,終於成功取出 devices.pmq.


Create Basic Configuration

開啟 Target Designer,New Project : trial2.
import 剛剛 probe的結果進來... File -- Import -- 選剛剛的devices.pmq. (要一陣子)。
完成後,Configure -- Check Denpency (又要一陣子)。 上一篇說過,有問題的部份會要你選定。

反覆 選定- Check Dependency - 選定 - Check Dependency -- 直到沒有error 發生。


Build the Run-Time Image

"Configuration -- Build Target Image",Build Type要選"Relase"因為"Debug"是用來作low level debug - OS or device driver debug 用的。

Build好的內容default是在 C:\Windows Embedded
Prepare the Target Device for Image Deployment






XPE Workrecord - Stage I

... 還是要向現實低頭... XPE已經是Embedded OS 市佔率No2。果然,被assign 有關XPE的工作..
  • Install Windows Installer (大部分都已經有了)
  • Install Tool (Typical - SN)
  • Install SQL Server Desktop Engine (Need Reboot)
  • Database Setup (DISC 2 - SN) . 這個要很久(15min on 3.2G P4, 2G RAM)
  • Remote Boot Setup : tftp server for PXE boot
完成。

Follow Document..
XP Embedded 是NT Embedded 的下一代,使用XP professional 的核心。

XP Embedded Platform 分為兩部份: target and component

Target 就是 要build出來的 XP image.
Component 就是 用來組成target image的元件(包含hardware, software, driver ..)。

XP Embedded 已經內含很多component,所以可以直接用 "Target Designer" 來組裝 target。

使用 Target Designer,像其他software developement environment一樣,New一個project (叫 *.slx)。

Target Designer 的layout 和名稱如下(from XPE Help Doc)
targetdesigner0.

"Design"的動作(或說是Configuration?)就是從Component Browser中,將需要的component "拉" 到 Configuration Editor中,如果有需要,再針對每一個component,從Detail Pan 中修改資料。

完成後,build image就OK。

看起來好像很簡單(一切只要用mouse就可以完成),但是Component Browser中的component有幾百(千?)種。要在裡面挑出 你要的,還是很花時間,所以 Target Designer 很"貼心" 的幫你規劃好一些"Template"
designtemplate
從中間挑接近你要的再來修改。

XP Embedded 已經修改了NT Embedded 的component dependency check 功能。
所以 接下來 選 "Configuration -- Check Dependency"

checkdep
一段時間以後,他就會將需要的其他component 拉進來。
如果有需要擬作決定的,會是為Error, 列在下方的output 中,
你只要 在上頭點兩下,他就會出現選項,讓你決定。

這樣把所有的error 都"決定"掉後。就可以 "Build Target Image" 了。



Internal Error 2738 - while installing..

要安裝XPE時,出現"Internal Error 2738"。
Google了一下,原來很多安裝程式(Corel Draw, Palm Desktop..)都有這個問題。

解決的方法是到microsoft去download scripting host ..

要注意的是現在到microsoft去download東西都要安裝Windows Geniune Verification。 所以,盜版的舊不用去試了。


嗯,還是open source 的好。

Try - pchome portal 2.0 : photo


可以外連嗎? 我在條款裡沒看到禁止外連..

啊...果然是看不到...

星期日, 6月 04, 2006

must have firefox extension for gmail..

一開始以免費,大容量為號招,現在 gmail 反而以他不斷推陳出新的功能 成為最好用的 mail 服務站台。

但是 還有一項不太方便,就是 附加檔 "attach" 功能,要一個一個用tab - browse 去選,很麻煩。
尤其是檔案很多時(例如要寄很多相片),更不方便。


比較起來outlook 以直接拖拉的方式,簡單,快速得多了。

但是,現在不一樣啦,

偉大的firefox 提供一個讓許多programmer展現想像力(和技術力)的browser 平台。
所以就有人為gmail 的"附加檔案"功能,寫了一個firefox的extension :


http://percro.sssup.it/~pit/mozilla/dragdropupload/

叫 Drag And Drop Upload Field Extension.

安裝這個extension後,在gmail 中要附加檔案,就變得跟outlook一樣囉。超方便。
只要 將要attach的檔案(們),拖拉到gmail 的"attach a file" link上,就可以了。

開發者也將這個extension加入firefox update : https://addons.mozilla.org/firefox/2190/
到那裡選"install Now"就可以囉。

在release note中看到,這個拖拉功能,好像也支援Flickr 網頁的"upload" Link。



這個消息是從 Jan's Tech Blog 看到的。安裝後,覺得很好用。

星期六, 6月 03, 2006

Bandwidth and playback smooth

準備demo用的影片,試撥...

  1. 使用拇指碟播放1080p mpeg2 file : 剛開始還OK。一陣子後,開始斷續..
  2. 改用2.5" 外接盒。還好,撥到一半,adaptor 跳開。
  3. 外接盒加上power - ok,adaptor不會跳開,但是撥到後面還是會斷續...
  4. 用NFS 撥..比較好,但是有些地方還是會斷續..
  5. 用3.5"外接盒(當然要加power),OK。有三處畫面瞬間跳過(不連續),不仔細看不會發現。
    -- 但是重編過kernel,加入ntfs 支援。


Thomas說 usb2.0 max bandwidth 400Mb, 網路100Mb。
但是還要看HD是幾轉,一般2.5"是4200轉,3.5"是5700轉。



發現 現在linux的 ntfs 支援已經很ok囉。 只要在config-- filesystem處 enable ntfs (read only) 就可以囉 :)

現在busybox的 mount 也很方便,不用指定 -t 選項,可以自動detect filesystem。超厲害。

linux 雖然很方便,但是最後加上appliation, custom module後,rom size (romfs + zipped kernel) = 6M !!!!

usb-storage and /dev/scsi/host?

在使用usb mass-storage裝置,modprobe usb-storage 並且插入裝置後,會在/dev/scsi下產生host?的目錄(使用 沒什麼人用的devfs 裝置檔案系統)。

但是插入不同的storage裝置,會依序產生host0, host1, host2....,拔掉 裝置後,這些host?不會消失。

所以在做自動mount usb storage時會很麻煩,不知道 device node要用host?

解決方法是..當裝置移除時,將usb-storage這個module unload。(rmmod usb-storage)。
當有裝置插入時,再 load usb-storage 舊可以讓裝置永遠在 host0。

自動偵測usb 裝置插入的方法? 還沒找到 :P

星期五, 6月 02, 2006

小強 捕獲!

就是這個...

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

DSC01753


不過這個 黏蟑螂板倒是蠻好用的,

看到,放板子,下去吃飯,上來看。就已經抓到了。
現在看電視時,偶而會聽到 這個小強 想掙脫 的聲音....


就這樣了,照片太噁心。還是不要寫太多....

我還幫他拍了很多沙龍照,想看的人,請移駕到flickr........

Shell's Variable : not space allowed before "="

Shell的variable 和 "="之間 是 不能有space的。 否則會被認為是command。

Shell 中 可以將program對stdout的輸出作為"賦值"使用:
ttt.c
main()
{
printf("hello");
}

tstshell.sh:
#!/bin/sh
var=`ttt`
echo "---" $var

會輸出 --- hello


但是要利用program的return 值的話...例如:
ttt.c

int main()
{
return 0;
}

tstshell.sh:

if test ttt;then
echo yes
else
echo no
fi
我沒有找到這種用法.......


還有 test 的 條件... STRING1 = STRING 2,其中 "=" 號 左右都要有space。
 if test $var = "TV" ; then
...

所以.. space 真的很重要呀.


所以shell script 語法有錯時,就加加減減些space吧。

pchome的portal 2.0...part II

今天進去看了一下,依照說明註冊了..嗯.. 實在是..不知道要怎麼用..
後來改用IE試試,果然畫面不一樣...
pchome 做的事果然有pchome的風格.. IE only 的半吊子 portal。

好不容易進去了... 原來就是像.以前 有一個 portal 的網站類似,但是pchome做起來果然有pchome的風格.. 只求有,不求好。

喔,受不了了...連開個新文章頁面都不知道在哪...我大概是過時了.

星期四, 6月 01, 2006

Online Zip/UnZip Site

Web 2.0 時代(其實我也不太知道怎樣是Web 1.0, 2.0)。所有東西都是要Web 化。

這個就是讓人作壓縮,解壓縮的網站。 http://krun.ch/

可以上傳file讓他壓縮後download回來/mail 出去。
或是上傳壓檔,讓他解開。

但是,要擔心 隱私 的問題...


哎呀,這是在別人的blog看到的,但是是哪一個blog卻忘了,針對不起他...

網誌存檔