1/24/2011

Compile Bochs with 10.4

之前在VitrualBox上安裝了ubuntu 9.10, compile和run都沒什麼太大問題.

但今天想在10.4重新安裝, 依照前一次的筆記照做, 發現在compile docbook時發生error :

Working on: /home/dicky/1Work/c-square/bochs-2.4.5/doc/docbook/./user/user.dbk
openjade:/home/dicky/1Work/c-square/bochs-2.4.5/doc/docbook/./user/user.dbk:3863:72:E: character "_" is not allowed in the value of attribute "LINKEND"
openjade:/home/dicky/1Work/c-square/bochs-2.4.5/doc/docbook/./user/user.dbk:3921:25:E: character "_" is not allowed in the value of attribute "ID"
openjade:/home/dicky/1Work/c-square/bochs-2.4.5/doc/docbook/./user/user.dbk:3960:25:E: character "_" is not allowed in the value of attribute "ID"
openjade:/home/dicky/1Work/c-square/bochs-2.4.5/doc/docbook/./user/user.dbk:3968:66:E: character "_" is not allowed in the value of attribute "LINKEND"
make[1]: *** [user/index.html] Error 8

滿明顯是"_"這個底線造成了錯誤, 可能是哪裡的文件沒定義該符號的使用

去官方網站查了一下, 才知道原來這是己知Bug, 但他們並不絕得是很大的問題所以並沒有在2.4.5 加入Fix.....(可能是覺得這是SGML的錯誤...跟他們沒關係= =)

Tracker:Bugs

上面有提供關於SGML的error & waring排除錯誤的網址, 其中有兩行解釋的很明白 :

value of attribute "LINKEND" must be a single token:


the label you used for a section contains spaces. Change spaces to, say, underscores or dashes.

value of attribute "ID" must be a single token:


you used a cross-reference to a label that contains spaces. Do not change the cross-reference. Change the label: change spaces to, say, underscores or dashes.



依照上面的解釋...把底線改成"-" or "~"就可以了 :)

1/22/2011

如何收聽電台

今天去gy綸家, 看到他邊打魔獸邊聽ICRT的感覺好像不錯..

心想ICRT好久沒聽了 ! 就趕緊來聽一下 !

結果發現...現在收聽電台廣播大多都是IE Only ..

要在Linux上收聽廣播, 其實很簡單, 只要有安裝mplayer就好:


接著在終端機輸入指令 

ICRT:
mplayer mms://bcr.media.hinet.net/RA000038

Apple Line
mplayer mms://bcr.media.hinet.net/RA000001 

Kiss Radio
mplayer mms://bcr.media.hinet.net/RA000042

台北愛樂
mplayer mms://bcr.media.hinet.net/RA000018 

POP Radio
mplayer mms://bcr.media.hinet.net/RA000080

1/13/2011

加速Chrome載入網頁的速度

最近逛到一篇好文 , 說明如何改善Chrome的載入頁面速度

不過他只有說明在對著桌面圖示按右鍵的屬性加入路徑...

但沒說明要如何用指令的方式來加入....因為我的Mac style沒有桌面圖示這種東西 XD

一般來說,當Browser(瀏覽器)在開啟網頁時,除了第一次會從server上download網頁外,接下來的第二次第三次都會只直接本地的Cache(快取)進行讀取載入

所以一樣基於這個原理,我們可以更改路徑,讓chrome可以到比較快的檔案系統做讀取

這個檔案系統叫tmpfs , 掛載點在/dev/shm , 它一般的容量為實際記憶體的一半 , 不過tmpfs除了可以當作RAM以外 , 還可以當作交換區使用

修改chrome的cache路徑很簡單 , 一般預設的cache路徑是在 "~/.cache/google-chome"

所以可以用symblic link方式來指向它

# rm -rf  ~/.cache/google-chrome          //先砍掉預設路徑

#mkdir /dev/shm/google-chrome          //在tmpfs建立cache目錄

#ln -s ln -s /dev/shm/google-chrome/ /home/dicky/.cache/google-chrome      //連結/dev/shm底下

這樣一來 , 所有的cache檔案都會從/dev/shm讀取 , 速度會變快喔 !

Note : Chome的設計 , 如果超過40MB的cache文件 , 會移到/tmp底下 , 關掉網頁的同時也會把/tmp的cache檔都砍掉 , 所以如果想要保留一些cache文件 , 也可以用此方式來加速

1/11/2011

YouTube - Trends Dashboard

發現一個滿好用的東西 !

因為有時滿常去看YouTube的影片 , 但總覺得YouTube首頁放的熱門連結一點都不熱門= =

不然就都是偶像劇.....

現在介紹一個超好用的工具 :

YouTube - Trends Dashboard

這個東西  , 馬上能讓你知道現在台灣點擊率最多的影片 !

當然不止台灣 , 全球各地都可以 !

教學的話 , 看下面的重灌狂人來介紹吧 :D

Trends Dashboard 查看不同國家、不同年齡層最熱愛的YouTube影片

1/03/2011

架設Android APP開發環境 For Eclipse

今天嘗試架設Android的Java開發環境 , 整個過程還算順利 , 畢竟書上和網路上的資料相當地多 ~

先來個自high圖 XD














還是一樣....Base on Ubuntu 10.4-LTS去架設的.

必要工具 : sun-java5-jdk , sun-java6-jdk , android-sdk , eclipse

為何要安裝兩個Java呢 ? 這算是Google的一個bug吧....在編譯SDK時 , 用java6是沒辦法編過(不知道新版的sdk解了沒)

反正沒多大...安裝兩個總比以後要找compile error好的多了..如何切換版本上篇文章也有提到 :)

安裝步驟我就不想說了....網路上的資料實在太多太多了 (下一次會寫如何用vim來開發 XD)

推薦一個網址 , 我個人覺得非常棒 , 沒發現的同學趕緊加到我的最愛吧 !

http://code.google.com/p/androidbmi/wiki/IntroAndroid

JDK5/6版本切換

因為Android 2.1只能使用JDK5 , 而且去Porting其它平台時,拿到的BSP又說要裝JDK5....

可是在玩Android 2.2 APP時,又要用到JDK6...

一氣之下只好兩個全灌了 ! 但問題來了 ... 要如何兩個版本做切換勒 ?

有個非常好用的指令 ~ 記錄下來 :

1/02/2011

Boot Sector

分析之前書上寫的Boot sector(引導扇區) , 加上一些不懂的 , 經過查找和看書...把一些理解原理記下來,有路過的PRO user..如有錯誤,請一定要指正小弟 ! 感激不盡 :D

先來看整個x86的開機啟動過程,這裡有分1st Bootload和2nd Bootload,大體可以這樣表示 :

1.電源開啟
2.CPU進行Reset工作
3.從BIOS的ROM中第FFF:0000位址開始執行General Bootloader
4.進行POST(開機自檢,Powe On Self Test)動作
5.讀取CMOS設定資料
6.讀取所選的磁碟機的CHS 0:0:1的磁區
7.從記憶體第0x7C00的位址開始執行2nd Bootload

註:CHS -- 指定磁區位置的方式,Cylinder: Head: Sector,0:0:1就代表第0個Cylinder(面)、第0個Head(磁軌)、第1個Sector(扇區)

其中3~7的動作就是1st Bootload,它是放在BIOS裡面的,我們沒辦法去對它做修改,因為這些是原廠出廠時就己經寫死了.

所以我們能自行撰寫2nd Bootload以及讓2nd Bootload跳轉至作業系統,但是有幾個規定要特別記住 :

1.這時只有單純CPU工作,作業系統完全沒被載入,所以我們僅能使用CPU指令,硬體I/O,BIOS中斷能使用而己,也就是說....想用C來寫2nd Bootload是不可能的 XD (除非有另外的函式庫....)

2.一個Sector的大小就是512Kbyte,據說是硬體規格(沒查證.....),也就是說....要寫出2nd Bootload,一定要把512Kbyte填滿 !

簡單來說,一旦BIOS發現了在0:0:1的開機磁區,就會把Sector(512Kbyte)的內容裝載到記憶體位址的0000:07C00處,然後再跳轉到0x7C00處將控制權全都交給這段(sector)開機程式碼,從這裡開始,電腦就不再由BIOS中固有的程式來控制,而變成作業系統的一部份來控制.

註:ROM BIOS的INT 19H(引導加載程序,相當於熱啟動系統) 固定裝入記憶體的0000:7C00H

所以,在2nd Bootload的程式碼開頭,一定要告訴CPU說,接下來的這些程式碼,是從0x7C00的地址開始的.

瞭解整個系統開機運作後,就可以來分析書上所提供的2nd Bootload程式碼 :


  1     org 07c00h        
  2     mov ax, cs
  3     mov ds, ax
  4     mov es, ax
  5     call    DispStr      
  6     jmp $        
  7 DispStr:
  8     mov ax, BootMessage
  9     mov bp, ax      
 10     mov cx, 16      
 11     mov ax, 01301h  
 12     mov bx, 000ch    
 13     mov dl, 0
 14     int 10h      
 15     ret
 16 BootMessage:        db  "Hello, OS world!"
 17 times   510-($-$$)  db  0
 18 dw  0xaa55            

雖然書上的程式碼都有註解,但我還是一一分析...畢竟我組語完全不熟....T_T

註: 8086CPU一共有14個暫存器,先介紹等下會用到的暫存器
通用暫存器:AX、BX、CX、DX
(可獨立8位元使用 , AH和AL , 最大值僅能0~255)
段暫存器 : CS、SS、DS、ES、PSW
可間接定址暫存器:BP


1行 : 調整偏移量偽指令ORG,指定下面的指令從7c00h處開始,因為BIOS一旦發現引導扇區,就會將這512字節裝載到記憶體的0000:7c00處

2行:將CS(Code Seg,程式暫存器)內容放到AX(通用暫存器)

3~4行:同樣將DS,ES暫存器指向AX,這樣一來,CS,DS,ES將指向相同的segment

5行: call function "DispStr"

6行:call function完之後,將跳到相同的地址,也就是它會無窮迴圈. $代表當前所在的位址

8行:將BootMessage內容放進AX

9行:AX內容放進BP,亦即BP同樣指向BootMessage

10行:長度為16的字符串放進CX

11行:AH=13h,int 10h啟用視頻中斷13H號功能 , AL=01代表寫完字符串之後,更新光標位置

12行:BH=0H,頁號(視頻緩衝區是分頁的...恩...這我也不懂XD) , BL=0CH代表字符顯示屬性

13行:DH和DL寫字符串的光標位置,DH=行號,DL=列號 (不知道為啥DX就是寫字符串的暫存器...是定義就這樣子嗎?? 哎...要查查= =)

14行:啟用10h號中斷

15行:跟return一樣的道理...

16行:把BootMessage定義為Hello的字串,就如同#define一樣XD

17行:$是當前地址,$$是首地址,也就是說,從這樣開始一直到510處,全用0填充


18行:這滿重要的,其中的511和512地址是專門用來判斷是否為一個Boot Sector,0xAA55就是Boot Sector一個結束標誌



1/01/2011

IA-32

書上一直提到IA32架構 , 心裡一直很納悶IA32是什麼東西...

去網卡search一下 , 發現有篇文早說的還不錯 , 也提到Protected mode(保護模式) 和 Real-Address mode (真實模式) , 特別轉來紀錄一下