2013年10月28日 星期一

安裝 ARM toolchain (舊/2014版)

目的:安裝 ARM toolchain


Embedded Debian Linux 的官方網站在:http://www.emdebian.org/crosstools.html,要進行 Embedded Debian Linux 開發,首先我們要將 Embedded Linux 的套件庫新增至系統中。

1. 在 /etc/apt/sources.list 新增底下二行:

deb http://www.emdebian.org/debian/ squeeze main
deb http://opensource.nchc.org.tw/debian/ squeeze main contrib non-free

2. 更新套件狀態

apt-get update

此時我們會發現系統有底下警告訊息:

W: GPG error: http://www.emdebian.org wheezy Release: 由於無法取得它們的公鑰,以下簽章無法進行驗證: NO_PUBKEY B5B7720097BB3B58

我們可以安裝 emdebian-archive-keyring 套件來解決上面的警告訊息,指令如下:

apt-get install emdebian-archive-keyring

安裝完再執行 apt-get update 即無錯誤訊息。

3. 安裝 ARM ToolChain

請安裝底下套件:

gcc-4.4-arm-linux-gnueabi
cpp-4.4-arm-linux-gnueabi
g++-4.4-arm-linux-gnueabi

我們在安裝時會發現系統是由 http://www.emdebian.org 網站下載相關套件,而非 Debian Linux 鏡像站,裝完後的可執行檔名稱如下:

arm-linux-gnueabi-gcc-4.4
arm-linux-gnueabi-g++-4.4
arm-linux-gnueabi-cpp-4.4


4. 驗證 ARM ToolChain

如果我們使用一般 gcc 來觀看版本的話,指令如下:

gcc -v

其輸出為:

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.7/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.7.2-5' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.7.2 (Debian 4.7.2-5)

其中有一行

Target: x86_64-linux-gnu

告訴我們此 C 編譯器之目標為 x86_64 平台,現在我們執行 ARM gcc 來看其版本,指令如下:

arm-linux-gnueabi-gcc-4.7 -v

其輸出為:

Using built-in specs.
COLLECT_GCC=arm-linux-gnueabi-gcc-4.7
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabi/4.7/lto-wrapper
Target: arm-linux-gnueabi
Configured with: ../src/configure -v --with-pkgversion='Debian 4.7.2-4' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/arm-linux-gnueabi/include/c++/4.7.2 --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libitm --enable-plugin --enable-objc-gc --disable-sjlj-exceptions --with-arch=armv4t --with-float=soft --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-linux-gnueabi --program-prefix=arm-linux-gnueabi- --includedir=/usr/arm-linux-gnueabi/include --with-headers=/usr/arm-linux-gnueabi/include --with-libs=/usr/arm-linux-gnueabi/lib
Thread model: posix
gcc version 4.7.2 (Debian 4.7.2-4)

我們可以由上面的 Target 這行看到其目標為 arm-linux-gnueabi


5. 實際編譯 C 程式

在此以 C 程式第一個範例 hello.c 作編譯測試,其原始碼如下:

void main(void)
{
  printf("Hello World\n");
}

我們先以 gcc 來編譯此程式,指令如下:

gcc hello.c -o hello

此時會產生一個 hello 的可執行檔,其屬性如下:

-rwxr-xr-x 1 herman herman 6751 10月 29 09:33 hello

我們可以使用 file hello 來觀看其檔案資訊,輸出如下:

hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0xf29466ceaf1115e4b88f524d8432210a2a1ea1ca, not stripped

從上述資訊我們可以看到 hello 是 x86-64 的可執行檔,接下來我們以 ARM gcc 來編譯,指令如下:

arm-linux-gnueabi-gcc-4.7 hello.c -o hello_arm

此時會產生一個 hello_arm 的可執行檔,我們可以使用 file hello_arm 來觀看其檔案資訊,輸出如下:

hello_arm: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0x8f91e5977bcd09b9b94028392cdd29560fb655ee, not stripped

從上述資訊我們可以看到 hello 是 ARM 的可執行檔。到這裡為止,我們已經初步完成 ARM ToolChain 安裝,接下來我們將使用此 Tool Chian 來編譯 ARM 版 Linux 核心以及 bootloader,並將系統植入先前完成之 sdcard.img 中,再以 qemu 來開機。

2013年10月24日 星期四

NGSPICE 的 .control 語法

.control

set hcopydevtype=postscript
set hcopypscolor=true

set color1=rgb:0/0/0
set color0=rgb:f/f/f
set hcopywidth=640
set hcopyheight=400


hardcopy file.eps v(2) v(1)


其中:
 
set color1=rgb:0/0/0
set color0=rgb:f/f/f

是將黑底白線,改為白底黑線。


 
set hcopywidth=640
set hcopyheight=400

是設定存檔圖片之寬為 640 點,高為 400 點。

2013年10月17日 星期四

XCircuit 使用方式

1. 安裝

apt-get install xcircuit

2. 啟動

xcircuit &


3. 使用

z -> 縮小顯示比例
Z -> 放大顯示比例

紅點是格點,可以按 + - 來改變格點間距。


4.
右側是工具圖示,底下是工具介紹

4.1 畫線

4.1 畫線

滑鼠左鍵是畫線、定義轉折點
滑鼠右鍵是取消轉折點、取消畫線
滑鼠中鍵是決定畫線

4.2 畫方塊


4.3 畫圓/橢圓

首先選擇畫圓圖示,此時遊標會變成圓形,接著在格點上點滑鼠左鍵,會出現一個圓。

此時再按滑鼠左鍵,會變成畫弧模式,我們可以選擇我們要的弧形,

再按左鍵可以選擇圓弧的起點,接著按左鍵可以選圓弧終點。

畫完弧形後再按左鍵可以調整圓形比例,如果要畫橢圓的話可以在此階段處理。

如果我們再按左鍵的話,可以繼續調整,假設已經畫完的話,

可以直接按滑鼠中鍵結束繪圖。

4.4 選擇圖形/取消選擇圖形

將滑鼠遊標移至某個圖形上,再按中鍵可以把該物件變成黃色,此時該物件即被選擇。

多重選擇作法 1 - 使用滑鼠中鍵一一選擇物件
多重選擇作法 2 - 使用滑鼠中鍵拉一個方框,裡面的物件都會被選取。

按滑鼠右鍵,可以取消選擇圖形

4.5 刪除圖形

先選擇圖形,再按 Del 即可刪除圖形。

4.6 還原上一步

如果作錯事的話,可以按 u 選原上一步。

4.7 叫出內建元件庫 (Library)

按 l 可以叫出元件庫,再按 l 可以切換元件庫



4.8 將元件顯示移至畫面正中央

先將滑鼠遊標對準元件,再按 p 即可將該元件顯示移至畫面正中央。

4.9 移動元件

先以中鍵選擇要移動的元件,再按左鍵抓取該物件,然後移動該物件。


4.10 複製元件

將遊標移至要複製的元件,然後按 c 即可複製,此時移動滑鼠,我們可以看到分身元件。

請在要放置的位置上按滑鼠中鍵即可貼上,若按左鍵的話會蓋印章。

4.11 旋轉元件

要旋轉元件,請先選擇要旋轉之元件,再按右側工具圖示,或是

Edit -> Rotate/Flip 選擇來旋轉元件


4.12 加線的連接點/跳線

請按 l 進入元件,再選擇連接點或跳線。

連接點也可以按 . 直接打上去。


4.13 打字

請在畫面按 t 即可輸入字元

按 shift + t 可以幫線/端點標名字

標端點有個至高無上的指導原則:不要壓到線 + 在端點旁邊


4.14 上色

先選擇要上色的元件 (線、元件、字),再點右側顏色圖示來選顏色。

請注意,所有元件的顏色要一致,所有線段的顏色要一致,所有端點的顏色要一致。


4.15 編輯已存在之元件

請選擇要編輯的元件,再按 e 即可再編輯此元件。

4.16 切換多檔編輯

按 1 2 3 4 5 6 7 8 9 0

可以切換至不同頁面,編輯不同檔案。

2013年10月14日 星期一

Qemu ARM 虛擬機器安裝

1. 安裝 qemu

apt-get install qemu

2. 建立 ~/qemu_image 目錄

~$ mkdir qemu_image

3. 切換至 ~/qemu_image 目錄

cd ~/qemu_image

4. 建立 qemu-image 檔

qemu-img create arm.img 2G

5. 啟動 ARM Debian Linux 安裝畫面

5.1 下載 Debian ARM 安裝光碟至 ~/qemu_image 目錄中

ftp://ftp.twaren.net/Linux/Debian/debian-cd/7.6.0/armel/iso-cd/debian-7.6.0-armel-CD-1.iso

5.2 下載 Debian ARM 安裝開機檔至 ~/qemu_image/install 目錄中

將底下的兩個檔案複製到 ~/qemu_image/install 目錄中


ftp://ftp.debian.org/debian/dists/wheezy/main/installer-armel/current/images/versatile/netboot/initrd.gz


ftp://ftp.debian.org/debian/dists/wheezy/main/installer-armel/current/images/versatile/netboot/vmlinuz-3.2.0-4-versatile

5.3 啟動安裝畫面,安裝完 base 系統,至重新開機為止。

將底下指令另存為 buildarm.sh,再在 ~/qemu_image 目錄下執行即可。

qemu-system-arm -M versatilepb -m 512 \
        -kernel ./install/vmlinuz-3.2.0-4-versatile \
        -initrd ./install/initrd.gz \
        -hda arm.img \
        -append "root=/dev/sda1"

請執行 buildarm.sh

~/qemu_image/sh buildarm.sh

然後一步步安裝 ARM 版  Debian Linux。


6. 使用 Qemu 開機