網頁

2013年3月11日 星期一

Java 的安裝

 
第一次安裝 Java, 通常都會搞不清楚, 要安裝那一個. 這邊對各個容易混淆的名詞, 做一個簡易的說明. 不過, 我沒有打算做為一個資訊考古學的工作人員, 不打算對整個版本演進的歷史做一個完整的考查, 只針對目前常見的說明.有興趣的人可以參考以下的網址.

http://zh.wikipedia.org/wiki/Java

Java 的版本區分


Java 的主要版本: Java SE, Java EE, Java ME


Java SE (Java Platform Standard Edition)

        從 J2SE 更名過來.
        提供桌上型電腦應用程式的開發需求.
        是最普及的版本.

Java EE (Java Platform Enterprise Edition)

        從 J2EE 更名過來.
        包含 applet, XML, database, message, ...,
        主要提供企業伺服端應用程式的開發需求

Java ME (Java Platform Micro Edition)

        從 J2ME 更名過來.
        提供資訊家電應用程式的開發需求( Set-up box, mobile phone, PDA)

不同的 Java 環境JDK, JRE


        開發撰寫 Java 程式, 需要使用 JDK. 如果只是要執行, 安裝 JRE 即可.
 
        在命令列執行 以下命令
        javac
        如果有版本資訊, 就是已經有了 JDK 的環境.
 
        在命令列執行 以下命令
        java
        如果有版本資訊, 就是已經有了 JRE 的環境.
 
JDK (Java Development Kit)

        提供程式開發者需求的環境. 包含 JRE 及編譯, debug 程式.

JRE (Java Runtime Environment)

        提供可以執行編譯過 java 程式的環境. 包含 JVM.

JVM (Java Virtual Machine)

        一個可以執行編譯過 java 程式的虛擬機器. 根據不同的作業系統 Windows, Linux, ... 有不同的版本.
        對於Java程式而言, 它只是在 JVM 上運行. 指令如何轉送,翻譯 並且在不同作業系統, (Windows, Linux), 不同平台(X86, ARM, SPARC,...) 上執行. 那是 JVM 的責任.

 

不同的 Java 來源, OpenJDK, Android


        大部份的 Linux 裡面附的, 是 OpenJDK, 而不是 Oracle 的 JDK 版本. OpenJDK 是當時 Sun 承諾要把 Java 作為 open source, 所建構出來. 主要的來源是 JDK 除去有智慧財產權的部份, 並以 IceTea 來補上這一部份的產物. 然而, 在 Sun 賣給 Oracle 之後, 這些事情變得尷尬起來. 結局會是如何呢 ? 讓我們繼續看下去. 不過我個人會傾向使用 Oracle 的 JDK 版本.

        是的, Android 雖然是運行 Java 的系統, 但是 Android 的 Java 是一個經過客製化的版本. 雖然有些消息說 OpenJDK 將成為 Android 的 Java 版本, 技術上可以克服. 但是,這是錢的問題, 不是技術的問題. 我不認為 Google 會把脖子繫上帶子交給 Oracle.
 

Install Java on Linux ( Ubuntu)


        目前知道的, OpenJDK 在執行一些 applet 上有時會遇到一些問題. 建議使用 Oracle JDK.

        如果已經有 OpenJDK, 可以執行以下命令移除.
         sudo apt-get purge openjdk*
 
        如果安裝過 JDK, 但是不能用, 可以執行以下命令移除, 再重新安裝
         sudo rm /var/lib/dpkg/info/oracle-java7-installer*
         sudo apt-get purge oracle-java7-installer*
         sudo rm /etc/apt/sources.list.d/*java*
         sudo apt-get update
     
        執行以下命令安裝:
        sudo add-apt-repository ppa:webupd8team/java
        sudo apt-get update
        sudo apt-get install oracle-java7-installer
     

Install Java on Windows

 
        在以下連結下載相對應的安裝版本.

        http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

2013年3月10日 星期日

一般開機程序 ( X86 )


開機是一個頗複雜的過程, 不同的 CPU 會有不同的過程, 這邊基本上以 X86 來做一些說明.
 

1. 電源啟動: (冷啟動階段, code boot )


        內部的電源接通, 內部的電源供應器輸出穩定的電力.
 

2. 晶片組產生一個 reset 的訊號.


        reset訊號 基本上是 High-Low-High 的一組訊號.

        Low 的時間, 視 CPU 及相關電路邏輯的複雜度而定. CPU 通常包含數百萬       個邏輯閘, 其中有些是循序電路. reset 的訊號必須傳遞經過每一個電路元    件, 也就是所謂的 fan-out. reset 時間完成後, 所有的電路都必須被設定到default值.

 

3. reset 後的第一個 clock


        reset 後, 指令暫存器內容為 NOP ( no operation), 程式計數器內容為指向        BISO 的位址.
 

* 這邊說明一下 instruction cycle. 附圖是 Pentium 4 instruction cycle:

 

 

在同一個時間, CPU 執行目前的指令, 解碼預備執行下一個指令, 提取下下個指令.

程式計數器的內容, 就是下一個要提取的指令的位址. 因此, reset address 指的就是程式計數器 reset 後的 default 值. 只要把指令放在這個地方, reset 後就自然會被執行. 通常, 利用 memory mapping 的方法, 把這一部份對應到 EEPROM, 也就是 BIOS 的地方. 藉以引入 BIOS.
 

4. BIOS 啟動


        BIOS 執行 POST (Power On Self Test), 檢查記憶

        偵測及辨別視訊卡. 一般是在 0xC000H 的位置

        偵測及辨別其它設備, 包含軟碟¸硬碟,...

        BIOS 依據開機順序的設定, 在指定的設備中尋找主開機記錄 (MBR). 如果        找到的話, 把 MBR 上的 Bootloader 載記憶體, 並且開始執行. 見附圖
 

 


 
* 我在某些地方看到, 類似這樣的敘述. " BIOS 是透過硬體的 INT 13 中斷功能來讀取 MBR 的", 這樣的敘述是有問題的.

事實上, INT 13 H是 BIOS 的負責 disk 的中斷呼叫是 BIOS 的一部份.  請參考:
http://en.wikipedia.org/wiki/BIOS_interrupt_call.

另外¸ 也可以呼叫INT 19H 來做 software reset, 來重新載入/執行 Bootloader.

 

5. Bootloader : ( 熱啟動, warm boot)


        Bootloader 放置的位置, 在 MBR 的前 446 bytes. 內容則和作業系統相關, 也和用什麼樣的 bootloader manager 的程式有關.
 
        在 Linux 底下, 如果不使用其他的 bootloader manager, bootloader 的內容是 src/arch/i386/boot/bootsect.S, 否則內容會是 bootloader manager 設置. 例如以下是使用 GRUB 的 bootloader 內容. 可以發現 GRUB 的字樣.


       
       

完整的 X86 BIOS Boot sequence

請參考 :
 
 

 

2013年3月7日 星期四

準備 C/C++ 的編譯環境 on Ubuntu

剛安裝好的 Ubuntu 是不能編譯 C/C++ 的 code 的, 至少 12.10 是不行的. 可以輸入以下的 command 來確認.
 
$ g++ -v 
 
以下說明 C/C++ 的編譯環境的安裝, 測試及建議

Install C/C++ Compile environment

首先, 先來安裝一個更簡化的套件管理程式
$ sudo apt-get install aptitude
 
接下來, 用它來安裝開發環境
$ sudo aptitude install build-essential
 
安裝過程會出現版本衝突, 一定要輸入 Yes 才能繼續.
完成後, 再測試一遍版本訊息
 
$ g++ -v
應該會出現和下面類似的畫面.

 
這樣就完成了. 

編譯及執行 C program

建立一個自己的工作目錄,

 
啟動 gedit, 輸入以下程式:
 
$ gedit test01.c

#include <stdio.h>

int main()

{

printf(“Hello World!\r\n”);

}

編譯它

 
$ gcc test01.c
 
如果沒有錯誤訊息, 可以 ls -al 看一下, 看看是不是有一個 a.out 的可執行的檔案.
 

執行它

$ ./a.out
 
由於工作目錄並不在 shell 的搜尋路徑中, 如果不指定當前目錄, 會遇到 command not found 的錯誤.
 

再編譯它一次

這次增加一些參數

$ gcc -ansi -pedantic-errors -Wall  test01.c

結果邊譯失敗, 發生錯誤. 這個程式其實有一個問題, main 定義為回傳 int 型別, 但是程式中並沒有 return. 如果不指定 ansi 相容的標準, 錯誤和警告的等級, 可以編譯成功. 但是這就會在未來多產生一些不確定的問題. 建議善用編譯器的檢查機制. 不過每次這樣寫, 真的也是很煩人, 我們把它放到 script 去, 會省事一些.

編輯 script

$ gedit gccp

輸入以下內容:

#/bin/sh

echo compiling C++ using -ansi -pedantic-errors -Wall

gcc -ansi -pedantic-errors -Wall $1 $2 $3


存檔後, 增加執行的屬性
$ chmod +x gccp

放到 usr/local/bin. 注意看一下, 如果沒有自己放˙檔案進去, 這個目錄會是空的. 這個目錄的用意, 就是存放一些 local ( 本機電腦 ) 自行添加的程式, 所以也在 shell 的 預設搜尋路徑中. 但是寫入是需要 root 的權限的.

* 建議儘量把自己寫的程式放在這邊

$ sudo cp gccp /usr/local/bin

修正程式, 並重新 compile 執行.

$ gccp test01.c
$ ./a.out

編譯及執行 C++ program

啟動 gedit, 輸入以下程式:

$ gedit test01.cpp

#include <iostream>

using namespace std;

int main()
{
    cout << "Hello World!" << endl;
    return 0;
}


編輯 C++ 的編譯 script, 同樣放到 /usr/local/bin

由於有點混淆, 我會用 gccpp, 作為 script 的名稱
 
#/bin/sh echo compiling C++ using -ansi -pedantic-errors -Wall g++ -ansi -pedantic-errors -Wall $1 $2 $3

2013年3月6日 星期三

軟體工具箱

這邊把軟體開發時, 常用到的工具列出來. 後續會繼續補充.

版本控制工具: Git

Introduction

以下的連結是 Pro Git 這本書, 概念和操作都講得很清楚. 應該算是官方版的教科書了 個人是覺得有必要看. 網路上雖然很多說明和介紹, 太簡略, 太片斷, 還不如一次搞懂.

http://git-scm.com/doc

Linux (Debian/Ubuntu)

下載/安裝:

$ sudo apt-get install git


Windows 

下載:

請下載畫面中央, Downloads 這個框框裡面的執行檔版本. 右邊的這部份是開發環境和原始碼. 因為一時眼拙, 下載了一大堆還不能用 :( . 特別 highlight 一下.

執行

C:\Program Files (x86)\Git, 或是桌面上的捷徑 Git Bash

嗯, 怎麼好像是 Linux 的介面呢 ? 如果要 GUI 的介面, 可以在以下連結裡面選來用 (我沒試過喔)
http://git-scm.com/downloads/guis

雲端儲存空間: DropBox

Introduction

有時候, 需要一段程式碼, 但是就是找不到, 不知道是放在拇指碟, 還是家裡的電腦,或是同樣的 project, 到處都有一份, 真是討厭的事. 如果可以放一份在免費空間, 然後用它來做版本管理, 就可以省用很多討厭的事情.

所以接下來, 就是免費的雲端的空間, 可以用 Windows/Linux/Web/App 存取, 可以自訂每個資料夾要不要分享, 可以用來存放 Git 的資料. 嗯, 有 2 G 喔.

Linux (Debian/Ubuntu)

下載:

https://www.dropbox.com/install?os=lnx

 


安裝:

$ sudo dpkg -i dropbox_1.4.0_i386.deb

Windows

下載/安裝

https://www.dropbox.com/



按中間的那個 Windows 就開始下載了. 下載完, 執行Dropbox 1.6.17.exe 就安裝完成了. 記得要註冊帳號喔.