ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2009年12月3日 星期四

opensource的問題就是版本問題,版本進的很快,有時又dist採用的版本和你要用的版本不一樣。
所以要裝多個版本到系統上。
update-alternatives 就是用來管理這些版本的工具。
一般會用java 來舉例,但是我是在python 遇到這個問題:
ubuntu 9.10 已經不用 python 2.5 了,可以GAE卻步支援 python2.6
方法就是 install python 2.5 和 python 2.6
然後用 update-alternatives 來管理

2009年12月1日 星期二

Enable remote X server in ubuntu 9.10

ubuntu 9.10 的 X Server 設定改了。 gdm 設定檔是: /etc/gdm/gdm.schema 要 enable remote X Server,要修改成:
  <schema>
    <key>security/DisallowTCP</key>
    <signature>b</signature>
    <default>false</default>
  </schema>
允許 TCP connection。 完成後重新啟動 X, gdm (重開機比較快)。 然後可以用 nmap 看一下 X11 port 有沒有 service。 另外,還要用 xhost command 允許 client host 連線:
xhost +  允許所有 host 連線
Client 端就只要設定 DISPLAY 變數到 Server ip:display number 就可以。 從 nmap 可以看到 X server listen port, X 從 6000 開始。 所以 Client 要設:
export DISPLAY=192.168.145.143:0
就可以。
另外,Server都設好後,可以用
ssh -X 192.168.144.250
連線到 client,用 -X option 告知將要進行X session forward。 連線後,可以用
echo $DISPLAY
localhost:10.0
看一下。 然後,執行任何 x client ap
同樣的,在 gdm.schema 剛剛修改的後面有xdmcp 的設定,default 是關閉,可以把他打開。 Client 端可以用 ubuntu 附的 Tsclient (遠端桌面),可以選 xdmcp,但是 default 是沒有安裝。 所以要手動 install xnest。
aptitude install xnest

Enable "Key sequence to Kill the X server" in ubuntu 9.10

ubuntu 9.10 把 disable X server 的 shortcut 拿掉了。 要重新 enable 的話,要:
  1. System->Preferences->Keyboard
  2. Layouts tab --- Layout options
  3. “Key sequence to kill the X server”. Check “Ctrl+Alt+Backspace”

2009年11月27日 星期五

Auto Launch Network Management without asking password

ubuntu 9.10 有開機後自動login功能,但是要啟動networking 時,竟然還要問password,這樣還是白搭。 要自動輸入password的法就是設定 network applet 可以讓所有人使用:
  1. 再network manager applet 按右鍵,選 edit connection
  2. 選Wired或Wireless tab,然後選一個connection , edit
  3. 勾選下面Available to All Users
這樣下次重開機就可以自動使用網路了

2009年11月17日 星期二

Install Android SDK in Windows

安裝 Android SDK - 1.6 以上的安裝方式已經跟以前不一樣了。

現在都 follow Chrome 那種 download-install 的方式。
所以沒有網路連線能力的就沒拜法裝了
Download Android SDK : http://developer.android.com/intl/zh-TW/sdk/index.html

解開後,看 readme 就會有說要 run SDKSetup.exe。

有 proxy 的在 SDKSetup.exe 啟動 timeout 後再到 Settings 去設。

然後就會出現一堆 可以download 的 SDK,勾選後就會download 囉。
會download 在 SDKSetup.exe 的 folder 的 platform 下。
所以最好把 解開的 android-sdk-windows copy 到適當的地方
裝完 SDK 後再去裝 Eclipse 和 ADT plugin,因為裝完後 。 要去設 Eclipse 的 Android SDK location。

Windows - Preference - Android : SDK Location 選 Browse。
他會在你指定的位置找 Tools 這個 folder,所以指到解開的 android-sdk-windows 下就可以。
他就會自己找到你 run SDKsetup.exe 後 download 下來的 SDK。

最好把 C:\android-sdk-windows\tools 加到 path 裡,因為還有很多時候會要開console run 其中的command。

這樣就裝完了,可以follow http://developer.android.com/intl/zh-TW/guide/tutorials/hello-world.html

2009年11月12日 星期四

ubuntu 9.10 on IBM R40e

The problem on the noise spark of LCD panel is the "Visual Effect".
Just turn off all the visual effect on "Preference - Apperence", the noise spark disappeared.

2009年11月2日 星期一

原來Django 的 setup.py install 動作,就是copy 到 python\lib\site-package 裡。 裝在XP 是 follow 這一篇: http://djangoframework.blogspot.com/

R40e display chip

R40e 的 Display Driver 是 ATI Radeon IGP 330M。 是一款整合晶片。 其實顯示部份是 ATI Radeon RS200。 看 ThinkWiki 才知道的。 這一頁有說如何 install Ati 官方 driver for ubuntu 9.04 但是這個:IGP 330M (RS200) 太古老了,不在支援列表裡。
看來 R40e 要上 9.10 應該要很久吧...搞不好永遠不可能 XD

2009年10月27日 星期二

mencoder, libstdc++5, 還有手動 download codec 解開放在 /usr/lib/codecs

2009年10月2日 星期五

Virtualbox : clone vm hd image

原來 clone hd image 的教學在: Creating testbed networks of virtual machines, host Windows XP, guest Redhat Enterprise Linux command 大概就是:
vboxmanage clonevdi Master.vdi node1.vdi
大小寫有關,應該是:VBoxManage 在 /usr/bin

RDP function for close source Virtualbox

close source version virtualbox 的額外功能除了 usb 以外,還有一個就是 rdp 遠端連線功能。

這個遠端連線是由 Virtualbox 提供的,不是 guest OS。所以即使 guest OS 沒有遠端桌面功能(或是 disable 了遠端連線),我們還是可以經由 virtualbox 的 遠端桌面 連線 guest OS。

在 Setting 的遠端桌面 有一個 port number。
假設 該 server (不是 guest OS) 的 ip 是 192.168.145.72。
port number 是 3389
我們只要用遠端連線程式,連到 192.168.145.72:3389
就可以連過去了。

2009年9月16日 星期三

clone partition/disk to another partition/disk

原來是 clonezilla - 作 disk to disk copy. 可以選用 clone zilla live 開機。 但是要記得 size不一樣時,target disk 會有一些沒有 allocate 到。 如果要全部都用到,要記得進入 expert mode,加入 -k 選項。
詳細還是要看 原網站說明
另外一個選擇是 partclone,是單一的程式,console mode。 clone partition 的 command 大概是:
$ partclone.extfs -b -d -s /dev/hda1 -o /dev/hdb1 

2009年9月9日 星期三

mysql how to - step by step

MySQL 的 step by step 教學 (操作部份),參考 gentoo 的文件。 大概說明一下: MYSQL 裡有很多 DATABSE。 DATABASE 裡面有很多TABLE。 TABLE 裡面的就是資料 - record。 record 是由很多 FIELD 組成的,這些FIELD 在 TABLE create 時就要決定好。 mysql 的操作就是對這些 record 作增加,查詢,刪除,合併...
mysql 裡有自己的user , password 和權限。用 GRANT 命令來指定。

白痴..

真是個白痴,刪掉了 /etc/mysql,所以整個 apt 都爛掉。 因為想重新安裝 /etc/mysql ,結果把 mysql-common 刪掉,導致連 X 都近不去了。 後來發現是 gdm 被移除而已。 所以? 只好在 VM 上重裝 lenny,然後把 /etc/mysql copy 回來囉。 真白痴 XD
結果 缺 debian-start,這個要 install mysql-server package 才會有。 --但是一旦裝過,purge 後重裝,竟然不會出來....@_@

django - install

django 要安裝, 大概就是:
  • 安裝apache2
  • 安裝 mod_python for apache2
  • 安裝django
  • 安裝 mysql
設定
  • 先用 django admin create 一個 site folder 和 site data
  • 在 apache2 中指定一個location,轉 python run django code
  • 設定path 參數到剛剛 create 的 folder (上一層)
看這篇:Howto forge 的 install django on Lenny

2009年9月8日 星期二

code reading : sample code of ffmpeg : avcodec_sample0.5.c

av_register_all( ) 建立起所有 support codec, decoder, demuxer, muxer... 的 linking list。


av_probe_input_format2( ) 會讀取 file 內容,從標頭猜測 格式。

實際上這一段就是一一呼叫所有 codec 的 XXX_probe( ) function,取出score,score 最高的codec 就是了..

probe 和 decode 在不同的目錄:
  • probe : libformat
  • decode : libavcodec
用 CODEC_ID 來傳遞, probe 得到 CODEC_ID,再由 ID (string compare) 找出codec function table.

decode file stream 是利用以下 data sequence:
/* Start codes. */
#define SEQ_END_CODE            0x000001b7
#define SEQ_START_CODE          0x000001b3
#define GOP_START_CODE          0x000001b8
#define PICTURE_START_CODE      0x00000100
#define SLICE_MIN_START_CODE    0x00000101
#define SLICE_MAX_START_CODE    0x000001af
#define EXT_START_CODE          0x000001b5
#define USER_START_CODE         0x000001b2

GCC - library link order

http://www.network-theory.co.uk/docs/gccintro/gccintro_18.html 2.7.1 Link order of libraries linker 尋找 extern function 的搜尋順序是 follow command 的指示,依次從左到右。 所以在指定 -l 外部 library 時,順序很重要:
$ gcc -Wall calc.c -lm -o calc   (correct order)
With some linkers the opposite ordering (placing the -lm option before the file which uses it) would result in an error,
$ cc -Wall -lm calc.c -o calc    (incorrect order)
main.o: In function `main':
main.o(.text+0xf): undefined reference to `sqrt'
因為command 的order,calc.c 後面沒有寫明任何 library,calc.c 使用到的sqrt 雖然有定義在 libm ,但是command 列在calc.c 之前,所以 linker 找不到。 When several libraries are being used, the same convention should be followed for the libraries themselves. A library which calls an external function defined in another library should appear before the library containing the function. 例如, data.c 使用到 linear programming library : library,library 又使用到 math library : libm。所以正確的linking order 是:
$ gcc -Wall data.c -lglpk -lm
since the object files in ‘libglpk.a’ use functions defined in ‘libm.a’. 目前大多數的 linker 都會(重複?)搜尋所有指定的 external library,所以 linking order 在目前似乎沒那麼重要。 但是當你在build 時遇到 undefined external,而你又確定該 symbol 是有定義的,或許試試是不是 linking order 的問題。
還有另一個問題是重複的function,如果一個function 在兩個 external libary 都有定義,linker 會採用 linking order 在前面的那個 libary (依照找到的順序)。

build ffmpeg sample in mingw - success

Linking Order 有關,從 install log 看 ffmpeg.exe 的linking order:
-lavdevice -lavformat -lavcodec -lavutil -lswscale -lm
這樣那個 avcodec_sample_0.5.0.c 就可以 build 了。 ./a.exe 出現 segment fault. 用 dbg run
(gdb) run
Starting program: c:\codepiece/a.exe
[New thread 2472.0x6a0]

Program received signal SIGSEGV, Segmentation fault.
0x0040cccd in url_open ()
(gdb) bt
#0  0x0040cccd in url_open ()
#1  0x0040f399 in url_fopen ()
#2  0x004025c1 in av_open_input_file ()
#3  0x0040144c in main (argc=1, argv=0x3e2430) at avcodec_sample.c:51
知道是因為沒給 argument,所以 open url,給定一個 mpg file後就 OK 了。 這個sample 會將 mpg 存為 6 個 ppm file...

make fail - disable all encoder in ffmpeg

阿,上一篇把所有 encoder都disable 的話會fail...
c:/ffmpeg/build/libavcodec/libavcodec.a(snow.o):snow.c:(.text+0x4a57): undefined reference to `ff_epzs_motion_search'
c:/ffmpeg/build/libavcodec/libavcodec.a(snow.o):snow.c:(.text+0x4bba): undefined reference to `ff_get_mb_score'
c:/ffmpeg/build/libavcodec/libavcodec.a(snow.o):snow.c:(.text+0xf64d): undefined reference to `ff_rate_estimate_qscale'
c:/ffmpeg/build/libavcodec/libavcodec.a(snow.o):snow.c:(.text+0xfb74): undefined reference to `h263_encode_init'
c:/ffmpeg/build/libavcodec/libavcodec.a(snow.o):snow.c:(.text+0xfc0f): undefined reference to `ff_rate_control_init'
c:/ffmpeg/build/libavcodec/libavcodec.a(snow.o):snow.c:(.text+0x10894): undefined reference to `ff_rate_estimate_qscale'
c:/ffmpeg/build/libavcodec/libavcodec.a(snow.o):snow.c:(.text+0x10ce0): undefined reference to `ff_init_me'
c:/ffmpeg/build/libavcodec/libavcodec.a(snow.o):snow.c:(.text+0x1184d): undefined reference to `ff_rate_estimate_qscale'
c:/ffmpeg/build/libavcodec/libavcodec.a(snow.o):snow.c:(.text+0x11886): undefined reference to `ff_write_pass1_stats'
collect2: ld returned 1 exit status
所以重新打開好了...(雖然看起來好像開 h264 encoder就可以..)

ffmpeg config log

因為只是要try decode,所以關掉一堆功能.. config log:
$ ../ffmpeg-export-2009-09-02/configure --prefix=/mingw --disable-debug --disable-optimizations --disable-stripping --enabl
e-memalign-hack --enable-gpl --enable-static --disable-shared --disable-ffserver --disable-altivec --disable-amd3dnow --dis
able-mmx --disable-mmx2 --disable-sse --disable-ssse3 --disable-yasm --disable-encoders --disable-hwaccels --disable-indevs
 --disable-protocol=gopher --disable-protocol=http --disable-protocol=rtmp --disable-protocol=rtp --disable-protocol=tcp --
disable-protocol=udp --disable-network
install prefix            /mingw
source path               /c/ffmpeg/ffmpeg-export-2009-09-02
C compiler                gcc
.align is power-of-two    no
ARCH                      x86 (generic)
big-endian                no
runtime cpu detection     no
yasm                      no
MMX enabled               no
MMX2 enabled              no
3DNow! enabled            no
3DNow! extended enabled   no
SSE enabled               no
SSSE3 enabled             no
CMOV enabled              no
CMOV is fast              no
EBX available             yes
EBP available             no
10 operands supported     yes
gprof enabled             no
debug symbols             no
strip symbols             no
optimizations             no
static                    yes
shared                    no
postprocessing support    no
new filter support        no
filters using lavformat   no
network support           no
threading support         no
SDL support               yes
Sun medialib support      no
AVISynth enabled          no
libdc1394 support         no
libdirac enabled          no
libfaac enabled           no
libfaad enabled           no
libfaad dlopened          no
libgsm enabled            no
libmp3lame enabled        no
libnut enabled            no
libopencore-amrnb support no
libopencore-amrwb support no
libopenjpeg enabled       no
libschroedinger enabled   no
libspeex enabled          no
libtheora enabled         no
libvorbis enabled         no
libx264 enabled           no
libxvid enabled           no
zlib enabled              no
bzlib enabled             no

Enabled decoders:
aac                     ffv1                    pcm_s32be
aasc                    ffvhuff                 pcm_s32le
ac3                     flac                    pcm_s8
adpcm_4xm               flic                    pcm_u16be
adpcm_adx               flv                     pcm_u16le
adpcm_ct                fourxm                  pcm_u24be
adpcm_ea                fraps                   pcm_u24le
adpcm_ea_maxis_xa       gif                     pcm_u32be
adpcm_ea_r1             h261                    pcm_u32le
adpcm_ea_r2             h263                    pcm_u8
adpcm_ea_r3             h263i                   pcm_zork
adpcm_ea_xas            h264                    pcx
adpcm_g726              huffyuv                 pgm
adpcm_ima_amv           idcin                   pgmyuv
adpcm_ima_dk3           imc                     pgssub
adpcm_ima_dk4           indeo2                  ppm
adpcm_ima_ea_eacs       indeo3                  ptx
adpcm_ima_ea_sead       interplay_dpcm          qcelp
adpcm_ima_iss           interplay_video         qdm2
adpcm_ima_qt            jpegls                  qdraw
adpcm_ima_smjpeg        kmvc                    qpeg
adpcm_ima_wav           loco                    qtrle
adpcm_ima_ws            mace3                   ra_144
adpcm_ms                mace6                   ra_288
adpcm_sbpro_2           mdec                    rawvideo
adpcm_sbpro_3           mimic                   rl2
adpcm_sbpro_4           mjpeg                   roq
adpcm_swf               mjpegb                  roq_dpcm
adpcm_thp               mlp                     rpza
adpcm_xa                mmvideo                 rv10
adpcm_yamaha            motionpixels            rv20
alac                    mp1                     rv30
amv                     mp2                     rv40
ape                     mp3                     sgi
asv1                    mp3adu                  shorten
asv2                    mp3on4                  smackaud
atrac3                  mpc7                    smacker
avs                     mpc8                    smc
bethsoftvid             mpeg1video              snow
bfi                     mpeg2video              sol_dpcm
bmp                     mpeg4                   sonic
c93                     mpegvideo               sp5x
cavs                    msmpeg4v1               sunrast
cinepak                 msmpeg4v2               svq1
cljr                    msmpeg4v3               svq3
cook                    msrle                   targa
cscd                    msvideo1                theora
cyuv                    mszh                    thp
dca                     nellymoser              tiertexseqvideo
dnxhd                   nuv                     tiff
dpx                     pam                     tmv
dsicinaudio             pbm                     truehd
dsicinvideo             pcm_alaw                truemotion1
dvbsub                  pcm_bluray              truemotion2
dvdsub                  pcm_dvd                 truespeech
dvvideo                 pcm_f32be               tta
eac3                    pcm_f32le               twinvq
eacmv                   pcm_f64be               txd
eamad                   pcm_f64le               ulti
eatgq                   pcm_mulaw               v210
eatgv                   pcm_s16be               v210x
eatqi                   pcm_s16le               vb
eightbps                pcm_s16le_planar        vc1
eightsvx_exp            pcm_s24be               vcr1
eightsvx_fib            pcm_s24daud             vmdaudio
escape124               pcm_s24le               vmdvideo
vmnc                    vqa                     wnv1
vorbis                  wavpack                 ws_snd1
vp3                     wmav1                   xan_dpcm
vp5                     wmav2                   xan_wc3
vp6                     wmv1                    xl
vp6a                    wmv2                    xsub
vp6f                    wmv3

Enabled encoders:

Enabled hwaccels:

Enabled parsers:
aac                     dvdsub                  mpeg4video
ac3                     h261                    mpegaudio
cavsvideo               h263                    mpegvideo
dca                     h264                    pnm
dirac                   mjpeg                   vc1
dnxhd                   mlp                     vp3
dvbsub

Enabled demuxers:
aac                     iss                     pcm_u24be
ac3                     lmlm4                   pcm_u24le
aiff                    m4v                     pcm_u32be
amr                     matroska                pcm_u32le
apc                     mjpeg                   pcm_u8
ape                     mlp                     pva
asf                     mm                      qcp
ass                     mmf                     r3d
au                      mov                     rawvideo
avi                     mp3                     rl2
avs                     mpc                     rm
bethsoftvid             mpc8                    roq
bfi                     mpegps                  rpl
c93                     mpegts                  segafilm
cavsvideo               mpegtsraw               shorten
daud                    mpegvideo               siff
dirac                   msnwc_tcp               smacker
dnxhd                   mtv                     sol
dsicin                  mvi                     sox
dts                     mxf                     str
dv                      nc                      swf
dxa                     nsv                     thp
ea                      nut                     tiertexseq
ea_cdata                nuv                     tmv
eac3                    ogg                     truehd
ffm                     oma                     tta
flac                    pcm_alaw                txd
flic                    pcm_f32be               vc1
flv                     pcm_f32le               vc1t
fourxm                  pcm_f64be               vmd
gsm                     pcm_f64le               voc
gxf                     pcm_mulaw               vqf
h261                    pcm_s16be               w64
h263                    pcm_s16le               wav
h264                    pcm_s24be               wc3
idcin                   pcm_s24le               wsaud
iff                     pcm_s32be               wsvqa
image2                  pcm_s32le               wv
image2pipe              pcm_s8                  xa
ingenient               pcm_u16be               yuv4mpegpipe
ipmovie                 pcm_u16le

Enabled muxers:
ac3                     m4v                     pcm_mulaw
adts                    matroska                pcm_s16be
aiff                    matroska_audio          pcm_s16le
amr                     mjpeg                   pcm_s24be
asf                     mlp                     pcm_s24le
asf_stream              mmf                     pcm_s32be
ass                     mov                     pcm_s32le
au                      mp2                     pcm_s8
avi                     mp3                     pcm_u16be
avm2                    mp4                     pcm_u16le
crc                     mpeg1system             pcm_u24be
daud                    mpeg1vcd                pcm_u24le
dirac                   mpeg1video              pcm_u32be
dnxhd                   mpeg2dvd                pcm_u32le
dts                     mpeg2svcd               pcm_u8
dv                      mpeg2video              psp
eac3                    mpeg2vob                rawvideo
ffm                     mpegts                  rm
flac                    mpjpeg                  roq
flv                     mxf                     sox
framecrc                mxf_d10                 spdif
gif                     null                    swf
gxf                     nut                     tg2
h261                    ogg                     tgp
h263                    pcm_alaw                truehd
h264                    pcm_f32be               vc1t
image2                  pcm_f32le               voc
image2pipe              pcm_f64be               wav
ipod                    pcm_f64le               yuv4mpegpipe

Enabled protocols:
file                    pipe

Enabled filters:
crop

Enabled bsfs:
aac_adtstoasc           mjpega_dump_header      noise
dump_extradata          mov2textsub             remove_extradata
h264_mp4toannexb        mp3_header_compress     text2movsub
imx_dump_header         mp3_header_decompress

Enabled indevs:

Enabled outdevs:

License: GPL version 2 or later
Creating config.mak and config.h...

2009年9月7日 星期一

build ffmpeg sample in mingw

光是一個 av_register_all( ),就噓要 link 4 個 library:
gcc testffmpeg.c -lavformat -lavcodec -lavutil -lz

* 而且要按照這個次序..!!!!

至於那個 sample file,最後還要加一個library : lswscale

google 了一下: ffmpeg static library link order

發現有說明,因為ffmpeg 的各個 library 裡有重複的 object file,所以link order 很重要。

如果要做出一個單一的 library 包含現在的 library,好像要 --enable-gpl,同時 disable 一些 codec。


log -ffmpeg install

$ make install
install -d "/mingw/lib"
install -m 644 libavfilter/libavfilter.a "/mingw/lib"
ranlib "/mingw/lib/libavfilter.a"
install -d "/mingw/lib"
install -m 644 libavdevice/libavdevice.a "/mingw/lib"
ranlib "/mingw/lib/libavdevice.a"
install -d "/mingw/lib"
install -m 644 libavformat/libavformat.a "/mingw/lib"
ranlib "/mingw/lib/libavformat.a"
install -d "/mingw/lib"
install -m 644 libavcodec/libavcodec.a "/mingw/lib"
ranlib "/mingw/lib/libavcodec.a"
install -d "/mingw/lib"
install -m 644 libavutil/libavutil.a "/mingw/lib"
ranlib "/mingw/lib/libavutil.a"
install -d "/mingw/lib"
install -m 644 libswscale/libswscale.a "/mingw/lib"
ranlib "/mingw/lib/libswscale.a"
install -d "/mingw/include/libavfilter"
install -d "/mingw/lib/pkgconfig"
install -m 644 "/c/ffmpeg/ffmpeg-export-2009-09-02/libavfilter"/avfilter.h "/mingw/include/libavfilter"
install -m 644 "/c/ffmpeg/build"/libavfilter/libavfilter.pc "/mingw/lib/pkgconfig"
install -d "/mingw/include/libavdevice"
install -d "/mingw/lib/pkgconfig"
install -m 644 "/c/ffmpeg/ffmpeg-export-2009-09-02/libavdevice"/avdevice.h "/mingw/include/libavdevice"
install -m 644 "/c/ffmpeg/build"/libavdevice/libavdevice.pc "/mingw/lib/pkgconfig"
install -d "/mingw/include/libavformat"
install -d "/mingw/lib/pkgconfig"
install -m 644 "/c/ffmpeg/ffmpeg-export-2009-09-02/libavformat"/avformat.h "/c/ffmpeg/ffmpeg-export-2009-09-02/libavformat"/
avio.h "/mingw/include/libavformat"
install -m 644 "/c/ffmpeg/build"/libavformat/libavformat.pc "/mingw/lib/pkgconfig"
install -d "/mingw/include/libavcodec"
install -d "/mingw/lib/pkgconfig"
install -m 644 "/c/ffmpeg/ffmpeg-export-2009-09-02/libavcodec"/avcodec.h "/c/ffmpeg/ffmpeg-export-2009-09-02/libavcodec"/opt
.h "/c/ffmpeg/ffmpeg-export-2009-09-02/libavcodec"/vdpau.h "/c/ffmpeg/ffmpeg-export-2009-09-02/libavcodec"/xvmc.h "/mingw/in
clude/libavcodec"
install -m 644 "/c/ffmpeg/build"/libavcodec/libavcodec.pc "/mingw/lib/pkgconfig"
install -d "/mingw/include/libavutil"
install -d "/mingw/lib/pkgconfig"
install -m 644 "/c/ffmpeg/ffmpeg-export-2009-09-02/libavutil"/adler32.h "/c/ffmpeg/ffmpeg-export-2009-09-02/libavutil"/avstr
ing.h "/c/ffmpeg/ffmpeg-export-2009-09-02/libavutil"/avutil.h "/c/ffmpeg/ffmpeg-export-2009-09-02/libavutil"/base64.h "/c/ff
mpeg/ffmpeg-export-2009-09-02/libavutil"/common.h "/c/ffmpeg/ffmpeg-export-2009-09-02/libavutil"/crc.h "/c/ffmpeg/ffmpeg-exp
ort-2009-09-02/libavutil"/fifo.h "/c/ffmpeg/ffmpeg-export-2009-09-02/libavutil"/intfloat_readwrite.h "/c/ffmpeg/ffmpeg-expor
t-2009-09-02/libavutil"/log.h "/c/ffmpeg/ffmpeg-export-2009-09-02/libavutil"/lzo.h "/c/ffmpeg/ffmpeg-export-2009-09-02/libav
util"/mathematics.h "/c/ffmpeg/ffmpeg-export-2009-09-02/libavutil"/md5.h "/c/ffmpeg/ffmpeg-export-2009-09-02/libavutil"/mem.
h "/c/ffmpeg/ffmpeg-export-2009-09-02/libavutil"/pixfmt.h "/c/ffmpeg/ffmpeg-export-2009-09-02/libavutil"/rational.h "/c/ffmp
eg/ffmpeg-export-2009-09-02/libavutil"/sha1.h "/mingw/include/libavutil"
install -m 644 "/c/ffmpeg/build"/libavutil/libavutil.pc "/mingw/lib/pkgconfig"
install -d "/mingw/include/libswscale"
install -d "/mingw/lib/pkgconfig"
install -m 644 "/c/ffmpeg/ffmpeg-export-2009-09-02/libswscale"/swscale.h "/mingw/include/libswscale"
install -m 644 "/c/ffmpeg/build"/libswscale/libswscale.pc "/mingw/lib/pkgconfig"
gcc -DHAVE_AV_CONFIG_H -I. -I"/c/ffmpeg/ffmpeg-export-2009-09-02" -D_ISOC99_SOURCE -D_POSIX_C_SOURCE=200112 -D_FILE_OFFSET_B
ITS=64 -D_LARGEFILE_SOURCE -std=c99 -fno-common -fomit-frame-pointer -g -Wdeclaration-after-statement -Wall -Wno-switch -Wdi
sabled-optimization -Wpointer-arith -Wredundant-decls -Wno-pointer-sign -Wcast-qual -Wwrite-strings -Wundef -O3 -fno-math-er
rno -fno-tree-vectorize        -MMD -MF ffmpeg.d -MT ffmpeg.o -c -o ffmpeg.o /c/ffmpeg/ffmpeg-export-2009-09-02/ffmpeg.c
gcc -L"/c/ffmpeg/build"/libavcodec -L"/c/ffmpeg/build"/libavdevice -L"/c/ffmpeg/build"/libavfilter -L"/c/ffmpeg/build"/libav
format -L"/c/ffmpeg/build"/libavutil -L"/c/ffmpeg/build"/libpostproc -L"/c/ffmpeg/build"/libswscale -Wl,--warn-common -Wl,--
as-needed -Wl,-rpath-link,"/c/ffmpeg/build"/libpostproc -Wl,-rpath-link,"/c/ffmpeg/build"/libswscale -Wl,-rpath-link,"/c/ffm
peg/build"/libavfilter -Wl,-rpath-link,"/c/ffmpeg/build"/libavdevice -Wl,-rpath-link,"/c/ffmpeg/build"/libavformat -Wl,-rpat
h-link,"/c/ffmpeg/build"/libavcodec -Wl,-rpath-link,"/c/ffmpeg/build"/libavutil -Wl,-Bsymbolic -o ffmpeg_g.exe ffmpeg.o cmdu
tils.o -lavfilter -lavdevice -lavformat -lavcodec -lavutil -lswscale -lz -lm  -lvfw32
cp -p ffmpeg_g.exe ffmpeg.exe
strip ffmpeg.exe
install -d "/mingw/bin"
install -c -m 755 ffmpeg.exe ffplay.exe "/mingw/bin"
install -d "/mingw/share/ffmpeg"
install -m 644 /c/ffmpeg/ffmpeg-export-2009-09-02/ffpresets/libx264-baseline.ffpreset /c/ffmpeg/ffmpeg-export-2009-09-02/ffp
resets/libx264-default.ffpreset /c/ffmpeg/ffmpeg-export-2009-09-02/ffpresets/libx264-fastfirstpass.ffpreset /c/ffmpeg/ffmpeg
-export-2009-09-02/ffpresets/libx264-hq.ffpreset /c/ffmpeg/ffmpeg-export-2009-09-02/ffpresets/libx264-ipod320.ffpreset /c/ff
mpeg/ffmpeg-export-2009-09-02/ffpresets/libx264-ipod640.ffpreset /c/ffmpeg/ffmpeg-export-2009-09-02/ffpresets/libx264-lossle
ss_fast.ffpreset /c/ffmpeg/ffmpeg-export-2009-09-02/ffpresets/libx264-lossless_max.ffpreset /c/ffmpeg/ffmpeg-export-2009-09-
02/ffpresets/libx264-lossless_medium.ffpreset /c/ffmpeg/ffmpeg-export-2009-09-02/ffpresets/libx264-lossless_slow.ffpreset /c
/ffmpeg/ffmpeg-export-2009-09-02/ffpresets/libx264-lossless_slower.ffpreset /c/ffmpeg/ffmpeg-export-2009-09-02/ffpresets/lib
x264-lossless_ultrafast.ffpreset /c/ffmpeg/ffmpeg-export-2009-09-02/ffpresets/libx264-main.ffpreset /c/ffmpeg/ffmpeg-export-
2009-09-02/ffpresets/libx264-max.ffpreset /c/ffmpeg/ffmpeg-export-2009-09-02/ffpresets/libx264-normal.ffpreset /c/ffmpeg/ffm
peg-export-2009-09-02/ffpresets/libx264-slowfirstpass.ffpreset "/mingw/share/ffmpeg"

2009年9月6日 星期日

bookmark - ffmpeg and SDL tutorial

ffmpeg and SDL tutorial : 這個就是有名的 "How to write a video player in 1000 lines".


順便寫一下,這個也有說明 ffmpeg 的 source code architecture

www.wiki.multimedia.cx

其實這些link 在 ffmpeg 的主站就有link

bookmark : video sample site - mplayer

mplayer 的網站有放很多壓縮格式的 sample file:

2009年9月4日 星期五

SDL programming - draw pixel

SDL library 裝完後,就可以試試SDL。 先從 SDL 手動繪圖 (描點) 來看 : 參考的是 Linux Journal : a crash course in SDL 還有 SDL Wiki 看起來 SDL 的用發跟 DirectDraw 類似。 也是以 Surface 為操作主體。 在使用之前,要 作 initialize: SDL_Init(SDL_INIT_VIDEO);然後create 一個你要的 surface,可以任意指定這個 video surface 的 format (color depth, color space(?), dimension): SDL_Surface *screen; screen = SDL_SetVideoMode(640,480,16,SDL_FULL_SCREEN); 接下來就跟 DirectDraw 很像.. surface 的 structure 中包含 surface 的 raw data arrary (就像是 framebuffer一樣),可以直接作read/write pixel 的動作。 但是在操作之前,要lock surface,操作完後 unlock: Uint16 *raw_pixels; SDL_LockSurface(screen); raw_pixels = (Uint16 *)screen->pixels; 要"填寫" raw pixel value,可以利用 screen structure 中另一個資訊:format。 format 包涵 color bit 的 有效bit和 bit 位置的資料: 在 example program 可以看出來: Uint value; value = ((red >>fmt->Rloss) <<fmt->Rshift) + .... R.G.B 三色分別有對應的無效 bit 數 (Xloss) 和位置(Xshift) 還有 raw_pixels[] array 的 x, y 對應,可以依照 screen structure 的 pitch 的資料。 pitch 代表 一條 y line 的 byte 數。 example code 中,填寫 (x,y) 點的 offset 是:
screen->pitch/2 * y + 1
-- 因為 raw_pixels 是 Uint16,所以要/2。 畫完圖後SDL_Unlock(screen)。 再call SDL_UpdateRect(screen,0,0,0,0) 把 surface update 到真正的螢幕上。
完整code: #include "SDL.h" Uint16 CreateHicolorPixel(SDL_PixelFormat *fmt, Uint8 red, Uint8 green, Uint8 blue) { Uint16 value; value = ((red >>fmt->Rloss) << fmt->Rshift) + ((green>>fmt->Gloss) << fmt->Gshift) + ((blue >>fmt->Bloss) << fmt->Bshift); return value; } int main(int argc,char* argv[]) { SDL_Surface *screen; Uint16 *raw_pixels; int x,y; SDL_Init(SDL_INIT_VIDEO); atexit(SDL_Quit); screen = SDL_SetVideoMode(640,480,16,SDL_FULLSCREEN); SDL_LockSurface(screen); raw_pixels = (Uint16*)screen->pixels; for(x=0;x<256;x++){ for(y=0;y<256;y++){ Uint16 pixel_color; int offset; pixel_color=CreateHicolorPixel(screen->format,x,0,y); offset=(screen->pitch/2 *y+x); raw_pixels[offset]=pixel_color; } } SDL_UnlockSurface(screen); SDL_UpdateRect(screen,0,0,0,0); SDL_Delay(3000); return 0; } build command 可以利用 sdl-config 吐出 build optin:
gcc sdl1.c -o sdl1 `sdl-config --cflags --libs`

2009年9月3日 星期四

ffplay in gdb & ffmpeg library

試試在 gdb 裡面 run ffmpeg。
首先要build none-strip 版本。
先 configure --help 列出 configure option。其中有:
Developer options (useful when working on FFmpeg itself):
--disable-debug          disable debugging symbols
--enable-debug=LEVEL     set the debug level []
--enable-gprof           enable profiling with gprof []
--disable-optimizations  disable compiler optimizations
--enable-extra-warnings  enable more compiler warnings
--disable-stripping      disable stripping of executables and shared libraries
所以重新configuer,加上 --disable-optimizations --disable-stripping。
然後就可以開始make
gdb 的話,我是用 gdb-6.8-mingw-3 這個版本 (一樣,download bz2 解開,覆蓋 mingw 下)。
先照著 Tetralet 這一篇 作一次,了解 gdb 的使用方式。
還有 study area 這一篇 也是 step by step,也照著作一下。

ffplay.c 是ffmpeg 附的播放程式。可以從這邊開始 run,看 ffmpeg decode 的程序。
ffplay.c 的 decode 是在 open_stream( ) 中 create 的 decode_thread( ) 作得。
其中 libavformat/utils.c : av_read_frame_internal( ) 負責從 stream 中解出 frame。

follow 這一篇(http://ffmpeg.arrozcru.org/wiki/index.php?title=Static)的 ffmpeg build 步驟,ffmpeg include 和 lib 會被 install 在
/usr/local/include
/usr/local/lib
所以compile 的時候要加上 -I/usr/local/include -L/usr/local/lib -lavdevice -lavformat -lavcodec -lavutil -lswscale

如果在config ffmpeg 時指定 --prefix=/mingw ,就不用 額外 寫明 -I, -L path。

2009年9月2日 星期三

msys, mingw

follow 這個link 安裝 msys + mingw 時要知道的事:
msys 和 mingw 是兩個不一樣的東西。
msys 和 mingw 都有自己的 file hierarchy (bin, usr, lib,...)。
所以,當自己 download msys, mingw 的 package 下來安裝 (其實也就是解開-copy 覆蓋)時。
  • 屬於 msys 的 package,就要 copy 到 msys 的 folder root。
  • 屬於 mingw 的 package,就要 copy 到 mingw 的 folder root。
link 中,build ffplay 安裝 SDL lib 時,有一個地方好像寫錯:
Copy all the files from the lib folder to C:\msys\mingw\lib\.
Copy the SDL folder from the include folder to C:\msys\mingw\include\.
Copy all the files from the bin folder to C:\msys\mingw\bin\.
其中的 path 應該是
C:\mingw\lib\.
C:\mingw\include\.
C:\mingw\bin\.
因為follow default setting 的話, minGW 是 install 在 c:\mingw。
而且mingw 比 msys 先安裝,要怎樣 install 到 msys 的 folder 中呢?
這一篇有圖文並茂的 msys, mingw的安裝教學 (我沒看 )

2009年8月30日 星期日

安裝 SIP 4.8.2 python configure.py 的output:
This is SIP 4.8.2 for Python 2.6.2 on linux2.
The SIP code generator will be installed in /usr/bin.
The SIP module will be installed in /usr/lib/python2.6/dist-packages.
The SIP header file will be installed in /usr/include/python2.6.
The default directory to install .sip files in is /usr/share/sip.
The platform/compiler configuration is linux-g++.
Creating sipconfig.py...
Creating top level Makefile...
Creating sip code generator Makefile...
Creating sip module Makefile...
然後就是make , make install.. 發生error,,,, 所以用 aptitude install 現成的 :p 但是這個版本不夠build PyQt 4.5 ,需要 SIP 4.8.2 以上版本。

2009年8月17日 星期一

Virtualbox 3.0 USB in Debian Lenny

Virtualbox 3.0 (none open-source version) 支援 usb 裝置。

但是裝完後,要設定好 host linux 的 usb 使用權限,Virtualbox 才能正常的 access usb。

但是usb 的權限好像在很多地方設。

最後 follow 下面的文章:
Debian Lenny, VirtualBox USB device



Virtualbox USB not working in Debian Lenny

做的事情大概有:


Edit the rules in file /etc/udev/rules.d/91-permissions.rules for Lenny. Change around line 37 to:
   # usbfs-like devices
   SUBSYSTEM=="usb_device", MODE="0664"
   SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GROUP="usbusers", MODE="0664
重點設定 groupe,並且設定 mode。
不要忘記這個 groupe 是原來不存在的,要新增。

還有修改 /etc/init.d/mountkernfs.sh (line 75),原來是:
domount usbfs usbdevfs /proc/bus/usb usbfs -onodev,noexec,nosuid
一樣,加上groupeid 和 access mode:
domount usbfs usbdevfs /proc/bus/usb usbfs onodev,noexec,nosuid,
devmode=0664,devgid=46
其中 devgid=46的 46 是 usbusers 的 groupe id。

* 不要忘記要把 要使用 virtualbox的 user 加到 usbusers groupe 中。

2009年7月7日 星期二

initrd ? initramfs - todo

有關 INITRAMFS:
  • 要看一下 Documentation/early-userspace/README
  • Documentation/filesystems/ramfs-rootfs-initramfs.txt:
  • usr/Makefile: 中有 ramfs-input
grep 一下 CONFIG_INITRAMFS_SOURCE

2009年7月3日 星期五

gnu make 的 call function

這只是節錄 nmake 的 documentation:
The syntax of the call function is:    
$(call variable,param,param,...)
make 執行這道命時,會賦予param...一個暫時的變數名稱 $(1), $(2), etc. 變數 $(0) 則是 variable.

Then variable is expanded as a make variable in the context of these temporary assignments. Thus, any reference to $(1) in the value of variable will resolve to the first param in the invocation of call.

If variable is the name of a builtin function, the builtin function is always invoked (even if a make variable by that name also exists).

examples

This macro simply reverses its arguments:

reverse = $(2) $(1)
foo = $(call reverse,a,b)

foo 會是 `b a'.

This one is slightly more interesting: it defines a macro to search for the first instance of a program in PATH:

pathsearch = $(firstword $(wildcard $(addsufix /$(1),$(subst :, ,$(PATH)))))
LS := $(call pathsearch,ls)

Now the variable LS contains /bin/ls or similar.

The call function can be nested. Each recursive invocation gets its own local values for $(1), etc. that mask the values of higher-level call. For example, here is an implementation of a map function:

map = $(foreach a,$(2),$(call $(1),$(a)))

Now you can map a function that normally takes only one argument, such as origin, to multiple values in one step:

o = $(call map,origin,o map MAKE)

and end up with o containing something like `file file default'.

A final caution: be careful when adding whitespace to the arguments to call. As with other functions, any whitespace contained in the second and subsequent arguments is kept; this can cause strange effects. It's generally safest to remove all extraneous whitespace when providing parameters to call.

uimage 的 quiet_cmd_uimage ...

在找 uImage 的 Makefile 時,最後指向:
 arch/arm/boot/Makefile
其中:
quiet_cmd_uimage = UIMAGE  $@
     cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
                  -C none -a $(LOADADDR) -e $(LOADADDR) \
                  -n 'Linux-$(KERNELRELEASE)' -d $< $@  
但是我到處都找不到 ref quiet_cmd_uimage 和 cmd_uimage 的地方。 後來找到原來是 .. Kbuild
Kbuild 的 instruction:
  quiet_cmd_CMD = 要顯示的
       cmd_CMD = 要執行的
有關Kbuild 在 kernel/Documentation/kbuild/makefile.txt 有說明:
--- 6.7 Custom kbuild commands

        When kbuild is executing with KBUILD_VERBOSE=0, then only a shorthand
        of a command is normally displayed.
        To enable this behaviour for custom commands kbuild requires
        two variables to be set:
        quiet_cmd_<command>     - what shall be echoed
              cmd_<command>     - the command to execute

        Example:
                #
                quiet_cmd_image = BUILD   $@
                      cmd_image = $(obj)/tools/build $(BUILDFLAGS) \
                                                     $(obj)/vmlinux.bin > $@

                targets += bzImage
                $(obj)/bzImage: $(obj)/vmlinux.bin $(obj)/tools/build FORCE
                        $(call if_changed,image)
                        @echo 'Kernel: $@ is ready'

        When updating the $(obj)/bzImage target, the line

        BUILD    arch/i386/boot/bzImage

        will be displayed with "make KBUILD_VERBOSE=0".

uImage 和 mkimage

uImage 是能讓 u-boot 開機的 kernel image。 在u-boot 的 README 中的 "Building a Linux Image:" 有提到.. 不能用以前的zImage,bzImage。新的 kernel source已經新增一個 target 叫 "uImage"。 所以..
make xx_config
make coldconfig
make dep
make uImage
就可以build 出 uImage。 uImage 和以往zImage, bzImage 不同的是..她需要用 tools/mkimage 這個 tool 來包裝過:
  • build vmlinux (ELF binary format)
  • {CROSS_COMPILE)-objcopy -O binary -R .note -R .comment -S vmlinux linu.bin
  • gzip -9 linux.bin
  • 包裝:
    mkimage -A arm -O linux -T kernel -C gzip -a 0 -e 0 -n "Linux Kernel Image" -d linux.bin.gz uImage
有關mkimage 的help:
Usage: ../kernel/scripts/mkimage -l image
          -l == list image header information
       ../kernel/scripts/mkimage [-x] -A arch -O os -T type -C comp -a addr 
                                      -e ep -n name -d data_file[:data_file...] image
          -A == set architecture to 'arch'
          -O == set operating system to 'os'
          -T == set image type to 'type'
          -C == set compression type 'comp'
          -a == set load address to 'addr' (hex)
          -e == set entry point to 'ep' (hex)
          -n == set image name to 'name'
          -d == use image data from 'datafile'
          -x == set XIP (execute in place)

2009年7月1日 星期三

worklog : build android from source

取得 source 後,可以到 build 下看看..
build/core/build-system.html
然後,run
build/envsetup.sh
就可以多出幾個command,可以用 "help" 指令 (run 完後直接key "help")看一下..
Invoke ". build/envsetup.sh" from your shell to add the following functions to your environment:
- croot:   Changes directory to the top of the tree.
- m:       Makes from the top of the tree.
- mm:      Builds all of the modules in the current directory.
- mmm:     Builds all of the modules in the supplied directories.
- cgrep:   Greps on all local C/C++ files.
- jgrep:   Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir:   Go to the directory containing a file.

Look at the source to view more functions. The complete list is:
add_lunch_combo cgrep check_product check_variant choosecombo chooseproduct
choosetype choosevariant croot findmakefile gdbclient get_abs_build_var
getbugreports get_build_var getprebuilt gettop godir help isviewserverstarted
jgrep lunch m mm mmm pid printconfig print_lunch_menu resgrep runhat runtest
runtest_py setpaths set_sequence_number set_stuff_for_environment settitle
smoketest startviewserver stopviewserver tapas tracedmdump
其中有關"mm" 這個command 的使用方法,在 SipX Android Build Environment 有提到。
這個 build-system.html 也包含很多其他的說明,像是 # 如何增加一個 project 到 android build system # 各種 build target 的差異 # 各種 clean 的差異

2009年6月30日 星期二

.gvfs permission denied

新買的hd要掛在/home/james下。 所以
$sudo rsync -av /home/james/ /home/tmp/
結果出現 error :
rsync: readlink_stat("/home/james/.gvfs") failed: Permission denied (13)
看一下這個 folder 的 permission 是 r_x,沒有w。 查一下,gvfs是新的 gnome vfs 架構,使用gio library。 會在login x 的 user home dirctory 下 mount .gvfs folder 到gvfs。 所以..先logout,login 成其他人, umount /home/james/.gvfs 之後,就可以 rsync ..

2009年6月29日 星期一

ubuntu memory larger than 4G

MB : ASUS P5B Plus 裝上 8G的RAM後,free顯示只有3.6G。 所以follow 這一篇說明,update server image,reboot 後,就可以看到 8G了 (奇怪,是 6.?G)
$ sudo sudo apt-get install linux-headers-server linux-image-server linux-server

2009年6月26日 星期五

build pilot-link-0.12.4

在這download..
解開後,看 README,照著作:
./configure --prefix=/home/charles/pilot
make結果出現 error:
contactsdb-test.c:28:18: 錯誤: popt.h:沒有此一檔案或目錄
contactsdb-test.c: In function 「main」:
contactsdb-test.c:348: 警告: 「pilot_connect」 is deprecated (declared at ../include/pi-header.h:31)
make[2]: *** [contactsdb-test.o] Error 1
make[2]: Leaving directory `/home/charles-chang/pilot-link-0.12.4/tests'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/charles-chang/pilot-link-0.12.4'
make: *** [all] Error 2
看一下,是有 popt 這個 folder,也有 popt.h 呀。 所以用 ./configure --help 看一下.. 有這個選項:
  --enable-conduits       Build the userland conduits
所以 重新 configure..
./configure --enable-conduits --prefix=/home/charles/pilot
這樣出現的config message 就有:
  Userland Tools
-------------------------.
Build userland tools.... : yes
Support for popt........ : yes (internal)
之後再make 就 OK 了!

2009年6月25日 星期四

Building Git on Centos 5

是從這一篇看到的。- 這一篇就是copy 那一篇的... 需要的package有:gettext-devel expat-devel curl-devel zlib-devel openssl-devel download and build:
wget http://kernel.org/pub/software/scm/git/git-1.5.4.5.tar.gz
tar zxvf git-1.5.4.5.tar.gz
cd git-1.5.4.5
make prefix=/usr/local all
sudo make prefix=/usr/local install
要裝 man page的話:
wget http://kernel.org/pub/software/scm/git/git-manpages-1.5.4.5.tar.gz
cd /usr/local/share/man
sudo tar zxvf ~/git-manpages-1.5.4.5.tar.gz
然後就可以
git --version
man git
看看是不是 work.

2009年6月24日 星期三

rpmdb: Lock table is out of available locker entries

就是在 redhat 上 run yum command 出現的 error message:
$ sudo yum
rpmdb: Lock table is out of available locker entries
rpmdb: Unknown locker ID: bc0
error: db4 error(22) from db->close: 不適用的引數
error: cannot open Packages index using db3 - 無法配置記憶體 (12)
error: cannot open Packages database in /var/lib/rpm
Traceback (most recent call last):
  File "/usr/bin/yum", line 29, in ?
    yummain.main(sys.argv[1:])
  File "/usr/share/yum-cli/yummain.py", line 85, in main
    base.getOptionsConfig(args)
  File "/usr/share/yum-cli/cli.py", line 163, in getOptionsConfig
    disabled_plugins=self.optparser._splitArg(opts.disableplugins))
  File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 164, in _getConfig
    self._conf = config.readMainConfig(startupconf)
  File "/usr/lib/python2.4/site-packages/yum/config.py", line 685, in readMainConfig
    yumvars['releasever'] = _getsysver(startupconf.installroot, startupconf.distroverpkg)
  File "/usr/lib/python2.4/site-packages/yum/config.py", line 752, in _getsysver
    idx = ts.dbMatch('provides', distroverpkg)
TypeError: rpmdb open failed
這一篇 說,這是因為上次執行 yum 到一半被強制 kill,所以 lock file 沒有release。 解開的方法:
rm /var/lib/rpm/__db.00*
rpm --rebuilddb

2009年6月20日 星期六

Install Firefox 3.6

因為Firefox 實在太慢,Firefox 3.5 人家說有沒有快很多,到不如直接上 3.6。 所以就試試看囉。安裝方式大概就是在 sources.list 中加入而外 deb repository。
deb http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu jaunty main
然後收 GPGKEY
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com EF4186FE247510BE
然後再install firefox 3.6 就可以

2009年6月11日 星期四

mount samba folder

mount samba folder,參考這裡 我是用這個:
mount -t cifs -o username=server_user,password=server_password
//192.168.44.100/share_name /path_to/mount_point

2009年6月6日 星期六

set bridge network for virtualbox

這一篇 講 virtualbox bridge的說明比較清楚簡單
需要的 package : bridge-utils uml-utilities
修改 /dev/net/tun ,給 vboxusers 使用權限。
啟動 bridge 的 shell script:
#!/bin/bash
brctl addbr br0
ifconfig eth0 0.0.0.0
brctl addif br0 eth0

#if you have a dhcp-server uncomment this line:
#dhclient3 br0

#If you have a static IP uncomment the following lines and
#change the IP accordingly to your subnet:
#ifconfig br0 192.168.178.5 up
#route add default gw 192.168.178.1

#Now we will create the tap device for the vm,!
# change your username accordingly
tunctl -t tap0 -u simon

#Now add the tap-device to the bridge:
ifconfig tap0 up
brctl addif br0 tap0
有關 network bridge 的說明,還是在 man 中說得清楚。
bridge 就是會把一堆 網路介面連在一起,成為一個大網路 (卡?)。同屬一個bridge網路(卡?)中的網路卡,都會收到一樣的資料。
所以以上的動作,就是:
brctl addbr br0
新增一個 bridge network ,叫做 br0
ifconfig eth0 0.0.0.0
把 實體網卡 eth0 設為 promisc mode (所有封包都收).
brctl addif br0 eth0
把實體網卡 eth0 加入 bridge 網路 br0 中。
dhclient3 br0
原來使用 eth0 的host ,改用 br0,br0 向dhcp 取得 ip..
tunctl 是用來 create, 操作 軟體(虛擬?) 網卡的tool。
tunctl -t tap0 -u username
新增一個虛擬網卡 tap0,可以用的 user 是 "username"
ifconfig tap0 up
啟動 這個 虛擬網卡 tap0
brctl addif br0 tap0
把 tap0 這個虛擬網卡也加入 br0 這個 bridge network card 中。
所以以上的動作就是:將 eth0 和 tap0加入到 bridge network br0 中。
然後 tap0 就可以給 virtualmachine 用了...

2009年2月26日 星期四

AndroidFanatic - News and Forume

有關 Android 網站。 有人在這個網站的討論區 po 出在Android 上 install debian 系統,和 xfce 環境AndroidFantaic (為什麼不是 Fantastic ?) .

2009年2月25日 星期三

mplayer -vo caca : play video on console

想試試 -vo caca 這個選項,結果 debian 的 mplayer 不會動,說是 audio enable 不起來。 所以拿 source code build 一下.. build mplayer 還蠻容易的.. ./configure --help ./configure --enable-caca ./make 就可以了 (沒有 install,因為會install 到 /var..)。 本來想 enable debug 來看一下哪裡 fail,結果,這樣就可以 run 了 :) -vo caca 還蠻有趣的, console mode player. 但是..用 ssh 連線會閃動。 還有我真的關掉 X (/etc/init.d/gdm stop) run 的話,也會閃。 大概是解析度不對吧... mplayer 網站說,只提供 svn : ,而且永遠不提供 http:/ 的 svn checkout 喔。 ..像這樣的software 一多,我們這種在firewall 後面的就完蛋了.

2009年2月16日 星期一

ARM GCC Inline Assembler

翻譯這一篇 : arm gcc inline assembler cookbok 但是這一篇(GCC-inline assembly Howto)說得比較仔細。 GCC 的 inline assembly 基本格式是:
  asm(code : output operand list : input operand list : clobber list);
也就是一堆用 ':'分開的字串。 其中 'code' 的部份要存取 output operand list , input operand 的內容,是用 % 符號:
 %0 代表存取 output operand
%1 代表存去 input operand
最後的'clobber' 是要告訴 compiler 有哪些 register 被這段 assembly code 修改了。
為了防止 compiler 把這一段 inline assembly code optimize 掉,通常都會加上 volatilr:
 asm voltaile("mov %0, ror #01" : "-r" (result) : "r" (value));
這段 inline assembly,如果之後的部份都沒有資料,就可以不寫,舉例來說:
 asm volatile("mov r0, r0");
這只是用來delay的code,沒有input, output,也沒有 register 會被修改,所以後面的 部份都不用寫。 但是如果有資料一定要寫,他的前面部份就不可以省略,舉例來說:
 asm volatile("" : : : "memory");
這段inline assembly 不包含任何 code,只是告訴 compiler memory 有可能會被修改。 一般為了好看,建議將一堆 assembly 寫成這樣:
 asm volatile(
"mov r0,r0\n\t"
"mov r0,r0\n\t"
"mov r0,r0\n\t"
);
也就是說,分行寫,但是要記得加上 "\n\t" - 這是要讓 compiler listing 時,比較好看。 Input Output Operand 這兩個區域是要告訴 compiler operand 的資料,利用以下 "Constraint" 來通知: Operand Register 的類型:
  • f : 是floating point register (有些 cpu 有專屬的 floating point register)
  • I : 立即定址 immediate operands
  • J : Indexing constants
  • K : negative value in rhs
  • L: negative value in rhs
  • M : for shift
  • r : General registers -- ARM 一般用這個
Operand Register 的 in/out:
  • = : Write-only (通常所有的 output operand 都會加這個符號)
  • + : Read-Write (inline assemnly 不支援這個符號)
  • & : Output only - 這個register 只做 output 使用
Output Operand 一定要是 Write-Only。 Input Operand 一定要是 Read-Only。 但是如果要把 input operand 修改後,作為 output operand 的話,要怎麼辦呢? inline assembly 又不支援 '+' 符號.. 用"數字" 來告訴 complier 這一個 operand 共用哪一個 operand,例如:
asm volatile("mov %0, %0, ror #1" : "=r" (value) : "0" (value));
這個 code 是將'value" right shit 1 bit。 但是用同一個 register 來作就可以。 input operand 用 "0" 告訴 compiler ,使用 第0個operand (就是 output operand)。 所以 input, output 都會用同一個 register (mov %0, %0..)。 Clobbers 把被修改的部份寫在這
asm volatile(
"amsd   r3, %1, #3  \n\t"
"eor    %0, %0, r3  \n\t"
"addne  %0, #4"
: "=r" (len)
: "0" (len)
: "cc","r3"
);
例子使用了 r3 作scratch register,所以做完這段 code 後,r3的值會被修改,以在clobber的區域要列出 "r3"。 另外,作邏輯運算後,status 區域也會修改,所以要把"cc"也列上。 還有另一個例子:
asm volatile(
"ldr  %0, [%1]  \n\t"
"str  %2, [%1, #4]  \n\t"
: "=&r" (rdv)
: "r" (&table), "r" (wdv)
: "memory"
);
這一段code會update table 的內容,所以要在....
有一點沒寫到,就是 c variable name 都寫在 operand 後面,用括號( )括起來..
在 "Assembler Instruction with C expression operand" ,範例:
asm ("fsinx %[angle],%[output]"
   : [output] "=f" (result)
   : [angle] "f" (angle));
在operand 前可以用 [name] 寫出''將會用這'name'名字稱呼''。 然後在 code 區域就可以直接用 %[name] 來引用
大概可以這樣說: assembly code 中,要引用 C 宣告的部份,就要寫在 operand (in/out) 欄位,並且寫號 constrain. 然後用 %0, %1...來使用。 如果是直接存取 register,就直接用 r1, r2, r3... 但是要記得寫在 clobber 欄位。
ref:

Lenny Released

Debain 5.0 Lenny 終於Release 了 (2/14)。 下一個版本的 codename是 "Squeeze" 所以? 可以開始改 sources.list ? Release Notes 中說得真清楚,竟然清楚列出eeepc, kuro box..

2009年2月12日 星期四

加一個以前換下來的 HD 到 Sempron26Debian..

接到 hdb 先看一下:
Disk /dev/hdb: 82.3 GB, 82348277760 bytes
255 heads, 63 sectors/track, 10011 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x9b8c9b8c

 Device Boot      Start         End      Blocks   Id  System
/dev/hdb1   *           1        2501    20089251    7  HPFS/NTFS
/dev/hdb2            2502       10011    60324075    f  W95 Ext'd (LBA)
/dev/hdb5            2502       10011    60324043+   c  W95 FAT32 (LBA)
所以用 extend 的部份就好了..

用 fdisk 刪除(d) partition 5, 2 然後再 create (n) parition:extend,create (n) partition : logical,然後就是:
Disk /dev/hdb: 82.3 GB, 82348277760 bytes
255 heads, 63 sectors/track, 10011 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x9b8c9b8c

 Device Boot      Start         End      Blocks   Id  System
/dev/hdb1   *           1        2501    20089251    7  HPFS/NTFS
/dev/hdb2            2502       10011    60324075    5  Extended
/dev/hdb5            2502       10011    60324043+  83  Linux
為了保險,重開機...

這樣 mount 都不用先format (mkfs.ext3)。

所以 mount 在 ~/myhd 中。

決定還是在裡面 create folder,再用 link 到~/下好了。

先mv .VirtualBox 到 _toVirtualBox
再建link(ln -s myhd/_toVirtualBox .VirtualBox),然後 try virtualbox 會不會動... OK!

同樣,move vboxshare 過去,建 link..

OK. 這樣兩個 hd 都剩 30G.

2009年2月9日 星期一

convert id tage

很麻煩的轉檔 id tag 轉語系,轉成 utf 有兩種:java 跟 python。 java : id3iconv - http://linuxtoy.org/archives/convert-locale.html 就是
java -jar id3iconv -e  gb2312 *.mp3
python: mid3iconv , 這個要安裝 python-mutagen。http://gearspot.blogspot.com/2007/05/mid3iconvmp3tag.html
mid3iconv -e gbk --remove-v1 *.mp3

2009年2月6日 星期五

接著到kernel 下 make menuconfig。 http://virtuallyshocking.com/2008/12/20/building-android-for-the-asus-eeepc-701/

Android mast - repo int and sync

這次照著 這個 document (Building Android(cupcake) for eee_pc)作.. 結果,做完 repo init,create local_maniterst.xml , repo sync .. 就 fail。 所以這部份還是先 follow Androidx86 的文件 repo init 後,先作一次 repo sync。
這個花很多時間..
花了5 hours ,.repo 這個folder 約 674M。 checkout 後,變成2.3G 然後再 create .repo/local_manifest.xml,再 repo sync..就沒 error 了。 為了節省以後的時間,把 .repo tar 起來... 但是不知道單純這樣解開有沒有用..
果然,zip 起來,也是 664M - 所以 .repo 真的是已經壓縮過...
測試,在另一個 folder 解開 .repo,然後在 .repo 裡repo sync 可以恢復... 為求保險,在 android-cupcake sync 一個 cupcake branch 的 repo..

Git out success ! open port 9418

感激! MIS 老闆 打開了 NAT 的 port 9418。 所以把以前設的 GIT_PROXY_COMMAN 環境變數 unset 後,repo init 就可以出去了。 但是不知道是以前的init fail 的問題還是怎樣,出現 error,說我的 email 不是 valid domain。 所以用
>git config --global user.emal "charles@gmail.com"
還刪掉 .repo。 之後,就可以 run rep init ... 了。 然後,接著的 repo sync 也 OK。

2009年2月3日 星期二

Git behind proxy

在公司用 git,因為有 proxy,所以找了一下,大部分都是說加上 http_proxy 環境變數後,原來是 git:// 的,改為 http:// 就可以了。 但是 這個是 repo,所以不能這樣用。 找到一篇:repo behine proxy copy 一下內容:
Basically the steps are:
1 - sudo apt-get install socket
2 - in your home directory, put a shell script called "proxy-cmd.sh"
containing (replace YOUR_PROXY and YOUR_PROXY_PORT with your own proxy
parameters):
#! /bin/bash
(echo "CONNECT $1:$2 HTTP/1.0"; echo; cat ) | socket YOUR_PROXY
YOUR_PROXY_PORT | (read a; read a; cat )
3 - chmod +x proxy-cmd.sh
4 - export GIT_PROXY_COMMAND=<PATH TO YOUR SCRIPT>/proxy-cmd.sh

Enjoy,
Matthieu

PS: you can export GIT_PROXY_COMMAND in your ~/.bashrc file to make
this permanent 
還沒確認有沒有效...
這一篇有說明 socket command : git via a proxy server
From: Jan-Benedict Glaw <jbglaw@lug-owl.de>
Date: 2006-05-18 18:31:32

On Wed, 2006-05-17 20:44:28 -0700, Sam Song <samlinuxkernel@yahoo.com> wrote:
> Petr Vandrovec <petr@vmware.com> wrote:
> > Jan-Benedict Glaw <jbglaw@lug-owl.de> wrote:
> > > Well, install some package to have `socket'
> > > available? Debian calls
> > > the packet `socket', too, so I guess Fedora may
> > > have something similar.
> >
> > Surprisingly they do not...  You should be able to
> > replace 'socket' with
> > 'netcat' - and I believe that netcat/nc package is
> > available for Fedora.  For
> > this purpose they have same command line & behavior.
>
> Ummm, I am trying on that. nc is avaiable for Fedora.
> But what could be the replacement for CONNECT in
> Fedora? :-)

Erm, you haven't understood what you're doing there, have you?

With the GIT_PROXY_COMMAND helper, you're expected to create a clean
tunnel which in turn git can use to transfer its data.

You've only got some limited internet connectivity via a HTTP proxy
available, so you need to use this. This means:

 * The proxy administrator needs to allos outgoing connections for
   the CONNECT method with git's TCP port.
 * You need to have some minimalistic program to initially speak HTTP
   with the proxy and later on just stream the raw git protocol
   through the link.
 * You may or may not need to strip anything that came into the git
   stream by accident because you tunnled it through a HTTP proxy. A
   reply message from the proxy server is an example for this.

So this little script (using "CONNECT" and netcat or socket) does the
first part: it talks in the language HTTP with the proxy server. It
may be enough to just use CONNECT, but you may need to speak some more
lines, eg. for proxy authorization.

The first `cat' in there is just for pushing the git protocol though the
HTTP proxy connection later on (hopefully after the proxy was made to
accept the the CONNECT request.)  Once the proxy accepted it, it'll
send you a HTTP/200 message (or something like that) and an empty
line. This is what the two reads are for; the next `cat' simply again
transfers all the rest (the git protocol).

To draw the line, there's not _one_ solution to HTTP proxy tunneling,
there are many, and you'll need to design one that fits your network.
It should be quite simple, given that you've got nice tools like
`strace' and `tcpdump', which will help you to understand how the
proxy reacts and so on.

MfG, JBG

--
Jan-Benedict Glaw       jbglaw@lug-owl.de    . +49-172-7608481             _ O _
"Eine Freie Meinung in  einem Freien Kopf    | Gegen Zensur | Gegen Krieg  _ _ O
für einen Freien Staat voll Freier Bürger"  | im Internet! |   im Irak!   O O O
ret = do_actions((curr | FREE_SPEECH) & ~(NEW_COPYRIGHT_LAW | DRM | TCPA));

-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


結果...
charles-chang@rbtlegacy:~/android-eee$ repo init -u git://android.git.kernel.org/platform/manifest.git
Getting repo ...
   from git://android.git.kernel.org/tools/repo.git
fatal: protocol error: bad line length character
所以是 Fail... 不知道是不是公司的squid proxy 不允許 CONNECT 這個 operation. 同樣的一篇有說:
Note: most HTTP proxy servers allow CONNECT method to a very limited
range of ports, and administrators will need to enable the git port
(9418) explicitly. 
所以要問 MIS 有沒有 允許 CONNECT method和開啟 git 要用的 9418 port。

2009年2月2日 星期一

Sempron26Debian - 手動 update kernel 到 2.6.26

奇怪 linux-image 一直維持在 2.6.22-3 上,不會隨著 update 到 2.6.26。 所以手動 update : aptitude install linux-image-2.6 就安裝了 2.6.26。

2009年2月1日 星期日

明天的備忘..

已經要上班了,看來應該是來不及作 repo sync,只好在公司作,希望 git 能通過 公司的 proxy,同時希望 repo 能用。

Bookmark - android for Virtualbox

看來要build 一版 for Virtualbox 的才行。
ref : http://groups.google.com/group/android-porting/browse_thread/thread/66862bdb52dac936/8ffe04d6b3f9d4c0
copy 一下人家寫好的 how to.
大概是follow 先前的,但是 不用 checkout branch。
build完後 copy vendor/eeepc 下的 kernel.config 到 kernel 下作 menuconfig 重新 set kernel option for virtualbox, build kernel。
最後把 installer.img convert 成 virtualbox 吃的 vdi file。
---------------------------------------
Hi, all

       How to use x86 android platform on virtualbox
       ===============================================
       Last modified by Lim,GeunSik on 8-Jan,2009

Current Work status is not finished.
But, I opened and shared  to combine with developers for this tasks
all over the world.

Why I like virtualbonx in Linux distribution like Fedora 9?

This is Major characteristics per Virtualization Software.
-------------------------------------------------------------------
Software                 Linux         WinXP     Opensource
Free       Quick Install
-------------------------------------------------------------------
M$ Virtual PC              X                O
X                   O             O
VMwareServer               O                O
X                   O             O
VMwareWorkstation          O                O
X                   X             O
Parallels                  O                O
X                  X             O
QEMU                       O                O
O                  O             O
Virtualbox                 O                O
O                  O             O
XEN                        O                X
O                  O             X
KVM                        O                X
O                  O             X
-----------------------------------------------------------------
acirc;�� 1. Development environments
  * OS: Feodra 9 ( Linux 2.6.27-9 )
  * GCC:  gcc(gcc 4.3.0) and gcc34 (gcc 3.4) <- I recommend gcc 3.4
compat-compiler to build x86 android fullsource.
  * Glibc:  glibc 2.6 (NPTL Thread Model)
  * PC: Samsung MagicStation DB-P70 Model
  * CPU : Interl Core2 Quad CPU Q9300 (2.50Ghz) , bogomips is
4,987.50 , cache size 3,072kb
  * MEM: Samsung DDR2 2G
  * Reference: Midhun & Chen Yang's posting at http://groups.google.com/
and  http://source.android.com
  * Additional information:  When i finished this task finally, I
will upload  final howto  using WYSWYG and figures
     at http://www.kandroid.org.

�2. Build kernel source for VirtualBox software.
Fedora9$ cd ~/bin_x86/mydroid
Fedora9$ cp ./vendor/asus/eee_701/kernel.config kernel/.config
Fedora9$ cd kernel
Fedora9$ make menuconfig

* Network device for virtualbox s/w
network device support ->
 Ethernet (10 or 100Mbit)  --->
     [*]   EISA, VLB, PCI and on board controllers
    <*>     AMD PCnet32 PCI support   <-  We need virtual lan infra
in  virtualization like vmware or virtualbox.

* To support FB on virtualbox environment.
Graphics support  --->
 <*>  Support for frame buffer devices  --->
        [*]   VESA VGA graphics support  <- Unfortunately, Vesa VGA
support 800X600 resolution.
Console display driver support  --->
       <*> Framebuffer Console support
       [*] Select compiled-in fonts
       [*]   VGA 8x8 font
       [*]   VGA 8x16 font

* Disable pmem allocator if your kernel is 2.6.27 base.
[*] Misc devices  --->
[ ]   Android pmem allocator (NEW)

If you are using 2.6.27 based x86 android full source, Disable  "PMEM"
feature in "make menuconfig menu.
pmem is only needed for certain devices requiring large physically
contiguous memory on the MSM7XXX (GPU,DSP, etc).  It's not currently
used by any other SoCs and its absence is not a fatal error.
-------------------------------------------------------------------
* MSM7XXX (GPU,DSP, etc): YUV --> pmem ---> VideoLayer
* Another Chip: YUV --> mEmulation(ro.kernel.qemu=1) --> /dev/fb0(RGB)
-------------------------------------------------------------------

Fedora9$ make bzImage
Fedora9$ ls ./arch/x86/boot/

Ref) If you want  to build 2.6.27 based android kernel at
http://android.git.kernel.org webstie,
     you may apply alsa related the patch at http://review.source.android.com/6751

�3. convert installer.img to installer.vmdk with virtualbox

Fedora9$ cd ~/bin_x86/mydroid/out/target/product/eee_701
Fedora9$ rpm -ivh http://download.virtualbox.org/virtualbox/2.1.0/VirtualBox-2.1.0_4114...
Fedora9$ VBoxManage --help | grep Version
VirtualBox Command Line Management Interface Version 2.1.0
Fedora9$ VBoxManage  convertfromraw -static -format VDI ./
installer.img  ./installer.vdi (X)
Fedora9$ VBoxManage  convertfromraw           -format VDI ./
installer.img  ./installer.vdi (O)

VirtualBox Command Line Management Interface Version 2.1.0
(C) 2005-2008 Sun Microsystems, Inc.
All rights reserved.
Wrong owner (0) of '/tmp/.vbox-invain-ipc'.
Converting from raw image file="installer.img" to file="./
installer.vdi"...
Creating dynamic image with size 406871040 bytes (389MB)...
Fedora9$ file ./installer.vdi
./installer.vdi: data

OR
Fedora9$ vditool DD installer.vdi *.img
Fedora9$ vditool SHRINK installer.vdi

�4. Setting of virtualbox
Open  "Sun VirtualBox" software ->Click on New -> Next
- Name = it as "AsusAndrioid"
- OStype=Linux
- Version=2.6
- RAM=256MB
- Hard Disks=  Slot Checked Boot Harddisk with IDE Primary Master

�5. booting android kernel in virtualbox s/w.
1) When I start the installer.vdi in virtualbox software, it hangs on
grub Loading stage 2 step.
  Below is error screenshot to help understanding.

  So, you have to push F12 key fastly as soon as start installer.vdi
with virtualbox.
  Remember "Press F12 to select boot device" message  in virtual box
window.

2) When you press F12  key and it shows the following:
             0: sys_loader
             1: recovery
             2: std_boot (* default selection)

3) Option "0: sys_loader" is selected by default when kernel boot in
virtualbox.
* Option 0: sys_loader
0: cmdline (hd0,0)/cmdline
1: kernel --use-cmd-line (hd0,0)/kernel
2: initrd (hd0,0)/ramdisk

* Option 1: recovery
0: cmdline (hd0,2)/cmdline
1: kernel --use-cmd-line (hd0,2)/kernel
2: initrd (hd0,2)/ramdisk

* Option 2: std_boot
0: cmdline (hd0,2)/cmdline
1: kernel --use-cmd-line (hd0,2)/kernel
2: initrd (hd0,2)/ramdisk

Now, I din't find "/boot/grub/menu.lst" file  for bootloader like
Feodra or Ubuntu.
Belows is process informations using top command.

#> cat /proc/version

Linux version 2.6.25-00101-gb6922fa
(dmitr...@weppard.mtv.corp.google.com) (gcc version 4.0.3
(Ubuntu 4.0.3-1ubuntu5)) #1 SMP PREEMPT Wed Nov 19 11:52:46 PST 2008

#> cat /proc/partitions
major     minor   #blocks    name
  ......... Above Omission ..........
8            0        397335   sda
8            1          4439    sda1
8            2        391872   sda2

� 5. Modify kernel cmd line like Linux: ***
Select No 2  "2: std_boot (* default selection)" after F12 key.

Remove  "--use-cmd-line" option in Linux boot display.
Append "androidboot.hardware=eee_701 vga=788" options in Linux boot
display

Highlighted entry is 2:
GNU GRUB version 0.97 (639K lower / 261056K upper memory)

0: cmdline (hd0,2)/cmdline
1: kernel --use-cmd-line (hd0,2)/kernel
2: initrd (hd0,2)/ramdisk
               .......... Omission .........
 Highlighted entry is 0:

Todo: But, bootloader is not found (hd0,2) because (hd0,2) partition
is not exist.
Booting command-list

cmdline (hd0,2)/cmdline
Error 22: No such partition

Press any key to continue ...

� 6. Mount  "* img" to /dev/block/sda2 device node.
Use installer command  /data directory.
#>  system/bin/installer -p /dev/block/sda2
  It gives an error that the total requested size is greater than
the disk size as belows.
  " Total requested size of partitins (1,644,167,168) is greater
than disk size (406,871,040)."
  (My image size is 387 MB and it is looking for around 1.5GB
space).

#> ls /data/
userdata.img
boot.img
system.img
bootldr.bin
lost+found

OR
Fedora9#> mkdir /data/boot
Fedora9#> mount -t ext2 /dev/block/sda2  /data/boot
Fedora9#> echo " vga=788" > /data/boot/cmdline
Fedora9#> umount /data/boot



這裡有 build 好的 Android for VirtualBox 的VDI 可以 download,download 後 用 VirtualBox run 就可以了 Android in VirtualBox

2009年1月31日 星期六

Bookmark : after make... Android image

build 完之後,雖然 make 的 target 是 install_image,但是 卻不是拿 installer.img 來用。

follow link 的說明,build 好的 system folder 是
  • / : root
  • /system : system
  • /data : data
kernel image 是已經 build 好的..在哪裡?
follow instruction 要 mkinitramfs 時...找不到2.6.27-android module..

這一篇有增加一個 step,就是build x86 kernel 的 module.
不知道要不要作..(Q_Q 是日文..),但是 boot image 都做出來了,應該是不需要才對..

這一個 thread 有說明要怎樣 build 一個 x86 kernel for Virtualbox.
他是由 installer.img 來作的..

Some bookmarks about Android : cupcake

原來 Android的下一版(1.5) 叫做 cupcake(那在branch 看到的 donuts 是?)。
自從 Android 整個 open source 後,一堆 support 都出現了,Android 開始蓬勃發展了起來。

像這一篇:Try out Cupcake yourself
就把 cupcake build 好,用 1.0 版的 android emulator 就可以 run 了。

還有,跟著 link,就可以看到,有人開始把 Android SDK 納入 Debian package了。
deb package of Android SDK with breeding edage cupcake images
使用 debian 系統的人,以後就可以簡單的 apt-get 就可以 run Android emulator,安裝 Android SDK了。

Android open source 後,像以前的一些限制:Armv5 以上,cramfs support 應該都沒有了吧。
因為這些都是因為 Android 沒有 open source 前,只有 release rootfs,所以 kernel porting 的重點都在"能 run 這個 rootfs",所以才有這些限制。

現在 Android for x86 都出來了,Armv5 的限制應該也沒有了吧。

2009年1月29日 星期四

果然有error.. build OK!

果然,沒有那麼簡單,make 的過程出現 Error:
Copy: jasmin (out/host/linux-x86/obj/EXECUTABLES/jasmin_intermediates/jasmin)
Install: out/host/linux-x86/bin/screenshot2
Install: out/host/linux-x86/bin/traceview
Install: out/host/linux-x86/lib/libswt-atk-gtk-3236.so
Install: out/host/linux-x86/lib/libswt-cairo-gtk-3236.so
Install: out/host/linux-x86/lib/libswt-gtk-3236.so
Install: out/host/linux-x86/lib/libswt-pi-gtk-3236.so
target asm: grub_start_stage2 <= external/grub/stage2/start.S
Target userdata fs image: out/target/product/eee_701/userdata.img
du: 無法存取「out/target/product/eee_701/data」: 沒有此一檔案或目錄
/bin/bash: line 0: [: -lt: unary operator expected find: out/target/product/eee_701/data: 沒有此一檔案或目錄
out/host/linux-x86/bin/genext2fs: out/target/product/eee_701/data is neither a file nor a directory
make: *** [out/target/product/eee_701/userdata.img] Error 1 make: *** Waiting for unfinished jobs.... 
但也還好,google一下,有回應: Change 8265: Fix the build issue when building installer_img with TARGET_ARCH=x86 所以follow說明,找一下 bootable/diskinstaller/config.mk 改一下:
installer_target_data_files := \
$(INSTALLED_BOOTIMAGE_TARGET) \
$(INSTALLED_SYSTEMIMAGE) \   
$(INSTALLED_USERDATAIMAGE_TARGET) \
$(bootldr_bin)
改成
installer_target_data_files := \
droidcore \
$(bootldr_bin)
然後重新下一次 make xxxx... 的 command.. 結果呢? 還在 build.. 希望會有好結果..
花了一個晚上,終於build OK了。 只有在最後,target Dex xxxx 的階段,不知道是因為 memory 不夠(只有512M),所以 swap 一直動作,hd 轉個不停,大概持續1個多小時,然後沒有任何output。 disk space 也沒有改變,幾乎以為是當機。 最後的log是:
--- Finished installer data image -[ out/target/product/eee_701/installer/installer_data.img ]-
Creating bootable installer image: out/target/product/eee_701/installer.img
Updated inst_boot length to be 4444KB
Updated inst_data length to be 420764KB
I/diskconfig(16123): Requesting operation on a regular file, not block device.
I/config_mbr(16123): Configuring pentry. status=0x80 type=0x83 start_lba=2048 len_lba=8888
I/config_mbr(16123): Configuring pentry. status=0x0 type=0x83 start_lba=10936 len_lba=841528
I/config_mbr(16123): Configuring pentry. status=0x0 type=0x0 start_lba=0 len_lba=0
I/config_mbr(16123): Configuring pentry. status=0x0 type=0x0 start_lba=0 len_lba=0
Copying images to specified partition offsets
I/diskutils(16123): Writing RAW image 'out/target/product/eee_701/installer/installer_tmp.img' to 'out/target/product/eee_701/installer.img' (offset=1048576)
I/diskutils(16123): Wrote 4550656 bytes to out/target/product/eee_701/installer.img @ 1048576
I/diskutils(16123): Writing RAW image 'out/target/product/eee_701/installer/installer_data.img' to 'out/target/product/eee_701/installer.img' (offset=5599232)
I/diskutils(16123): Wrote 430862336 bytes to out/target/product/eee_701/installer.img @ 5599232
File edit complete. Wrote 2 images.
Done with bootable installer image -[ out/target/product/eee_701/installer.img ]-

2009年1月27日 星期二

Worklog - build Android for x86

照著 Androidx86 這一頁內容,到 android 這一頁 download repo 這個 tool。 建立 ~/myproject/cupcake,然後作 repo init 和 repo sync ..
原來 -b option 就是取出 branch,這個 Thread 最後(2009/01/29)說 cupcake 已經 merge 進 master 了,所以不需要再 -b cupcake
repo sync 要好久呀,常常在 "unpacking objects" 就停下來。(停在某個 %). 這時候,我就用 Ctrl-C 中斷,等個幾分鐘後再作 repo sync.. 有時候就會繼續下去.. 但是一下又停了。
發現用system monitor 來看比較方便,大約 1min 會有一個download,所以如果發現network 沒動作,超過 3 min,就Ctrl-C,再 repo sync..

終於,花了三天終於 sync 完畢,開始作 checkout xxx 的動作。
checkout 動作就不用再download了,所以很快..
follow Androidx86 的說明,加上 local_manifest.xml。 內容大概是加上 vendor/asus/eeepc701 這一個 source。 再用 repo sync 把他拉下來。 -- 這個很快。一下就好了。 然後就是 follow instruction,build...
後記: 有人 follow 2009/1/29以後的 thread 整理了一份 "build android for eeepc"。
這個文件有點問題,照著他作: repo init 後 create local_manifest 然後 repo sync,會出現 error。 在 repo init 後,還是要 repo sync 一次,再create local_manifest ,再 repo sync 一次..

2009年1月26日 星期一

Before building --- android

Android Opensource 後,陸續有人 port 到不同的hardware target 上,甚至,port到 x86 上。

google 了一下,想不到,連 Androidx86 這樣的網站都出現了。
看了一下,好像是 2009/1/18 建立的。 - 還蠻新的。

最早的 x86 port 是 eeepc 701,現在該站的文章有說明 ThinkPad, Geode LX (for OLPC?)。

艇麻煩的,還要安裝Google為 Android寫的 source control tool : repo。
雖然說是 git 的加強,但也太囉唆了些。
還好 repo 只是一個 python file。所以'安裝'還算簡單,就是 download 檔案下來,chmod 就可以了。
最近好像"為xxx project 寫building tool 好像是流行,稿得要 build 一個 project就要install 一堆 build environment。
為什麼不能像以前一樣,就是 configure, make, make install 就 OK ?
最古老/完整的內容,應該還是這一個討論串。後來的內容都是要在 VirtualBox 上 Run。好像還體難的,有一堆問題。

2009年1月20日 星期二

bookmark - Android porting to real target

這一篇 KLDPWiki有說明 Android, kernel, software developement, root file system 等的內容說明。 Android 需要的 Linux Kernel 跟一般 Linux Kernel 不一樣的地方好像是 EABI 跟 OpenBind。 要 build support EABI 的 Kernel,要先 build support EABI 的 toolchain..
會不會有雞生蛋,蛋生雞的問題?
另外一篇 Compilation of Android kernel ,則是說明 如何 build 一個可以 run android vm 的 kernel。 是以qemu for arm 作例子

2009年1月4日 星期日

Hv3 - the fast light web browser

在google "fast light web browser" 時,本以為會出現 Dillo,結果有一篇竟然說是 "Dillo Killer",所以去看了一下: The Hv3 web browser. Is it a Dillo killer ? 大概說明一下.. rendering engine 是 Tkhtml3,Scripting 是 SEE。完全用 C 寫的。 速度上,和Dillo差不多,rendering 的效果則是好很多。 目前ubuntu 還沒有包近來,要手動 wget 執行。
速度是很快,image, javascript 都有一個開關可以選。 (Html Viewer 3)

標籤

網誌存檔