2011年12月22日 星期四

建立 Debian boot USB

0. 前言

假設 USB 隨身碟為 /dev/sdd1,檔案系統為 VFAT,隨身碟掛載在 /mnt 目錄下

以下檔案要準備:

a. http://ftp.twaren.net/Debian/debian/dists/Debian6.0.3/main/installer-i386/current/images/hd-media/vmlinuz
b. http://ftp.twaren.net/Debian/debian/dists/Debian6.0.3/main/installer-i386/current/images/hd-media/initrd.gz

c. http://ftp.twaren.net/Linux/Debian/debian-cd/6.0.3/i386/iso-cd/debian-6.0.3-i386-CD-1.iso

1. 將上述三個檔案複製至 /mnt 目錄,並將 debian-6.0.3-i386-CD-1.iso 改名為 debian.iso

2. 在 /mnt 目錄新增 syslinux.cfg 檔,其內容為:
default vmlinuz
append initrd=initrd.gz

3. 執行 syslinux /dev/sdd1

4. 解除掛載

5. 使用 fdisk 將 /dev/sdd1 可開機旗標打開,此隨身碟應該可以開機了

2011年10月3日 星期一

Linux 底下安裝 gcin 中文輸入法

Linux 底下安裝 gcin 中文輸入法:

1. 安裝 gcin,指令如下:

apt-get install gcin

2. 回到家目錄,在家目錄下執行:

wget ftp://163.26.229.6/linux/.xinitrc


3. 離開帳號,重新登錄帳號,再執行 startx 進入 X 視窗。

4. 在 firefox 中測試中文輸入。

4.1. 按 Ctrl+SPACE 切換輸入法
4.2. 按 上/下 鍵選字

5. 設定輸入法:
請執行:

gcin-setup

即可設定 gcin 輸入法。




設定 zh_TW.Big5 locale

假設我們在 X 視窗開啟終端機時看到以下訊息:
-bash: warning: setlocale: LC_ALL: cannot change locale (zh_TW.Big5)

或者執行 locale 時看到以下訊息:

root@pc-29:~# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=zh_TW.Big5
LANGUAGE=zh_TW:zh
LC_CTYPE="zh_TW.Big5"
LC_NUMERIC="zh_TW.Big5"
LC_TIME="zh_TW.Big5"
LC_COLLATE="zh_TW.Big5"
LC_MONETARY="zh_TW.Big5"
LC_MESSAGES="zh_TW.Big5"
LC_PAPER="zh_TW.Big5"
LC_NAME="zh_TW.Big5"
LC_ADDRESS="zh_TW.Big5"
LC_TELEPHONE="zh_TW.Big5"
LC_MEASUREMENT="zh_TW.Big5"
LC_IDENTIFICATION="zh_TW.Big5"
LC_ALL=zh_TW.Big5

那表示我們的電腦沒有設定好 big5 的語系,此時請執行:

dpkg-reconfigure locales

將語系設定為 zh_TW.Big5 即可。

設定大字體之終端機

Linux 底下的終端機程式有許多種,例如:

1. gnome-terminal - 好用、好設定,但較肥,上 BBS (ppt) 時,字元排列會亂掉。
2. xterm (內定) - X 視窗內定,中文讀取有問題,除了剛架系統使用外,其它時候一般不使用。
3. rxvt-ml - 好用、不好設定,容量需求低,上 BBS 時無問題。
..

我們應該選擇使用那一個終端機程式  ? 個人偏好 rxvt-ml,但若各位不玩 bbs 的話,可以選擇 gnome-terminal 以便設定。

裝完 rxvt-ml 後,請執行以下指令以便進入大字體之終端機環境:

crxvt-big5 -fg white -bg black -km big5 -fm cmex24m -fn 12x24
           前景 白色 背景 黑色 編碼 big5 中文字形   英文字形

更深入探討 lspci 指令

更深入探討 lspci 指令:

之前我們所討論的 lspci 指令只是告訴我們如何觀察系統介面,今天我們希望能讓 lspci 指令告訴我們那一個介面卡是用那一個驅動程式,請執行:

lspci -v

其輸出如下(節錄):

00:1b.0 Audio device: Intel Corporation N10/ICH 7 Family High Definition Audio Controller (rev 01)
        Subsystem: Giga-byte Technology Device a002
        Flags: bus master, fast devsel, latency 0, IRQ 16
        Memory at e5100000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: <access denied>
        Kernel driver in use: HDA Intel

00:1d.7 USB Controller: Intel Corporation N10/ICH 7 Family USB2 EHCI Controller (rev 01) (prog-if 20 [EHCI])
        Subsystem: Giga-byte Technology Device 5006
        Flags: bus master, medium devsel, latency 0, IRQ 23
        Memory at e5104000 (32-bit, non-prefetchable) [size=1K]
        Capabilities: <access denied>
        Kernel driver in use: ehci_hcd

03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)
        Subsystem: Giga-byte Technology GA-EP45-DS5 Motherboard
        Flags: bus master, fast devsel, latency 0, IRQ 27
        I/O ports at d000 [size=256]
        Memory at e5010000 (64-bit, prefetchable) [size=4K]
        Memory at e5000000 (64-bit, prefetchable) [size=64K]
        [virtual] Expansion ROM at e5020000 [disabled] [size=64K]
        Capabilities: <access denied>
        Kernel driver in use: r8169

lspci -v 會給我更詳盡的資訊,其中有一行為

Kernel driver in use:XXXXXX

其中的 XXXXXX 即為該介面所使用到的驅動程式。



轉向符號 > >>

> -> 將標準輸出轉向至某一檔案,並將原有內容清掉。

>> -> 將標準輸出轉向至某一檔案,但是不清除內容而是從後面增加資料。


轉向符號好用之處在於能替我們將過多之訊息先存入某一檔案中,再以 vi 等文字編輯器來慢慢觀看。例如,我們可以使用

lspci -v > lspci.log

將 lspic -v 的輸出轉向至 lspci.log 檔案,以便我們用 vi 觀察。


dmesg > dmesg.log

可以將 dmesg 之輸出轉向至 dmesg.log 這個檔案,我們可以觀察其內容。

** dmesg 可以看到系統裡完整的硬體資訊 **

 如果你的 dmesg 出現很多奇怪的訊息,也可以看 /var/log/dmesg 這個檔案。

2011年7月21日 星期四

虛擬機器 Qemu

虛擬機器

所謂的虛擬機器就是「假的」機器,利用 X86 平台來模擬出其它平台並執行其它平台的程式,我們今天要介紹的虛擬機器是 X86 模擬主機,也就是以 X86 模擬 X86。


要執行虛擬機器,你的硬體要有幾個條件:

1. CPU 為多核心 (四核以上)
2. RAM 為 4GB 以上 (愈大愈好),以便分配給每台虛擬機器獨立的 RAM (至少 512MB)
3. 硬碟愈大愈好

市面常見的虛擬機器程式有三個,最有名的叫 VMware、第二有名叫 VirtualBOX,最沒有名叫 Qemu,今天我們要教 Qemu。

Why ?
1. VMware 要錢,上網申請可以使用免費版本
   http://www.vmware.com/tw/

2. VirtualBOX 免費但是某些原始碼未開放,VirtualBOX 有簡單易用的介面,如果各位是使用 Windows 系統可以參考使用 Win 版的 VirtualBOX。
   http://www.virtualbox.org/
   http://azo-freeware.blogspot.com/2008/09/virtualbox-166.html

3. Qemu 是近幾年發展速度最快的虛擬機器,可以模擬 X86 平台、ARM 平台及其它平台
   http://wiki.qemu.org/Main_Page

Qemu 的使用步驟如下:

0. 安裝 Qemu
1. 設定硬碟
2. 下載安裝 ISO 檔
3. 執行


*** 我們執行環境為一般使用者,只安裝套件時要用 root ***

以下將一一說明:

0. 安裝 Qemu
   請執行
   apt-get install qemu qemu-kvm
   來安裝 qemu 套件

1. 設定硬碟映像檔
   請建立 ~/qemu/linux.img,檔案大小為 8GB,指令如下:

   ~$ mkdir qemu
   ~$ cd qemu
   ~/qemu$ qemu-img create linux.img 8G

   此時會建立一個「空」的 linux.img,當我們執行 ls -l 時,請輸出如下:

herman@pc-29:~/qemu$ ls -l
總計 0
-rw-r--r-- 1 herman herman 8589934592 2011-07-21 19:10 linux.img

   但若以 du -sh linux.img 會發現此檔大小為 0,輸出如下:

herman@pc-29:~/qemu$ du -sh linux.img
0       linux.img

Why ? Qemu 在使用硬碟映像檔的策略是:需要時才佔用。


2. 下載安裝 ISO 檔

請將 ftp://163.26.229.6/linux/debian-6.0.3-i386-netinst.iso
下載至 ~/qemu 目錄下

   ~/qemu$ wget ftp://163.26.229.6/linux/debian-6.0.3-i386-netinst.iso
   即可下載


3. 執行
   請執行:
   kvm -m 512 -hda linux.img -cdrom debian-6.0.3-i386-netinst.iso -boot d

-m 512          -> 給虛擬機器 512 MB 的記憶體
-hda linux.img  -> 指定 linux.img 這個檔案為虛擬機器的 hda 硬碟
-cdrom debian-  -> 指定 debian iso 檔為光碟機
-boot d         -> 指定光碟開機
-boot c         -> 指定 hda 開機


kvm 說明 - Linux 核心虛擬技術 - KVM(Kernel-based Virtual Machine)
http://linuxkvm.blogspot.com/2011/04/linux-kvmkernel-based-virtual-machine.html

如果輸出如下,那表示我們要載入 kvm 模組:

herman@pc-29:~/qemu$ kvm -m 512 -hda linux.img -cdrom debian-6.0.2.1-i386-netinst.iso -boot d
open /dev/kvm: No such file or directory
Could not initialize KVM, will disable KVM support

2011年7月14日 星期四

使用者權限管理

Linux 的檔案權限與目錄配置

Q1. 我是 s100 的系統管理員,s100a001 希望他的目錄權限是 rwxr-x---,請問該
   如何處理 ?                                          111101000
                                                         7  5  0
A. 此設定的功用:讓其它人無法切換/觀察 s100a001 目錄中的東西,但是群組可以

/home# chmod 750 s100a001

Q2. 我是 s100 的系統管理員,s100a002 正在開發高機密性的專案,他希望他的目錄除了他自己,別人都不能看,請問該如何處理 ?

A. 權限要設為:rwx --- ---
                 7   0   0

/home# chmod 700 s100a002

Q3. 我們希望建立一個目錄是 /home/s100,此目錄的所有人是 root,群組是 s100 方便我們交換檔案使用,而 s100 群組的人對此目錄都有讀/寫的權限,而且每個檔案的屬性之群組都是 s100,s100 群組以外的人對此目錄將無讀/寫之權限。

A. /home# (以 root 權限在 /home 目錄下)

mkdir s100
ls -l

會看到 s100 之屬性如下:
drwxr-xr-x   2 root     root     4096 2011-07-14 20:28 s100

chgrp s100 s100

ls -l

會看到 s100 之屬性如下:
drwxr-xr-x   2 root     s100     4096 2011-07-14 20:28 s100

chmod 770 s100

ls -l

會看到 s100 之屬性如下:
drwxrwx---   2 root     s100     4096 2011-07-14 20:28 s100


Q. 我們要新增一個目錄叫 /home/class,其群組為 class,s100axxx 帳號可以使用此目錄讀寫,但是所建立的檔案其群組都是 class,請問該如何處理 ?

A. /home# (以 root 權限在 /home 目錄下)

mkdir class

chgrp class class              (將 class 目錄之群組改為 class)
      群組  要更改之檔案/目錄

chmod g+s class (讓 class 目錄下的所有檔案繼承 class 目錄的群組)

2011年7月7日 星期四

有關帳號二、三事

1. id 指令 -> 告訴我們目前帳號的資訊,包括 uid, gid 以及 groups,舉例來說,某個使用者的 id 輸出如下:

uid=1000(herman) gid=1000(herman) groups=1000(herman),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),112(netdev)

上述輸出告訴我們,此使用的 uid 為 1000,使用者帳號為 herman,gid 為 1000,群組亦為 herman,至於 groups 是此使用者所屬群組,主群組為 herman,次群組為 cdrom, floopy, auido, dip, video, plugdev, netdev。

uid -> User ID,建帳號時,系統會自動指定一個未使用的 uid 給你要建的帳號
gid -> Group ID,群組 ID,建帳號時,若未指定,系統會自動指定一個未使用的 gid 給你要建的帳號
groups -> 所屬群組,有主群組及次群組

id 帳號 -> 將某帳號的資訊列出來


2. 使用者帳號設定檔

/etc/passwd     -> 帳號
/etc/shadow     -> 密碼
/etc/group      -> 群組

其權限如下:

-rw-r--r-- 1 root root 1546 2011-07-07 19:12 passwd
-rw-r----- 1 root root 1090 2011-07-07 19:14 shadow
 ^^^^^^*^^

我們可以發現 shadow 的讀取權限受到限制,如上述 * 處,其原因在於防止暴力猜測法以求出密碼。

0000 - 9999

0 - 9

根據離散數學的推導,有一密碼的排列組合為 n 的話,要猜出此密碼的平均次數為 n/2。

PC 上的密碼可能的文字如下所示:

0~9, a~z, A~Z, ~!@#$%^&*()_+{}:"<>?

所謂的暴力猜測法是以電腦幫我們排列組合,來猜測是否與編碼完之密碼一致。

所謂的編碼,是指把 abc123 -> $1$BrhU5/2V$CwKqbD,編碼有一個特性是單向編碼,破解的方式是使用電腦作排列組合再去比對。


3. 新增帳號:

useradd -m 帳號名稱

useradd -m eecs -> 花生省魔術 ?

a. /etc/passwd 加了一行 eecs
b. /etc/shadow 加了一行 eecs
c. /etc/group  加了一行 eecs
d. 系統新增一個 /home/eecs 目錄

Q: 如何手動刪除帳號 ?

4. 給新帳號密碼:

作法一、

root@pc-29:~# passwd eecs
輸入新的 UNIX 密碼:abc123
再次輸入新的 UNIX 密碼:abc123
passwd:密碼已成功地變更


 作法二、

# echo 帳號:密碼 | chpasswd

例如:

# echo eecs:password | chpasswd


5. 刪除帳號

userdel eecs

刪除帳號作了那些動作 ?

a. /etc/passwd 刪除一行 eecs
b. /etc/shadow 刪除一行 eecs
c. /etc/group  刪除一行 eecs
d. 系統新增之 /home/eecs 目錄 *** 沒有 *** 刪除,請至 /home 目錄,執行:
   rm -rf eecs
   手動刪除目錄(要十分確定再作這個動作!!)

5.1 如何「暫時」將帳號鎖起來 ?
假設我們管帳號時發現有某位使用者「疑似」有濫用系統的傾向,例如亂放檔案或是大量傳輸資料導致頻寬不足,這個時候我們可以「暫時」將使用者帳號鎖定。方式如下:在 /etc/shadow 檔中找出該位使用者,在其密碼欄位加上一個星號即可將此帳號鎖起來不讓他登入。



6. 如何新增大量帳號

假設你現在要新增 50 個學生帳號,其學號為:s100a001 ~ s100a050,每個人的群組都是 eecs,家目錄為 /home/s100a001 ~ s100a050,shell 要為 /bin/bash,密碼要為亂數產生,請問要怎麼辦 ?

6.0 新增大量帳號的思維:

a. 新增 001 帳號 (此時無密碼),提示:useradd
b. 修改 001 帳號之密碼,提示:echo 帳號:密碼 | chapasswd
c. 看看我們帳號是否建立完畢,否則帳號編號往上加 1,並回到步驟 a.,提示:for 迴圈


6.1 先從一個帳號開始:s100a001

groupadd eecs -> 新增 eecs 群組

useradd -m -g eecs -s /bin/bash s100a001

-m              -> 強制建家目錄
-g eecs         -> 設定主群為 eecs
-s /bin/bash    -> 設定 shell 為 /bin/bash

6.2 讓系統自動產序號

請將以下片段另存新檔名為 for.sh

for i in `seq 1 50`
do
 echo $i

done

然後執行 sh for.sh

我們可以發現此程式列印出 1 ~ 50 的字串

6.3 改善此程式,讓它印出學號

for i in `seq 1 9`
do
 echo s100a00$i
done

for i in `seq 10 50`
do
 echo s100a0$i
done


7. 如何給亂數密碼
最簡單的亂數密數:date +%N


8. 整個程式:

for i in `seq 1 9`
do
  echo "echo Creating user account: s100a00$i"
 echo useradd -m -s /bin/bash -g s100 s100a00$i
 a=`date +%N`
 echo "echo s100a00$i:$a | chpasswd"
done

for i in `seq 10 50`
do
 echo "echo Creating user account: s100a0$i"
 echo useradd -m -s /bin/bash -g s100 s100a0$i
 a=`date +%N`
 echo "echo s100a0$i:$a | chpasswd"
done


9. 如何進行上述程式:

sh for.sh > createusr.sh
將大量建帳號之指令轉成 createusr.sh 這個 shell script.

# sh createusr.sh
以 root 權限來新增帳號

10. 如何大量刪除帳號 ?

a. /etc/passwd
b. /etc/shadow
c. 在 /home 目錄下執行 rm -rf s100*

2011年6月30日 星期四

新增硬碟

如何新增硬碟 ?

在 Windows/Linux 底下,新增硬碟是一件很常見的工作,一般來說,新增硬碟的流程如下:

1. fdisk 建立硬碟分割
2. 格式化
3. 掛載
4. 確保下次重新開機後能再度使用此硬碟


今天我們以另一隻隨身碟來作為新增硬碟的例子,未來各位可以自行參考安裝新的硬碟。

[判別新的硬碟]

請執行 dmesg 看最後幾行,如以下所示:

irectory
[    9.426781] NFSD: starting 90-second grace period
[   19.698735] apm: BIOS not found.
[   19.763297] sshd (1261): /proc/1261/oom_adj is deprecated, please use /proc/1261/oom_score_adj instead.
[   19.968007] eth0: no IPv6 routers present

接著請插上隨身碟,等待五秒,再執行 dmesg,並觀察其結果,如以下所示:

[   19.968007] eth0: no IPv6 routers present
[168958.284096] usb 1-5: new high speed USB device using ehci_hcd and address 2
[168958.418552] usb 1-5: New USB device found, idVendor=058f, idProduct=6387
[168958.418557] usb 1-5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[168958.418560] usb 1-5: Product: Mass Storage Device
[168958.418563] usb 1-5: Manufacturer: JetFlash
[168958.418565] usb 1-5: SerialNumber: LRSLABPD
[168958.453634] Initializing USB Mass Storage driver...
[168958.453731] scsi2 : usb-storage 1-5:1.0
[168958.453815] usbcore: registered new interface driver usb-storage
[168958.453817] USB Mass Storage support registered.
[168959.452829] scsi 2:0:0:0: Direct-Access     JetFlash Transcend 16GB   8.07 PQ: 0 ANSI: 2
[168959.453276] sd 2:0:0:0: Attached scsi generic sg2 type 0
[168959.456217] sd 2:0:0:0: [sdb] 31375360 512-byte logical blocks: (16.0 GB/14.9 GiB)
[168959.456680] sd 2:0:0:0: [sdb] Write Protect is off
[168959.456683] sd 2:0:0:0: [sdb] Mode Sense: 03 00 00 00
[168959.457555] sd 2:0:0:0: [sdb] No Caching mode page present
[168959.457559] sd 2:0:0:0: [sdb] Assuming drive cache: write through
[168959.460105] sd 2:0:0:0: [sdb] No Caching mode page present
[168959.460110] sd 2:0:0:0: [sdb] Assuming drive cache: write through
[168959.910567]  sdb: unknown partition table
[168959.913678] sd 2:0:0:0: [sdb] No Caching mode page present
[168959.913682] sd 2:0:0:0: [sdb] Assuming drive cache: write through
[168959.913684] sd 2:0:0:0: [sdb] Attached SCSI removable disk

從以上訊息,我們可以得知新增加的隨身碟為 /dev/sdb,接著我們可以針對 /dev/sdb 來進行以下操作:分割、格式化、掛載。

** 警告 ** fdisk 殺傷力很大,如果你原先電腦中有內建硬碟,請勿誤用 fdisk,否則一失足成千古恨!!

[(用 root 權限)使用 fdisk 來進行硬碟分割]

fdisk /dev/sdb

--------------------------------------------------------------------------------
Command (m for help):m              -> 呼叫 help 畫面,顯示可用之命令
Command action
   a   toggle a bootable flag           -> 設定割區是否可開機(一顆硬碟只能有一個分割區有此旗標)
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition                           -> 刪除分割區
   l   list known partition types                 -> 顯示分割區型別
   m   print this menu                            -> 呼叫此畫面
   n   add a new partition                        -> 增加新分割區
   o   create a new empty DOS partition table
   p   print the partition table                   -> 列印(顯示)分割區表
   q   quit without saving changes             -> 跳出而且不存檔
   s   create a new empty Sun disklabel
   t   change a partition's system id          -> 修改分割區 id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit             -> 跳出而且存檔
   x   extra functionality (experts only)       -> 專家指令,不熟不要用

--------------------------------------------------------------------------------
Command (m for help):p -> 列印(顯示)分割區表

Disk /dev/sdb: 16.1 GB, 16064184320 bytes
64 heads, 32 sectors/track, 15320 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xea79e48d

   Device Boot      Start         End      Blocks   Id  System

上面畫面告訴我們此硬碟有 16 GB,目前沒有任何分割區
--------------------------------------------------------------------------------
Command (m for help): p

Disk /dev/sdb: 1004 MB, 1004535808 bytes
256 heads, 63 sectors/track, 121 cylinders
Units = cylinders of 16128 * 512 = 8257536 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1         122      979968    c  W95 FAT32 (LBA)
Partition 1 has different physical/logical beginnings (non-Linux?):
     phys=(1023, 255, 63) logical=(0, 32, 33)
Partition 1 has different physical/logical endings:
     phys=(1023, 255, 63) logical=(121, 166, 38)

上面畫面告訴我們此硬碟有 1004 MB,目前有 /dev/sdb1 分割區,其型別為 W95 FAT32 (LBA)

--------------------------------------------------------------------------------
Command (m for help): d
Selected partition 1

由於我們只有一個分割區,因此按 d 指令會自動將此分割區砍掉,請注意,此時還有挽回的餘地,只要按 q 跳出即不會對硬碟造成任何傷害。

--------------------------------------------------------------------------------
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-15320, default 1): 1
Last cylinder, +cylinders or +size{K,M,G} (1-15320, default 15320):
Using default value 15320

新增一個主要(primary)分割區,其起始磁柱為 1,結束磁柱為 15320,如果你的隨身碟容量較少,其數字也較小,作完結果如下:

Command (m for help): p

Disk /dev/sdb: 16.1 GB, 16064184320 bytes
64 heads, 32 sectors/track, 15320 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xfc46e2f6

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       15320    15687664   83  Linux

 --------------------------------------------------------------------------------
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

執行完 w 指令就將我們所分割的隨身碟儲存起來,w 指令的破壞力相當強大,一但執行完 w 指令,裡面原始之資料就跟你說 bye bye。

[(用 root 權限)使用 mkfs.ext4 來進行硬碟格式化]

剛剛作完的流程會讓我們產生一新分割區叫 /dev/sdb1,接下來是針對此分割區進行格式化,請執行:

mkfs.ext4 /dev/sdb1
                        ^ -> 千萬別打錯字母!!!!!!!!!!!!!!!!!!!

mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
981120 inodes, 3921916 blocks
196095 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4018143232
120 block groups
32768 blocks per group, 32768 fragments per group
8176 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Writing inode tables:  81/120
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 21 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

作完指令後,你的隨身碟已經完成格式化了。

[(用 root 權限)使用 mount 來進行分割區掛載]

先以 df -h 來觀看目前掛載之硬碟及掛載點:

檔案系統              Size  Used Avail Use% 掛載點
/dev/sda1              37G  2.6G   33G   8% /
tmpfs                 1.5G  4.0K  1.5G   1% /lib/init/rw
udev                  1.5G  196K  1.5G   1% /dev
tmpfs                 1.5G     0  1.5G   0% /dev/shm
/dev/sda5              74G   53G   17G  77% /home
/dev/sda2             138G   92G   40G  71% /opt
/dev/sda3              28G  5.8G   21G  22% /usr


接著請執行

mount /dev/sdb1 /mnt

將 /dev/sdb1 分割區掛載至 /mnt 目錄下,接著可再執行 df -h 來確認,其結果如下。

檔案系統              Size  Used Avail Use% 掛載點
/dev/sda1              37G  2.6G   33G   8% /
tmpfs                 1.5G  4.0K  1.5G   1% /lib/init/rw
udev                  1.5G  196K  1.5G   1% /dev
tmpfs                 1.5G     0  1.5G   0% /dev/shm
/dev/sda5              74G   53G   17G  77% /home
/dev/sda2             138G   92G   40G  71% /opt
/dev/sda3              28G  5.8G   21G  22% /usr
/dev/sdb1              15G  166M   14G   2% /mnt

--------------------------------------------------------------------------------
在隨身碟上建立空的測試檔,請執行:

dd if=/dev/zero         of=/mnt/test            bs=1M           count=20
   輸入自 /dev/zero     輸出至 /mnt/test        blocksize=1MB   20 區塊


上述指令可以在 /mnt 中產生一個 test 檔,其大小為 20 MB

 --------------------------------------------------------------------------------
請執行 umount /mnt 將 /mnt 目錄解除掛載

--------------------------------------------------------------------------------
確保下次重新開機後能再度使用此硬碟

硬碟的掛載表在 /etc/fstab,如果我們希望在下次開機時能自動掛載,請在 /etc/fstab
中加入:

/dev/sdb1 /mnt ext4 defaults 1 2

加入後可以執行

mount -a 來測試是否會自動掛載

mount -a 是針對 /etc/fstab 中之設定來掛載相對應的裝置至相對應的目錄!!

但是 /etc/fstab 加入
/dev/sdb1 /mnt ext4 defaults 1 2

此方式有何缺點 ?


1. 若隨身碟自動辨識為 /dev/sdc1 的話,那下次開機認不到

 /dev/sdb1 -> 隨身碟
 /dev/sdb1 -> SATA 硬碟
 /dev/sdb1 -> SCSI 硬碟

在新版 Linux 中,為了防止認錯人,因此使用 block id 的技術,要知道隨身碟的
block id,請執行:

blkid /dev/sdb1

/dev/sdb1: UUID="e6614b38-6d88-4b87-b8f4-35fad9d4611f" TYPE="ext4"

上述 UUID=.. 即為此隨身碟的 block id。

***

== 掛載 windows 隨身碟 ==

當我們執行

fdisk -lu /dev/sdb

得到以下訊息時:


root@pc-29:/home/herman# fdisk -lu /dev/sdb

Disk /dev/sdb: 4009 MB, 4009754624 bytes
23 heads, 23 sectors/track, 14804 cylinders, total 7831552 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xc3072e18

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            8064     7831551     3911744    c  W95 FAT32 (LBA)

我們可以推論 /dev/sdb 硬碟有 4009 MB 大小,其分割區為 /dev/sdb1,其分割區以 W95 FAT32 (LAB) 之格式來格式化。這代表此隨身碟是以 Windows 分割/格式化的。要掛載此隨身之指令為:

# mount -o iocharset=big5 /dev/sdb1 /mnt

執行完我們可以使用 df -h 來驗證此隨身碟是否已掛載,其中 -o iocharset=big5 是指掛載參數設定為 big5 中文檔名。如果我們的檔案以中文檔名存檔,但是掛載時沒有加此 -o 參數,則掛載完後之檔名會變成亂碼。

解除掛載請先離開 /mnt 目錄,再執行:

# umount /dev/sdb1

# umount /mnt
即可。


** 一行指令清掉 partition table

假設我們要清掉 /dev/sdb 的 partition table,請執行以下指令即可:

# dd if=/dev/zero of=/dev/sdb bs=512 count=1 \Enter

請千萬注意別打成系統碟如 /dev/sda,否則只能重灌!!



== 還原隨身碟為 windows 格式 ==

1. 使用 fdisk 將 /dev/sdb1 改為 partition id 為 b (按 t 來修改)
2. mkdosfs /dev/sdb1 -> 將此分割區格式化

2011年6月23日 星期四

Linux 桌面常見的應用程式:

1. PDF 檔閱讀軟體

Debian 本身有內建 pdf 檔閱讀軟體,舊版 debian 的  pdf 閱讀軟體為 xpdf,新版(我們上課所教的版本) 是用 evince,請安裝 evince,再執行 evince abc.pdf 即可觀看 abc.pdf 檔內容。

另一個更為專業的 pdf 檔閱讀軟體是 adobe 本身所出的 Adobe Reader,目前 Linux 上的最新版本為 8.1.7,必須至 Adobe 網站下載並安裝才行,以下將介紹其步驟。

首先請至 Adobe 網站下載 Linux 最新版之 Reader,下載網頁為:
http://get.adobe.com/tw/reader/

請使用 firefox 下載,下載完之後會存放於 ~/Downloads 目錄,檔名為:
AdobeReader_cht-8.1.7-1.i386.deb

如何手動新增套件 ?

先前所討論之安裝流程均為 apt-get install 套件名稱,apt-get 會自動幫我們下載套件再安裝,現在我們已經下載 AdobeReader_cht-8.1.7-1.i386.deb 檔了,要如何安裝 ?

請以 root 權限執行

dpkg -i AdobeReader_cht-8.1.7-1.i386.deb

如此一來系統會幫我們安裝 Adobe Reader Linux 版,安裝完要執行 Adobe Reader,請執行:

acroread &


即可執行 Adobe Reader,我們可以自網路上下載 pdf 檔來測試此 Reader 是否安裝成功 ?

Q: 如何將 Adobe Reader 放在選單中 ?

/etc/X11/icewm/menu 加上以下這行:

prog "Adobe Reader" AdobeReader_16x16 acroread

Q2: 如何將 Keroro 的圖變成 Adobe Reader 的圖示 ?

a. 下載 Keroro 的圖,並以 gimp 編輯成 16x16 大小的圖,並將檔名存為 keroro.png。

b. 以 root 權限將 keroro.png 複製至 /usr/share/icons/icewm_icons/ 目錄

c. 將 /etc/X11/icewm/menu 中有關 Adobe Reader 的設定改為:

prog "Adobe Reader" keroro.png acroread


2. PDF 文件產生軟體

 在 Linux 底下最容易產生 pdf 文件的檔案應該是 openoffice,openoffice 有很多功能,如文件編輯、繪圖、試算表、投影片 .. 等,均可以直接輸出為 pdf 格式。

2.1 如何從 pdf 文件截圖出來 ?

作法 1. 畫面截圖:

請開啟 gimp,然後選擇:檔案 -> 建立 -> Screenshot,再使用裁切工具將圖切割並複製 -> 貼上至 openoffice 即可將圖截出來。


作法 2. 直接讀入 pdf 檔:

檔案 -> 開啟 -> pdf 檔

開啟時 dpi 至少選 100 以上,500 以下即可(否則圖檔會過大),並選擇你要讀的頁碼。

再使用裁切工具將圖切割並複製 -> 貼上至 openoffice 即可將圖截出來。

3. 美工圖庫

在編輯文件時我們經常要使用一些圖庫,但是使用圖庫要十分小心,萬一誤踩地雷會被告,因此請使用 openclipart 的圖庫,其網址在:

http://www.openclipart.org/

可以搜尋並下載 .svg 檔,svg 格式是一種向量圖檔,可以無段縮放,詳細說明在:

http://zh.wikipedia.org/zh-tw/SVG

4. 編輯 svg 圖檔

假設你有特殊的美工天份,可以安裝 inkscape 來編輯 svg 圖檔,請執行:

apt-get install inkscape

再執行 inkscape 來編輯即可。

2011年6月16日 星期四

icewm 客製化

ICEWM 是一個輕量級 (Light Weighted) 的視窗管理程式,其官網在:http://www.icewm.org/,ICEWM 的優點:

1. 類似 Windows 視窗介面,學習上手較快
2. 反應速度相當快,即使是在較低速電腦或是在高負荷運算下均有相當快的反應速度。
3. 可針對個人需求進行客製化。

ICEWM 的缺點:

1. 設定時要撰寫設定檔,沒有比較好用的 GUI 設定程式。但是一旦設定好介面,可以快速複製介面至其它主機。
2. 設定檔有些語法要自己理解,才能進行設定
3. 畫面較陽春
4. 沒有桌面圖示
5. 國內用的人不多,有問題沒得問,要上網查答案。

為什麼要選擇 ICEWM 來作為視窗管理員 ?

1. 你執行電腦是看視窗管理員的特效還是希望電腦將所有的運算能力放在我們要的功能上 ? 例如畫 3D 或是作影像處理 ?

2. 桌面特效有些時候無法幫助我們的工作有效率,反而會降低效率。

今天主題:

1. 如何移植老師的桌面環境至你的電腦 ?

ICEWM 之設定目錄在 /etc/X11/icewm,主要設定檔有三:

  • /etc/X11/icewm/menu -> 選單設定檔,負責選單名稱、圖示及呼叫指令
  • /etc/X11/icewm/toolbar -> 工具列設定檔,負責工具列名稱、圖示及呼叫指令,其語法與上述之 menu 一模一樣。
  • /etc/X11/icewm/preferences -> icewm 系統設定檔,可設定熱鍵等許多奇奇怪怪的參數

要移植桌面環境過來,請先進入 root 權限,再切換至 /etc/X11/icewm 目錄,指令如下:

   su \Enter
   cd /etc/X11/icewm

   切換過來後,先將舊的 icewm 設定檔備份至 orig 目錄,指令如下:

  1. mkdir orig                    -> 建立 orig 目錄
  2. mv menu orig               -> 將 menu 設定檔移至 orig 目錄下
  3. mv preferences orig       -> 將 preferences 設定檔移至 orig 目錄下
  4. mv toolbar orig             -> 將 toolbar 設定檔移至 orig 目錄下

執行完上述步驟可以用 ls -l 及 ls -l orig 來進行驗證,看看 menu、preferences 以及toolbar 三個檔案是否都移至 orig 目錄

舊的設定檔備份完之後,可以開始複製新的設定檔,請執行以下三個指令(注意你的目錄還在 /etc/X11/icewm)

wget ftp://163.26.229.6/linux/icewm/preferences
wget ftp://163.26.229.6/linux/icewm/menu
wget ftp://163.26.229.6/linux/icewm/toolbar

複製完之後可以執行 ls -l 來看我們是否已經新設定檔複製過來。若確定已正確複製,我們可以在 icewm 選單中進行

滑鼠右鍵(呼叫選單) -> 登出 -> 重新啟動 Icewm

此時你應該可以看到新的選單,但是圖示還未完全正常。

終端機的另一個程式是 gtkterm,可以自行安裝看看。

有關圖示的部份,我們必須將

ftp://163.26.229.6/linux/icewm/icewm_icons 目錄複製到 /usr/share/icons 目錄下,請以 root 權限切換至 /usr/share/icons 目錄,指令是:

cd /usr/share/icons

再執行

wget -nH --cut-dirs=2 -r ftp://163.26.229.6/linux/icewm/icewm_icons

即可將 icwm_icons 目錄複製下來

 A. /etc/X11/icewm/menu 選單設定檔說明:

在 /etc/X11/icewm/menu 中,我們可看到其中的語法主要如下:

menu "OpenOffice" ooo_gulls_16x16 {
     prog "Openoffice 套件" ooo_gulls_16x16 soffice
     prog "writer 文字文件" writer.png soffice -writer
     prog "calc 試算表" calc.png soffice -calc
     prog "draw 繪圖" draw.png soffice -draw
     prog "impress 投影片" impress.png soffice -impress
     prog "base 資料庫" base.png soffice -base
     prog "math 數學公式" math.png soffice -math
     prog "html 文件" writer.png soffice -web
}

我們將上述語法抽出來可以看到:

menu "OOOO" XXXX {
}

其中 menu 指的是子選單
"OOOO" 指的是子選單名稱
XXXX   指的是子選單圖示 (在 icewm_icons 目錄下之圖形)

menu 中的 prog 語法如下:

prog "writer 文字文件" writer.png soffice -writer
     ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^ ^^^^^^^^^^^^^^^

其中 prog 指的是可執行之程式
"writer 文字文件" 指的是程式名稱
writer.png 指的是程式之圖示
soffice -writer 是指執行之命令

separator -> 分隔線

/etc/X11/icewm/toolbar -> 工具列設定檔,與 menu 之語法一模一樣。

設定中文終端機

prog rxvt24 xterm_16x16 urxvt -imlocale zh_TW.UTF8 -fn "12x24,xft:AR PL UMing TW:style=Light:pixelsize=24"


請安裝 openoffice.org 來看看是否有 openoffice 套件 ?
要加上中文介面請安裝 openoffice.org-l10n-zh-tw 加上中文語系

/etc/X11/icewm/preferences -> icewm 系統設定檔

請參考:

1. http://b2d-linux.com/icewm-doc/manual/
2. http://b2d-linux.com/icewm-doc/faq/IceWM-FAQ.html

2011年6月9日 星期四

微調 X 視窗

X 視窗之微調

請先參考下圖了解 X 視窗的架構





了解 X 視窗之架構後,我們可以針對不同的地方來進行微調,例如:桌面、底圖、選單。

xdpyinfo -> 可以觀察目前視窗解析度及色深,但是 xdpyinfo 顯示出來的資料太多行了,該如何處理 ?

xdpyinfo |more
xdpyinfo > xdpyinfo.log (轉向輸出至 xdpyinfo.log 再用 vi 觀看)

我們會看到其中一段內容如下:

..
  dimensions:    1680x1050 pixels (444x277 millimeters)
  resolution:    96x96 dots per inch
  depths (7):    24, 1, 4, 8, 15, 16, 32
  root window id:    0x11a
  depth of root window:    24 planes
..

上面內容表示目前營幕解析度為 1680x1050,共支援 7 種顏色深度:24, 1, 4, 8, 15, 16, 32,
root (根)視窗顏色深度為 24 planes -> 24 bit
96x96 dots per inch -> 是指每吋有 96 個點 (DPI)


何謂顏色色深 (Color Depth) ?

1 bit   -> 2^1 = 2 colors   黑白兩色
2 bits  -> 2^2 = 4 colors   CGA Color Graphics Adaptor
4 bits  -> 2^4 = 16 colors  EGA Enhance Graphics Adaptor
8 bits  -> 2^8 = 256 colors VGA Video Graphics Array
15/16 bits -> 2^15 = 32768/2^16=65536 colors Hi-color
24/32 bits -> True color

何謂營幕解析度 (Resolution)

請參考
http://en.wikipedia.org/wiki/File:Vector_Video_Standards2.svg

安裝看圖程式,請執行:

apt-get install geeqie


1. 美化桌面

a. 靜態底圖
   使用 xloadimage 來載入桌布,請先確定你有 xloadimage 這個指令,若找不到此
   命令,請下
   apt-get install xloadimage
   來安裝此套件。安裝完後請執行:

   xsetbg -fullscreen 圖檔

   即可設定桌布。

b. 動態底圖
   例如 xplanet 或是 xearth,安裝完後執行 xplanet 即可,每 24 小時轉一圈。
   另一個是 xscreensaver,但不建議裝。

2. 自訂底圖
   上述設定靜態底圖有個缺點:重新進入 X 視窗後底圖就不見了,因此我們希望能在進入 X 視窗時能自動再次載入桌布,該如何設定 ?

   X 視窗在啟動時會讀取 ~/.xinitrc 這個設定檔,我們可以執行

   ~$ wget ftp://163.26.229.6/linux/.xinitrc

   來下載。其檔案中有一行:

   xsetbg strike.jpg

   請將此行改為

   xsetbg -fullscreen 你要當桌布的圖檔名稱

   如此一來下回進入 X 視窗時即會自動載入同一張桌布。

使用者權限

從現在起,請使用一般使用者登入來進行操作。


使用一般權限帳號

為什麼要用一般權限操作電腦

安裝到這邊差不多告一段落了,接下來要恢復正常,使用一般權限帳號。UNIX 初學者最常見的錯誤就是用 root 權限灌軟體,並且在灌完後繼續使用 root 權限執行日常事務。使用 root 實在太方便了,設定音效卡時不必將自己加入 audio 權組即可播音樂,其他事也相當方便。那為什麼我們不用 root 就好了而是要用一般權限來操作電腦呢 ?

root 權限因為是拿來管理系統的,因此具有整個系統的生殺大權,一般人如果較沒有Unix/Linux 系統管理觀念的要誤殺整個系統基本上只是一個指令的事,就連 /etc 目錄底下的檔案不小心誤砍也有可能造成系統無法開機。更何況人類這種生物最主要的缺陷就是太容易出錯了,俗語說人有失、馬有亂,就連俗話都有可能打錯了更別提要管系統。

選擇 root/一般權限的時機

先提示一下,還記得我們之前安裝流程所建立的 edatool 這個帳號嗎 ? 沒錯,接下來我們的操作都要使用此帳號了。在此我們要解釋一下選擇帳號權限的時機,請問何時你該使用 root ? 何時又該使用一般權限帳號 ? 筆者講一下我的答案:

使用一般使用者來進行日常生活的工作,使用 root 來進行「系統維護」的工作。

現在問題來了,什麼是系統維護的工作 ? 是以下工作嗎 ?

  • 聽 MP3 ?
  • 上網看 WWW
  • 打 bbs
  • ...

還是以下工作 ?

  • 新增/移除 軟體/使用者/驅動程式
  • 更改 系統/軟體 的設定(例如系統時間、IP .. 等)修理系統
  • 開/關機
  • 其它

很明顯我們不必用 root 來聽 MP3、上網跟打 b。因此,除了上述系統管理事項之外,請各位嚴格遵守只能用一般使用者權限的規定,否則使用 root 執行以下指令即可以摧毀整個系統:

rm -rf /*

警告:上述指令請千萬別以 root 權限執行,除非你希望日子過得刺激些!!

如何切換 root 帳號權限

當我們使用 linux 登入後,「如果」我們臨時需要使用 root 權限時,我們可以執行:

su \Enter

此時系統會要求我們輸入 root 密碼,請輸入密碼後按 \Enter,之後即會出現
#

的提示符號,這表示我們已經取得 root 權限,可以使用 whoami 指令來觀察。要離開
root 權限,請在 # 提示符號下執行:

# exit \Enter


** 有關提示符號 **
$ 通常指的是一般使用者
# 指的是 root

為什麼要自一般使用者帳號切換為 root 帳號 ? 直接使用 root 帳號不是比較方便嗎 ?

** 小工具 **
執行以下指令會使你的提示符號前面加上時間。

export PS1='${debian_chroot:+($debian_chroot)}\A/$? \[\033[01;32m\][\u@\h] \[\033[01;34m\]\w \$ \[\033[00m\]'

2011年5月19日 星期四

設定影音播放

Linux 底下的影音播放軟體

一般來說,常見的影音格式如下所示:

影:DVD、AVI、MP4、FLV (Flash)、RMVB .. 等格式
音:CD、MP3、WMA、OGG(http://zh.wikipedia.org/zh-tw/Ogg)、WAV .. 等格式


[1] 如何搞定音效介面

在 Linux 底下最常用的音效卡驅動程式為 Advanced Linux Sound Architecture (ALSA) project 所發展之音效卡,「幾乎」所有的音效卡/音效介面都有支援。但是少數專業級的音效卡沒有支援,這些音效卡使用特殊的晶片,而且沒有附 Linux 驅動程式,不過這種情況相當少見。我們可以簡單的說:一般隨機內建之音效介面 linux 均有支援。

「理論上」來說,現在新的 Linux 作業系統安裝完畢後即會自動驅動所有內建驅動程式之硬體,包括網路卡、顯示卡以及音效卡。


[2] 如何聽音樂

** 聽 MP3 **

1. 安裝音效驅動程式 - alsa

要安裝 alsa 必須安裝以下檔案:
alsa-base
alsa-utils


2. 安裝混音程式
alsamixergui

3. 安裝 mp3 播放程式
要聽 mp3 請安裝
audacious (一套類似 winamp 介面之 mp3 播放軟體)


4. 聽 mp3
請先下載 mp3,再在終端機中啟動 audacious & (背景執行)

5. 疑難雜症處理:

a. 找不到音效卡怎麼辦
請重新啟動 alsa,指令如下:

/usr/sbin/alsa reload

b. 放音樂時沒有聲音,但是有在放音樂怎麼辦 ? [常見]

通常會發生此情況是因為以下情況:

1. 喇叭未打開
2. 喇叭插錯孔
3. 混音器未打開,請執行

alsamixer

alsamixergui (建議以此程式為主)

來進行聲音調整。



[3] 如何看影片
在 linux 底下最強的看影片軟體為 mplayer,不過其介面較為陽春,因此有許多人       無法接受,另外常見的影片軟體為 vlc、smplayer、totem .. 等。通常看影片有兩個需求:

1. 可以清楚看到影片,換言之要有針對不同影片而存在之解碼程式
2. 要有字幕

有關看影片這件事,已經有網頁幫我們處理了,請看:

http://debian-multimedia.org/

在我們的 /etc/apt/sources.list 加入以下定義即可使用 debian multimedia 網站幫我們整理之套件。

deb ftp://ftp.debian-multimedia.org squeeze main non-free


接下來執行 apt-get update 即可更新套件來使用多媒體套件了,請安裝

mplayer
smplayer
vlc       (以上三個為不同之播放程式)
w32codecs (支援不同影片格式之 codec)

libdvdnav4
libdvdread4
libdvdcss2  (此三行是播 DVD 必備之函式庫)


[4] 如何下載 Youtube 影片
 要下載 Youtube 影片先要能看其影片,而 Youtube 影片為 flash 格式 (flv 檔),在 linux 底下我們必須自 adobe 網站來下載 flash plugin,請連至

http://www.adobe.com/

點選 Adobe Flash Player

此時會進入下載畫面,請選擇 .tar.gz 格式下載,會下載一個檔案名為:

install_flash_player_10_linux.tar.gz

完整下載網址在:
http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_10_linux.tar.gz


將此檔解開(使用 mc)或是以下指令:

tar xfvz install_flash_player_10_linux.tar.gz

會出現一個檔案名為:

libflashplayer.so

將此檔存至 /usr/lib/mozilla/plugins 目錄,再重新啟動 firefox 即可支援 flash。,指令如下:

cp -a libflashplayer.so /usr/lib/mozilla/plugins

另外要複製 ./usr/bin/flash-player-properties 至 /usr/bin/,指令如下:

cp -a ./usr/bin/flash-player-properties /usr/bin/

若還是不行,請確定自己的機器是否有安裝 libcurl3 套件,若沒有的話請執行:

apt-get install libcurl3

來安裝即可。若要播放有字幕之電影檔,例如

a.mkv 有一個相對應的字幕檔名為 a.srt

請執行

mplayer a.mkv -sub a.srt

若中文是亂碼的話,請下載 ftp://163.26.229.6/linux/mplayer.tar.bz2

並在自己的家目錄解開,解開的指令為:

tar jxfv mplayer.tar.bz2

(記得先安裝 bzip2 套件)

2011年5月5日 星期四

系統觀察與設定

系統觀察與設定

 目標:

1. 了解系統資源,何謂系統資源 ?
 a. 硬碟 - 硬碟有多大 ? 如何分割 ? 分割區編號 ? 有無掛載點 ?
 b. 記憶體容量 - 記憶體多大 ? 虛擬記憶體多大 ? 目前記憶體狀態 ? 是否有記憶體不足情況 ?
 c. 音效卡 - ??
 d. CPU - 廠牌、型號、速度、是否有 bug、指令集、共幾個核心
 e. 網路卡 - 廠牌、型號、速度
 f. 顯示卡 - 廠牌、型號
 g. 其它資源 - 例如外接式硬碟、webcam .. 等

2. 了解系統資源後我們才能設定並使用這些系統資源,上述的內容都是所謂的系統資源。

***


觀察目前掛載之硬碟:

df -h

檔案系統              Size  Used Avail Use% 掛載點
/dev/sda1              37G  3.1G   32G   9% /
tmpfs                 2.0G  4.0K  2.0G   1% /lib/init/rw
udev                  2.0G  184K  2.0G   1% /dev
tmpfs                 2.0G     0  2.0G   0% /dev/shm
/dev/sda5              74G   58G   13G  83% /home
/dev/sda2             138G   92G   40G  71% /opt
/dev/sda3              28G  7.1G   20G  27% /usr

上面的資訊告訴我們目前掛載的硬碟為 /dev/sda,其分割區分別掛載至不同目錄,我們亦可從上述資料中發現每個分割區的大小及所剩容量。與之前上課不同的是 /opt 為獨立掛載之分割區,其原因是我們需要 /opt 來安裝 EDA 伺服器。但是我們無法得知是否有 swap,以及 swap 位於那個分割區,因此需要以下指令:

fdisk -lu /dev/sda

Disk /dev/sda: 320.1 GB, 320071851520 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625140335 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00036986

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *          63    78124094    39062016   83  Linux
/dev/sda2        78124095   371085434   146480670   83  Linux
/dev/sda3       371085435   429674489    29294527+  83  Linux
/dev/sda4       429674551   625137344    97731397    5  Extended
/dev/sda5       429674553   585922679    78124063+  83  Linux
/dev/sda6       585922743   625137344    19607301   82  Linux swap / Solaris

從上面資訊我們可看出 /dev/sda 硬碟為 320 GB大小之硬碟,其分割區 /dev/sda6 為 swap。


觀察記憶體容量

free -m

             total       used       free     shared    buffers     cached
Mem:          4004        959       3045          0        346        240
-/+ buffers/cache:        372       3632
Swap:        19147          0      19147

Mem:指的是實體記憶體,總共有 4004 MB
Swap: 指的是虛擬記憶體,總共有 19147 MB,當實體記憶體夠大,且沒有用完的情況下,虛擬記憶體不會被使用到。

cache - 快取記憶體,小抄


1. 觀看本機之介面,請執行 lspci 指令來觀察系統資源,以某台主機來說,其輸出如下:

00:00.0 Host bridge: Intel Corporation 82G33/G31/P35/P31 Express DRAM Controller (rev 10)
00:01.0 PCI bridge: Intel Corporation 82G33/G31/P35/P31 Express PCI Express Root Port (rev 10)
00:1b.0 Audio device: Intel Corporation N10/ICH 7 Family High Definition Audio Controller (rev 01)
00:1c.0 PCI bridge: Intel Corporation N10/ICH 7 Family PCI Express Port 1 (rev 01)
00:1c.1 PCI bridge: Intel Corporation N10/ICH 7 Family PCI Express Port 2 (rev 01)
00:1d.0 USB Controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #1 (rev 01)
00:1d.1 USB Controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #2 (rev 01)
00:1d.2 USB Controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #3 (rev 01)
00:1d.3 USB Controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #4 (rev 01)
00:1d.7 USB Controller: Intel Corporation N10/ICH 7 Family USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev e1)
00:1f.0 ISA bridge: Intel Corporation 82801GB/GR (ICH7 Family) LPC Interface Bridge (rev 01)
00:1f.2 IDE interface: Intel Corporation N10/ICH7 Family SATA IDE Controller (rev 01)
00:1f.3 SMBus: Intel Corporation N10/ICH 7 Family SMBus Controller (rev 01)
01:00.0 VGA compatible controller: nVidia Corporation G96 [GeForce 9400 GT] (rev a1)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)

因此藉由 lspci 指令,我們可以讀取系統之硬體組態,除非某硬體太新變成 Unknown,否則一般常見介面卡、顯卡、USB .. 等均可以此指令讀出。

練習:請執行 lspci,並觀測自身主機的介面型號
Shift + PageUP 往上捲
Shift + PageDn 往下捲


2. 觀看本機 CPU 資訊
cat /proc/cpuinfo    -> 觀察 CPU 型號

X86 CPU 為 CISC -> Complex Instruction Set CPU
ARM CPU 為 RISC -> Reduced Instruction Set CPU

3. free -m           -> 觀察主記憶體及虛擬記憶體容量

3.1 如何支援超過 4G 以上之主記憶體  ?

我們使用 aptitude 可以查到有個套件名稱為

linux-image-2.6.32-5-686

其中 2.6.32-5 是核心版本,而 686 指的是 CPU 架構。

另一個套件名稱為:

linux-image-2.6.32-5-686-bigmem

後面加 bigmem 的主要意思是支援 4GB ~ 64 GB 記憶體之主機。

4. uname -a     -> 觀看開機核心版本


5. dmesg -> 觀察系統訊息,由於系統訊息太多行,因此通常的作法是「轉向」至某一個檔案,再使用 vi 觀看,請執行:

dmesg > dmesg.log

hint: 轉向請參考鳥哥第11章 - http://linux.vbird.org/linux_basic/0320bash.php


6. 網路設定檔:/etc/network/interfaces

其內容如下:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface -> lo 是指本機 IP,
auto lo                          -> 每一台 lo 的 IP 都是 127.0.0.1
iface lo inet loopback

# The primary network interface
allow-hotplug eth0              -> eth0 是網路卡的第一個介面
iface eth0 inet static
        address 10.7.1.29
        netmask 255.255.255.0
        network 10.7.1.0
        broadcast 10.7.1.255
        gateway 10.7.1.254
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 8.8.8.8
        dns-search eecs.stut.edu.tw


網路設定:

ifconfig

root@pc-29:/home/herman# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:24:1d:12:5c:c7
                               ^^^^^^^^^^^^^^^^^^^^^^^^ 網卡卡號
          inet addr:10.7.1.29  Bcast:10.7.1.255  Mask:255.255.255.0
                    ^^^^^^^^^        ^^^^^^^^^^       ^^^^^^^^^^^^^
                    IP 位址          廣播位址         網路遮罩
          inet6 addr: fe80::224:1dff:fe12:5cc7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2169750 errors:0 dropped:1177 overruns:0 frame:0
          TX packets:245495 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:403019350 (384.3 MiB)  TX bytes:39846652 (38.0 MiB)
          Interrupt:43 Base address:0x4000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:142137 errors:0 dropped:0 overruns:0 frame:0
          TX packets:142137 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:8077705 (7.7 MiB)  TX bytes:8077705 (7.7 MiB)



7. 呼叫網路上的主機 ping 主機名稱/IP,例如:

   ping 163.26.229.252

假設我們發現系統好像當掉了,接下來請輸入 Ctrl+C 中斷 ping 指令,會出現以下訊息:
^C
--- 163.26.229.252 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3023ms

上面訊息告訴我們送給 163.26.229.252 的 4 個封包全部被退回, 100 % 的封包消失,我們可以因而推論 163.26.229.252 目前是沒有連線/無法動作/維護當中


先確定網路連線正確,而且是 eth0 網路介面。第一次登入後,我們先確定網路有連線,請執行:

ping 163.26.229.254 (Gateway - 閘道 IP)

如果沒有動作,請按 Ctrl+C 中斷此程式,此時我們可以看到有多少封包傳輸,多少封包丟掉。如果出現以下訊息:

herman@debian:~$ ping 163.26.229.254
PING 163.26.229.254 (163.26.229.254) 56(84) bytes of data.
64 bytes from 163.26.229.254: icmp_seq=1 ttl=255 time=0.392 ms
64 bytes from 163.26.229.254: icmp_seq=2 ttl=255 time=0.362 ms
64 bytes from 163.26.229.254: icmp_seq=3 ttl=255 time=0.408 ms
64 bytes from 163.26.229.254: icmp_seq=4 ttl=255 time=0.754 ms
64 bytes from 163.26.229.254: icmp_seq=5 ttl=255 time=0.638 ms
64 bytes from 163.26.229.254: icmp_seq=6 ttl=255 time=0.438 ms
64 bytes from 163.26.229.254: icmp_seq=7 ttl=255 time=0.493 ms
64 bytes from 163.26.229.254: icmp_seq=8 ttl=255 time=0.327 ms
^C
--- 163.26.229.254 ping statistics ---
8 packets transmitted, 8 received, 0% packet loss, time 7003ms
rtt min/avg/max/mdev = 0.327/0.476/0.754/0.139 ms

表示工作正常。理論上,上面的 icmp_seq 順序要從 1、2 .. 開始往上數。萬一其數字不連貫的話叫「掉封包」。掉封包表示網路不穩,這必須進行網路除錯。

另一個要注意的重點是 time=0.xxx ms 這個訊息,這個數字愈小愈好,萬一數字很大表示我們這台主機跟對方主機的連線不順暢。

最後有一行訊息如下:
8 packets transmitted, 8 received, 0% packet loss, time 7003ms

這表示送了 8 個封包,回收 8 個封包,丟掉 0% 封包,總共時間為 7003 ms

2011年5月2日 星期一

如何折疊 MOS

如何折疊 MOS

適用場合:當 MOS (不論是 P 或 N) 的 w 太大,導致 layout 有佔據太多面積的問題時,我們就應該折疊 MOS。折疊 MOS 主要的作法在於將 MOS 的 poly 砍成兩段或三段或其它數目,而相對應的 Source 及 Drain 亦要隨之變化。

折疊 MOS 的技巧大致來說如以下幾點:

1. 決定是「奇數折」或是「偶數折」,奇數折指的是將 poly 砍成 3、5、7 ..段,偶數折則是 2、4、6、8 ... 段。請注意:折完之 poly 寬度加總要等於原先 ploy 寬度。

2. 如果是奇數折的話,那麼其 S(ource) P(oly) D(rain) 的畫法應當如以下所示:
   spdpspd                    -> 三折
   spdpspdpspd             -> 五折
   spdpspdpspdpspd      -> 七折
   ..
  以下是一個三折的例子,我們可以發現 poly 的長度由 12 um 折成 4 um。



   若是偶數折的話,那麼其 S(ource) P(oly) D(rain) 的畫法應當如以下所示:
   spdps                      -> 二折 -> dpspd
   spdpspdps               -> 四折 -> dpspdpspd
   spdpspdpspdps        -> 六折 -> dpspdpspdpspd
   ..
   以下為一個二折的例子:
 
   我們要記得一個原則是:Source->Poly->Drain->Poly->Source.
                           不然就是:Drain->Poly->Source->Poly->Drain ..

3. 所有的 Source 都要 Short 在一起,
    所有的 Drain    都要 Short 在一起,
    所有的 Poly     都要 Short 在一起

2011年5月1日 星期日

使用 FPGA 驅動 I/O

傳統的(最常見的) I/O 介面可以分為以下幾種類型:

I:jumper、dip switch、keypad
O:LED、7 seg display、LCD

要驅動這些 I/O,必須知道這些 I/O 背後的工作原理,不同的 I/O 有不同的工作

原理,如果我們連基本工作原理都弄不清楚,那要如何寫程式來驅動這些 I/O ?

如果我們要在 4 顆相連的七段顯示器顯示出 1234,那該如何處理 ?

要顯示 1 -> 1,9         (6)
要顯示 2 -> 5,1,11,12,8 (3)
要顯示 3 -> 5,1,9,11,8  (2)
要顯示 4 -> 4,8,1,9     (7)

其中()內的數字指的是共陽或共陰的腳位。我們依序點亮上面的數字會發現要使用快速掃瞄電路很快將 1->2->3->4 掃瞄過一次,如以下影片所示:

http://www.youtube.com/watch?v=qxGxtjlfhTE

基於人類「視覺殘留」的原理,我們會以為 1234 是同時顯示的。

2011年4月14日 星期四

管理鏡像站

將下載鏡像站改成校內:

鏡像站位置: ftp://120.117.72.71

設定下載鏡像站之設定檔

/etc/apt/sources.list

裡面內容如下:

#deb cdrom:[Debian GNU/Linux testing _Wheezy_ - Official Snapshot amd64 CD Binary-1 20130415-13:45]/ wheezy main

這一行是指定 Debian 從 cdrom 下載第一片的資料,我們不需要,因此可以在最前面打 # 註記起來。

#deb http://ftp.twaren.net/debian/ squeeze main

這一行是指定 Debian 從 ftp.twaren.net 下載編譯過之二進位檔,其網路協定為 http,由於它是校外網站,因此我們亦將其註解起來。

deb ftp://163.26.229.6/debian/ squeeze main

這一行是指定 ftp://163.26.229.6 為下載鏡像站,此站專門為南台所設定,因此我們將下載點改為此站會加快下載速度。

deb-src http://ftp.twaren.net/debian/ squeeze main

這一行是指定未編譯的原始檔下載網站,通常我們不會自行下載原始碼來編譯,所以這個設定沒太大用處。

deb http://security.debian.org/ squeeze/updates main
這一行是全球統一之安全性更新網站,十分重要

deb-src http://security.debian.org/ squeeze/updates main
同上,此行設定為安全性更新之原始碼檔案

修改 /etc/apt/sources.list 完畢後,我們可以執行

apt-get update (更新套件狀態)

在 Windows 底下經常會有:你有 ?? 個可升級(更新)之檔案,請盡速更新。

所謂的「更新套件狀態」是指將你已安裝之套件與網路上現有之最新套件作一比較,若有較新之套件,即可透過下面指令來升級。

apt-get upgrade (升級套件)

將本機套件升級至目前網路上可下載之最新套件。

如何修改 /etc/apt/sources.list 檔案

1. 正統方式:使用 vi,但是 vi 我們還沒教,請先參考鳥哥的書:
   第十章、vim 程式編輯器

2. 取巧方式:抓我已修改好之檔案來作為新的 sources.list 檔

2.1 cd /etc/apt
    切換至 /etc/apt 目錄

2.2 mv sources.list sources.list.orig
    將原始 sources.list 改名為 sources.list.orig

2.3 wget ftp://163.26.229.6/linux/sources.list
    下載我已修改完之 sources.list

2.4 cat sources.list
    觀察其內容是否 OK

aptitude 套件操作程式

由於作業系統愈來愈複雜,因此現在的套件會有所謂「相依性」的問題,例如在 windows 底下安裝遊戲時,遊戲會自動偵測我們的 directx 版本,若是沒有安裝 directx 或是其版本太舊,系統會自動幫我們安裝。

在 Linux 底下,同樣有相依性的問題,而且對於不懂套件間關係的人相當的複雜,為了拯救眾生,因此有所謂套件操作/管理程式。以 Debian 來說,我們使用

  1. apt-get 作為「指令式」的套件操作/管理
  2. aptitude 作為「文字介面式」的套件操作/管理,我們可以參考 ubuntu 的說明:http://wiki.ubuntu-tw.org/index.php?title=Aptitude

練習:

安裝 vim 套件/移除 vim 套件

安裝
  1. / -> 叫出 search for 小視窗,輸入 vim \Enter
  2. 出現套件裡有 vim 字串的程式,但不是我們要的,此時按 n 可以找下一個符合名稱的套件,一直按 n 直到找到我們要的套件為止。
  3. 按 + 準備安裝
  4. 按 g 安裝

移除
  1. / -> 叫出 search for 小視窗,輸入 vim \Enter
  2. 找到 vim
  3. 按 - 準備移除
  4. 按 g 移除

X-Window (xorg)

要安裝 X 視窗系統,我們使用命令列方式來安裝,請執行:

apt-get install xorg

來安裝 xorg 這個套件,安裝完如果直接執行

startx

即會進入 X 視窗,但是沒有 X window manager,因此我們還要再安裝 icewm,請執行 exit 離開 X 視窗,再執行:

apt-get install icewm

來安裝 icewm 這個視窗管理員 (X window manager),安裝完後執行

startx

此時即可看到 icewm 的介面,未來我們將依此為基礎來一步步改造 icewm 成為我們理想的視窗介面。


安裝瀏覽器

請執行

apt-get install iceweasel

來安裝瀏覽器,安裝完之後按滑鼠右鍵即可在選單裡發現 iceweasel,我們可以呼叫iceweasel 來瀏覽網頁,不過tw.yahoo.com 網頁會出現亂碼,這是因為我們中文字尚未安裝,接下來我們的課程將介紹這個部份。

2011年4月11日 星期一

畫元件(Cell)應該注意事項

  1. 所有元件庫裡的 Cell 要等高
  2. VDD/GND 的寬度要一致,其大小至少要 10 倍最小製程寬度,舉例來說 0.18 um 製程之 VDD/GND 寬度要 1.8 um,其相對位置要一模一樣,而且 VDD/GND 要拉到左/右邊界為止。
  3. Cell 的中間部份為通道,至少要可以拉 5 條 path。Cell 自身的繞線應該盡量往上/下調整。拉 Path 要避免不必要的轉彎,盡量以直線為主。
  4. PMOS / NMOS 要個別調整以驅動輸入負載,不可以每個 PMOS 寬度都是 3.2u,NMOS 寬度都是 1.6u
  5. 遇到 PMOS/NMOS 寬度太長時,要使用折 MOS 的技巧。(期中考後教)
  6. 在整合 Cell 時要把 PIN 腳的 Label 拿掉,以免 LVS 錯誤。
  7. 在整合 Cell 要接 path 要注意不要與原始的接線短路,也就是說原始走線如果已有 Metal 1,則整合 Cell 時要用 Metal 2 來走線。
  8. 調整 Cell 之後,DRC/LVS 流程要重作,因為你不能確定動 Cell 會不會影響到 DRC 或是 LVS,因此只要動 Layout,DRC/LVS 流程請一律重作。

2011年4月7日 星期四

linux 2011/04/07 上課講義

目的:安裝 Linux 直至可以開機

如何分割硬碟的分割區 (partation)


Windows 的掛載:

C:\
D:\
..

Z:\

硬碟分割的策略:

硬碟的裝置如下:
1. IDE 硬碟 (光碟機)
/dev/hda -> Primary Master
/dev/hdb -> Primary Slave
/dev/hdc -> Secondary Master
/dev/hdd -> Secondary Slave

2. SATA 硬碟、USB 隨身碟、SCSI 硬碟機
/dev/sda
/dev/sdb
...

/dev/sd?


目錄(掛載點)硬碟分割區   FS                     大小
/(可開機)               /dev/h(s)da1 EXT4       > 2 GB,空間夠的話設為 5 GB
/usr                    /dev/h(s)da2 EXT4       > 4 GB,空間夠的話設為 10 GB
swap                    /dev/h(s)da3 SWAP       >= 2 GB,記憶體裝多一點 (8
                                                 GB) 以上就不大用得到 swap
                                                 空間了。
/home                   /dev/h(s)da4 EXT4       *,剩下的空間

/dev/sda1 -> 主分割區
/dev/sda2 -> 主分割區
/dev/sda3 -> 主分割區
/dev/sda4 -> 主分割區

什麼是 swap ?

swap 是置換空間,在 windows 底下我們稱之為「虛擬記憶體」,其功能是利用硬碟空間來模擬成為記憶體。

為什麼我們需要虛擬記憶體 ?

一般主機內建記憶體應為 512 MB ~ 4GB 這個區間,假設我們執行程式時遇到記憶體空間不足,系統會要求我們關閉某些應用程式,利用「虛擬記憶體」可以騙系統使其認為我們有足夠記憶體空間。

虛擬記憶體的優點 ? 硬碟的價格較真實記憶體便宜,因此使用虛擬記憶體可以用較少的金額來充當較大的記憶空間。

虛擬記憶體的缺點 ? 硬碟的速度較真實記憶體慢,慢幾倍 ?
                        1. 1000 倍
                        2. 10000 倍
                        3. 100000 倍
                        4. 1000000 倍
                   上述何者為真 ?

                   真實記憶體之存取時間以 ns 為單位 10^-9 秒
                   虛擬記憶體(硬碟)之存取時間以 ms 為單位 10^-3 秒

                   10^-3/10^-9 = 10^6


設定使用者:
使用者分為 2 類:超級使用者及一般使用者。

超級使用者 (super user 或者稱為 root),具有安裝、刪除、管理的權限,一般生活操作中用不到


一般使用者,日常操作會用到,沒有上述之權限


鏡像站的選擇:

1. 國立優於私立 (因為國立大學的網路頻寬通常比較大)
2. 選近不選遠 (愈近的學校抓檔案的速度愈快)
3. ftp://163.26.229.XX (南台校內專用,我架的鏡像站)


簡單網路概念:
主機上的 IP 為 163.26.229.XX,因此網路的設定要為:

IP:             163.26.229.XX
NetMask:        255.255.255.0
Gateway:        163.26.229.254
DNS:            8.8.8.8 or 8.8.4.4

主機名稱:      pc-XX
網域:          eecs.stut.edu.tw


所謂的 IP 是由大至小:例如:

163.26.229.XX -> 163 -> 通常是國碼,以台灣而言,國碼非唯一
                 26  -> 校碼
                 229 -> 系
                 XX  -> 某台主機

所謂的域名是由小至大:例如:
tw.yahoo.com

pc-29.eecs.stut.edu.tw -> pc-29 在 "eecs 網域" 在 "stut 學校"
                                在 "edu(教育部)" 在 "tw(台灣)"

所謂的正查是指我們查詢 pc-29.eecs.stut.edu.tw 會得到 163.26.229.29 這個 IP。而反查則是指我們查詢 163.26.229.26 會到得 pc-29.eecs.stut.edu.tw 這個 domain。

正查(從域名查 IP)指令:

nslookup pc-29.eecs.stut.edu.tw

得到以下結果:
Server:         8.8.8.8         -> 我們所查詢的 DNS 主機
Address:        8.8.8.8#53

Non-authoritative answer:       -> 查詢的結果
Name:   pc-29.eecs.stut.edu.tw  -> 域名
Address: 163.26.229.29          -> 域名所對應到的 IP

反查(從 IP 查域名)指令:
nslookup 163.26.229.29

Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
29.229.26.163.in-addr.arpa      name = pc-29.eecs.stut.edu.tw. -> IP 所查到的域名

2011年3月15日 星期二

針對 test fixture 的再進化

我們剛剛寫好的 test fixture 有什麼缺點 ?

缺點1. 我們所測試出來的波形,系統無法自行判斷是正確或是錯誤的波形,得要由人類的眼睛來判斷。

缺點2. 輸入波形無法自動產生


針對缺點1之解決方式

我們使用行為模式(behavior model)來撰寫 testfixture,其目的是讓 testfixture 能自動產生 x+y 的半加器輸出,如下圖所示:



我們的目的是希望在 testfixture 中撰寫一個 behavior 模式之 Half Adder,此 Half Adder 將產生 coutY 及 sumY 之輸出,程式碼如下:

reg sumY, coutY;        // test result

// self calculate coutY, sumY
always @ ( a or b)
  begin
    {coutY, sumY} = a+b;
  end

並以此輸出來與原始 ha_gate/ha_rtl/ha_cont.v 中電路所產生之輸出作比對。

reg testok;             // 0 == error, 1 == testok;

// compare
always @ ( coutX or sumX )
begin
  if ( coutX == coutY && sumX == sumY)
    testok=1;
  else
    testok=0;
end

我們可以觀察 testok 的波形,當 testok == 1 時,我們的電路輸出與自動產生之電路輸出是一致的,如下圖所示。


萬一 testok == 0 時,兩者不一致,運算有錯,必須進行除錯。下圖是一個「故意寫錯」的例子,我們可以發現 {coutY, sumY} = b;,此時 testok 的值會有出現 0 的狀態,這表示它有問題了。


練習:將你之前所完成之 full adder testfixture 加上自我測試程式以自動偵測結果是否正確。


針對缺點2之解決方式
a. 定義一個 clock 訊號源
b. 利用 clock 訊號源來產生訊號

作業2:請使用
       a. gate level 之寫法
       b. always 之寫法
       來撰寫 4 位加/減法器電路,電路圖在 ftp://163.26.229.6/VLSI/addsub.pdf

       請注意:所使用的 test fixture 要為同一個

RTL level 的程式寫法

請將 half adder 以 rtl 方式撰寫出來

// RTL Levl Code

//ha_rtl.v


module half_adder(x, y, Sum, Cout);

input x, y;

output Sum, Cout;

reg Sum, Cout;


// Circuit Description


always @ (x or y)

{Cout,Sum} = x+y;


endmodule
// Gate Level Code

//ha_gate.v

module half_adder(x, y, Sum, Cout);

input x, y;

output Sum, Cout;



// Circuit Description


xor xor0(Sum, x, y);

and and0(Cout, x, y);


endmodule


上面左邊的程式碼是告訴我們以 RTL 方式撰寫出來的 code,現在我們希望能將寫完的程式進行模擬,請執行:

cver ha_rtl.v test_ha.v \Enter

此時我們可以看到

1. $monitor 輸出與之前 ha_gate.v 相同
2. testha.dmp 亦相同


使用 continuous assignment 來撰寫 half adder:

module half_adder(x, y, s, c);
input x, y;
output s, c;
wire x, y;
wire s, c;

assign {c, s} = x + y;

endmodule

上面的例子是使用 assign 語法 (又稱為 continuous assignment) 來進行 half adder 的設計。

小結:在這三個半加器的例子中,我們使用了同一個 test fixture 來針對我們所寫的三個不同語法之半加器進行測試,而且測試後之結果均一模一樣。


$display $monitor 用法

$display 語法 (課本 p2-10 - p2-12)

$display("Hello world")

可以在螢幕上顯示 Hello world 字串,在半加器的測試檔中作以下修改:

initial begin
$display("Half Adder test begin!!");    // 加入此行
$dumpvars;
$dumpfile("testha.dmp");

#0 a=0;
   b=0;
   $display($time, "=>a=%b,b=%b,sumX=%b,coutX=%b",a,b,sumX,coutX); // 加入此行

然後執行模擬,我們可以得到以下螢幕輸出:

Half Adder test begin!!
                   0=>a=0,b=0,sumX=x,coutX=x

從以上輸出我們可以得到當 a=0, b=0 的時候,sumX 跟 coutX 的值為 x (未知)。為什麼會有這個輸出結果 ?


原因:所有的電路都有延遲,當訊號在第 0 秒輸入時,不可能輸出就跟著改變。因此,我們可以再修改程式碼如下:

#0      a=0;
        b=0;
        $display($time, "=>a=%b,b=%b,sumX=%b,coutX=%b",a,b,sumX,coutX);

#1
        $display($time, "=>a=%b,b=%b,sumX=%b,coutX=%b",a,b,sumX,coutX);

其輸出為:
Half Adder test begin!!
                   0=>a=0,b=0,sumX=x,coutX=x
                   1=>a=0,b=0,sumX=0,coutX=0


我們可以觀察上面的第二行,發現在第 1 個時間單位時,sumX=0, coutX=0。這表示經過一個時間單位的延遲之後,電路已完成運算並在輸出端看到結果。

現在有個問題,萬一我們每個訊號的改變都希望能從螢幕上看到數值,該如何作 ?

1. 每一個訊號改變都加上 $display ==> 累死人,我們最好不要作這種蠢事
2. 使用 $monitor ==> 比較聰明的作法

因此我們可以將測試檔改成:

initial begin
$display("Half Adder test begin!!");                            // 加入此行
$monitor($time, "=>a=%b,b=%b,sumX=%b,coutX=%b",a,b,sumX,coutX); // 加入此行
$dumpvars;
$dumpfile("testha.dmp");

#0      a=0;
        b=0;

其輸出為:

Half Adder test begin!!
                   0=>a=0,b=0,sumX=0,coutX=0
                  10=>a=0,b=1,sumX=1,coutX=0
                  20=>a=1,b=0,sumX=1,coutX=0
                  30=>a=1,b=1,sumX=0,coutX=1


我們可以看到只要加一行 $monitor 之後,系統即會根據輸出/入的變化而自動列印其數值,不必每一行都加 $display。

2011年3月13日 星期日

如何使用 GPL Cver 模擬工具

1. 如何撰寫 Verilog 程式

K書、上課、被當,經過上面的循環,你就會寫 Verilog 程式了。

2. 如何模擬 Verilog 程式

有許多不同的 Verilog 模擬程式,例如:
Altera Quartus II
Cadence Verilog XL
Synopsys VCS
Mentor Graphics Modelsim

上面這些模擬軟體最大的「缺點」是其為商業版,非常昂貴,同學只能在學校使用,無法回家進行練習。因此為了讓各位同學能回家練習,我們上半學期使用 GPL Cver 這套免費的 Verilog 模擬程式。下圖是我們進行 FPGA 時會使用到的流程及工具:






3. 什麼是 Cver

Cver 是由 Pragmatic C Software (http://www.pragmatic-c.com/) 這家公司所發展出來的,在 Cver 發展的時候, Pragmatic 遭遇了 Cadence 及 Synopsys 的夾擊,因此 Cver 在市場推廣不好,因此後來 Pragmatic 決定將 Cver 以 GPL 授權釋出。僅管 Cver 現在是免費的,但不表示他不好用,他的特色是:

1. full 1995 IEEE P1364 - 完整支援 1995 IEEE P1364 標準
2. some of the 2001 P1364 - 部份 2001 P1364 標準
3. 支援三個 PLI 介面 (tf_, acc_, and vpi_)

所以其功能相當適當一般入門至進階同學使用。

4. 如何安裝 GPL Cver

目前 GPL Cver 的官方網址已移至 source forge (http://gplcver.sourceforge.net/),如果你的系統是安裝 Debian 6.0,請執行

apt-get install gplcver

如果不是,請自己想辦法。

5. 如何測試你的系統已安裝 GPL Cver

請執行:
cver \Enter

如果你的系統已安裝 GPL Cver 的話,會出現以下訊息:

GPLCVER_2.12a of 05/16/07 (Linux-elf).
Copyright (c) 1991-2007 Pragmatic C Software Corp.
  All Rights reserved.  Licensed under the GNU General Public License (GPL).
  See the 'COPYING' file for details.  NO WARRANTY provided.
Today is Mon Mar  7 09:51:55 2011.
**FATAL ERROR** [301] no Verilog input files specified

最底下的

**FATAL ERROR** [301] no Verilog input files specified

是警告我們沒有提供 verilog 檔給 cver 模擬,但是這不表示 Cver 有問題。

5. 如何使用 Cver
請執行:

cver a.v test_a.v \Enter


6. Module 的命名方式:

要為一個 Verilog 的 Module 命名,最大的前題是:N 年後你知道這是什麼電路,如何使用此電路。舉例來說:以下二個 module 那一個比較好 ?

module half_adder()
endmodule

module ha()
endmodule

假設此電路程式放了 N 年,N 年後你還會認得的是 half_adder 還是 ha ? 所以在替 module 命名時,不要偷懶,免得無法重複使用。

7. Verilog 的存檔命名:

假設你使用 gate level 的方式撰寫 half adder,請問以下二個存檔那一個比較好 ?

ha.v
ha_gate.v
ha_rtl.v -> 以 RTL 方式所寫的 half adder

答案很明顯是 ha_gate.v,它在檔名就告訴我們這是 gate level 的存檔。

8. 如何撰寫 test fixture (測試程式)

8.1 什麼是 test fixture ?

當我們寫完 verilog 電路後,我們必須證明它是對的,因此我們要寫 test fixture 來針對我們所寫的 verilog 程式進行測試。

8.2 test fixture 的內容

一個 test fixture 就是一個 verilog module,以半加器 test fixture 為例,其語法大致如下:

module test_ha;
reg   definition  -> 暫存器定義
wire  definition  -> 線定義
other definition  -> 其它定義

half_adder ha0 () -> 呼叫我們要進行測試的電路

initial begin                   -> 開始進行波形輸入
$dumpvars;                      -> 產生 gtkwave 語法
$dumpfile("testha.dmp");        -> 將波形以 VCD 格式存在 testha.dmp 檔中,
                                   testha.dmp 可照自己的需求改名字

simulation command   模擬指令,以下特別說明!!

$dumpall;                       -> 紀錄所有訊號
$dumpflush;                     -> 必要
#10 $finish;                    -> 在 10 個時間單位後結束模擬
end                             -> 結束 initial begin
end                             -> 結束 initial begin
endmodule

在 simulation command 的部份,我們需要針對半加器的動作來進行完整測試,請問什麼是半加器的完整測試 ? 要判別一個半加器是否完整動作,最簡單的方法是把真值表上的每一列都模擬一次,如果輸出/入之狀態完全符合真值表,則我們可以確認此電路工作正常。

x  y | Sum   Cout
-----+-----------
0  0 |   0      0
0  1 |   1      0
1  0 |   1      0
1  1 |   0      1


因此一個完整的半加器 test fixture 如下,我們將其存為 test_ha.v

1 module test_ha;
2 reg a, b;
3 wire sumX, coutX;
4
5 half_adder ha0(a, b, sumX, coutX);
6
7 initial begin
8 $dumpvars;
9 $dumpfile("testha.dmp");
10
11 #0 a=0;
12 b=0;
13
14 #10 a=0;
15 b=1;
16
17 #10 a=1;
18 b=0;
19
20 #10 a=1;
21 b=1;
22
23 $dumpall;
24 $dumpflush;
25 #10 $finish;
26 end
27 endmodule

8.3 進行 verilog 測試模擬

請執行

cver ha_gate.v test_ha.v \Enter

理論上應該輸出如下:

GPLCVER_2.12a of 05/16/07 (Linux-elf).
Copyright (c) 1991-2007 Pragmatic C Software Corp.
  All Rights reserved.  Licensed under the GNU General Public License (GPL).
  See the 'COPYING' file for details.  NO WARRANTY provided.
Today is Mon Mar  7 11:25:30 2011.
Compiling source file "ha_gate.v"
Compiling source file "test_ha.v"
Highest level modules:
test_ha

Halted at location **test_ha.v(25) time 40 from call to $finish.
  There were 0 error(s), 0 warning(s), and 4 inform(s).

我們會發現沒有 error、沒有 warning,而且會有個檔案叫 testha.dmp,接下來就可以用 GTKwave 觀察波形了。


9. 使用 GTKwave

請執行

gtkwave testha.dmp

來載入模擬波形檔


作業 1. 畫 Full Adder 的電路圖
        以 Gate Level 寫 Verilog 程式
        撰寫 test fixture,並跑模擬,可存檔檔名為 testfa.dmp
        列印波形

2011年2月28日 星期一

自行建立 EDA 家用環境

什麼是工程師 ?
工程師是「解決問題」的人,不是「製造問題」的人。

為何我不幫你先建好 EDA 環境 ?
  • 了解 EDA 環境建置對於未來除錯有幫助,所以要自己學如何建立自己的 EDA 使用環境。
  • 未來各位去公司上班,不一定有人幫你建 EDA 使用環境。小型的 IC design house 通常事事都要自己動手,不會有人幫你(除了建帳號外)。
目錄的定義:
~/ (家目錄),這是每個使用者登入時預先進入的目錄,此目錄中存放有某些檔案,其名稱如下:
  • .bashrc - bash 設定檔,裡面設定了 EDA 工具的路徑及目錄,我們會在接下來的章節進行說明,本檔位於 /opt/PROCESS/bash/.bashrc,請執行
cp    /opt/PROCESS/bash/.bashrc    ~/
將此檔複製至家目錄。
  • display.drf - Cadence 之 EDA 工具在顏色方面之設定檔,用來顯示 schematic view 或是 layout view 顏色。本檔位於 /opt/PROCESS/CIC0181P6M/virtuoso/display.drf,請執行
cp    /opt/PROCESS/CIC0181P6M/virtuoso/display.drf    ~/
將此檔複製至家目錄。
  • cds.lib - 定義 virtuoso 所需的元件庫及其路徑。
  • .cdsinit - 定義 virtuoso 初始設定,本檔位於 /opt/PROCESS/bash/.cdsinit,請執行
cp    /opt/PROCESS/bash/.cdsinit    ~/
將此檔複製至家目錄。

** 小提示:在 Unix/Linux 作業系統中,不管你在任何目錄,只要執行
cd
即可回到自己的家目錄。執行
pwd
可以觀察自己目前在那個目錄。

~/model 目錄:存放所有的製程檔、DRC/LVS 驗証命令、SPICE 模擬檔案內有檔案如下:
  • cic18.tf - 這是 CIC 0.18 um 1P6M 虛擬製程檔,也是本書所使用之製程檔,理論上全台師生都可以向 CIC 免費申請使用。此檔位於 /opt/PROCESS/CIC0181P6M/virtuoso/cic18.tf,請執行
cp    /opt/PROCESS/CIC0181P6M/virtuoso/cic18.tf    ~/model
將此檔複製回我們家目錄的 ~/model 目錄中。
  • cic018.l - 這是 CIC 0.18 um 1P6M 製程的 SPICE 模型檔,此檔位於 /opt/PROCESS/CIC0181P6M/model/cic018.l,請執行
cp    /opt/PROCESS/CIC0181P6M/model/cic018.l    ~/model

將此檔複製回我們家目錄的 ~/model 目錄中。
  • 1p6mcic018.include - 這個檔案是由我們手動建立,其內容如下:
.lib '/home/herman/model/cic018.l' TT

最快的建立方式是執行以下指令,不必用 vi:

echo    ".lib    '/home/herman/model/cic018.l'    TT"    >    ~/model/1p6mcic018.include

與先前相同,/home/herman 指的是我們的家目錄位置,而 TT 則是 SPICE 執行參數,共有 FF FS TT SF SS 5 種參數,一般來說我們的模擬著重在 TT 參數下。

~/lib 目錄:本目錄存放所有自建的 library (元件庫) 內有我們所建立的元件庫檔案,舉例來說,以下是一個元件庫命名的例子:

cic0181p6m

這邊要請各位注意一下,我們在建立元件庫時要時時記得一個重點:那就是元件庫的名稱要簡單明瞭,最好能一眼看出此元件庫是什麼製程、針對什麼專案、在什麼時候所建立的。為什麼要提醒大家注意這點呢 ? 因為各位未來在工作時很有可能是同時進行 2、3 個專案,而這些專案的製程可能彼此不同。因此如果取的名字不好,搞不好連各位自己都不曉得這些元件庫裡放什麼。舉例來說,假設各位有兩個專案,分別使用 TSMC 0.35 um 2P4M CMOS 製程及 UMC 0.5 um 2P3M CMOS 製程。那表\ref{table:projectname} 中之兩種命名方式那個比較好 ?

~/lklib:本目錄是用來存放 laker 所繪製的元件庫,以避免與 virtuoso 所建的元件庫混淆。

練習:請在自己的家目錄建立:model、lib、lklib 目錄

2011年2月23日 星期三

行前準備

要安裝 Debian 前當然要先準備安裝媒介,最常見的媒介是安裝光碟片,但以方便性來說則是以隨身碟較為方便,以下將介紹此兩種安裝媒介之下載及準備說明。


準備安裝光碟
要查詢 Debian 安裝光碟的最新版本是至其官方網站來下載,但是由於 Debian 安裝光碟 CD 版要 600 MB 以上之容量,因此自國外下載會浪費不少時間。解決之道是至國內有映射站,筆者特別推薦國家高速網路與計算中心所架設之映像下載點 (Debian 下載映像站 -
ftp://ftp.twaren.net/pub/Linux/Debian/debian-cd/6.0.0/i386/iso-cd/),以目前 (2011/2) 最新版本為 6.0,其安裝光碟之 ISO 檔為 debian-6.0.0-i386-CD-1.iso。請下載此檔,並使用燒錄軟體燒錄即可。請注意我們在安裝過程中只需要第一片光碟,安裝完基本系統後之操作全部都是透過網路下載套件來安裝,因此我們只需要燒錄 Debian 第一片 ISO 即可。

關於燒錄軟體方面,在此推薦免費的 CDBurnerXP (CDBurnerXP 官方網站 -
有關 CDBurnerXP 的說明(CDBurnerXP 的操作說明 - http://www.freegroup.org/2009/07/free-software-cdburnerxp/)。本書的重點為 Linux EDA 伺服器架設,因此這部份就請各位讀者自行查閱網路資源,不在此贅述,理論上燒錄完畢後你現在應該會有一張 Debian 安裝光碟。


準備安裝隨身碟
前述的安裝光碟是最常見的安裝媒介,但是使用光碟安裝有幾個缺點:
  • 光碟片需要燒錄,如果手邊沒有可燒錄光碟及光碟燒錄器的話比較麻煩。
  • 光碟片的品質參差不一,某些較差的片燒出來的品質不佳,在安裝過程會有問題。
  • 若使用 CDR 片子燒錄,燒錄即無法洗掉,時間久了(出新版 Debian 後)會變垃圾,只能回收。
  • 光碟片的燒錄、讀取速度都較隨身碟慢
因此如果可以使用隨身碟作安裝媒介的話將可避免上述問題,但是使用隨身碟作安裝媒介的話有一個最重要的關鍵:主機板必須支援隨身碟開機。雖然目前絕大多數的主機板都可透過修改 BIOS 的方式自隨身碟開機,但是較久前之主機無法支援隨身碟開機的只能乖乖使用前一步驟的開機光碟來當安裝媒介了。要將 Debian 開機 ISO 檔轉成可開機隨身碟我們需要UNetbootin (官方網站 - http://unetbootin.sourceforge.net/),請至其官方網站下載此工具,再依順序將 ISO 檔轉載至隨身碟即可,官方網站上即有操作說明,故在此亦不贅述,完成此步驟後各位手上應該會有一隻可開機之 Debian 安裝隨身碟。

選擇 Linux 安裝套件 (Distribution)

要安裝 Linux EDA 伺服器之前,必須先安裝 Linux 伺服器,在介紹 Linux 伺服器安裝前,我們先討論 Linux 安裝套件 (Distribution) 的選擇。絕大多數的 EDA 伺服器所要求的 Linux 安裝套件是 RedHat Enterprise Linux (RHEL),但是 RHEL 有個比較麻煩的問題在於此 Linux 是商業版本,必須要另付技術諮詢費用才能更新。

如果各位不曉得更新重要性的話請回想一下各位在使用 Windows 時是否經常出現自動下載/安裝更新的圖示,這是因為作業系統在開發的階段有某些問題沒有在設計時想清楚,結果變成漏洞而使得系統的安全性/穩定性受到影響。筆者很喜歡引用電影「戰鬥巡航」(戰鬥巡航是星艦迷航 (Star Trek) 電影第八集,其中文資料可看:http://zh.wikipedia.org/zh-tw/星艦奇航記VIII:戰鬥巡航 而英文資料可看:http://www.imdb.com/title/tt0117731/)中的片段來說明這個情況。在戰鬥巡航中,百科 (Data)少校遇上了博格女王 (Borg Queen) (博格女王是博格人(一種半生物半機器的外星種族)的首領,其資料詳見:http://www.startrek.com/startrek/view/library/character/bio/1112104.html)

,博格女王對百科說了一句意義十分深遠的話:「你是不完美的存在,因為你是由不完美的生物所創造出來的,找出你的弱點只是時間上的問題。(You are an imperfect being, created by an imperfect being. Finding your weakness is only the matter of time)」。這句話可以相當程度的解釋了為什麼作業系統特別是 Linux 套件會常常需要更新:因為它是由人類(不完美的生物)所創造出來的,因此 Linux 不是一個完美的作業系統,找出 Linux 系統的缺點 (漏洞)只是時間上的問題。但是 Linux 的套件更新速度十分的快速,只要有漏洞被發現,幾乎在一週之內就有更新可以下載。因此只要勤於更新,我們可以儘量讓 Linux 處於完美與安全的狀態。

因此,以安裝 Linux 伺服器的角度而言,如何能隨時修補漏洞就是一件首要之務,由於我們架設的 EDA 伺服器通常是 24 小時運轉,而且為了要能通過 CIC 的 License 驗証,所有的 Linux EDA 伺服器「理論上」是要使用真實 IP (real ip),使用真實 IP 的缺點是主機是對全世界公開的,如果沒有確實作好作業系統漏洞修補的話很快會受外界入侵,事實上有許多大學的主機被當跳板也就是起源於此。

講了那麼多,我們要回歸到重點:如果安裝 RHEL 伺服器但沒有定期更新修補漏洞的話,我們所安裝的伺服器很容易就會被「破台」。這不是重灌就可以解決的事,因為重灌主機沒有修補漏洞的話問題仍然在那邊,有心人士仍舊可以來入侵我們的主機。因此如果要使用 RHEL 來架設 Linux EDA 伺服器請先確認各位有付錢購買後續的系統更新服務,否則無法修補漏洞會帶來意想不到的後果。

講了那麼多結果結論是這樣,那有更好的建議嗎 ? 就筆者的角度來看,各位可以選擇 CentOS (CentOS 官方網址:http://www.centos.org/) 或是這本書要介紹使用的 Debian Linux \footnote{Debian 官方網址:http://www.debian.org/}。我們一一說明兩者的不同:

CentOS

CentOS 是自 RedHat Linux 的原始碼包裝 (package) 所編譯而成的 Linux 套件,基本上 CentOS 的版本是隨著 RHEL 而改變,如果稱 CentOS 為「免費版的 RHEL」並不為過。但是 CentOS 與正式版本的 RHEL 還是有某些差異性存在:
  • 使用 CentOS 無法享有原廠的技術支援與售後服務。
  • 某些封閉原始碼軟體在 CentOS 中亦沒有提供。
  • CentOS 不保証與 RHEL 一模一樣。
由於 CentOS 自 RHEL 衍生而來的特色,因此對於一般「窮得只剩下 EDA 軟體」的學校單位來說是最好的選擇,使用 CentOS 至少有以下優點:
  • 「理論上」與 RHEL 相容,因此可以支援 EDA 軟體。
  • 免費下載使用,可以隨時更新漏洞,以免系統遭受穩定性/安全性之問題。
  • 未來會配合 RHEL 的版本更新推出相對應的版本。
就上述角度來看,使用 CentOS 來架設 Linux EDA 伺服器不失為一個合理的選擇。但就筆者的看法,Debian Linux 是更好的選擇,以下會大致介紹 Debian Linux。

Debian

所謂 Debian Linux 套件,是由 Ian Murdock 與其妻子 Debra 所創造出來的 Linux 套件。隨後吸引了網路上無數 Linux 愛好者的共同參與發展,至今(2011/2)已推出 6.X 版 (代碼:Squeeze)。Debian 套件的精神在於強調「自由」,其套件軟體均以開放原始碼軟體為主,因此十分符合本計畫所倡導的開放原始碼精神。另一個 Debian 值得推薦的優點在於其套件的更新分為三個層級,分別為:穩定(Stable)、測試 (Testing) 與不穩定 (Unstable)。其中穩定層級之軟體均是經過一再檢查確定其軟體安全性與穩定性均到達一定標準後才能編入穩定層級。而測試層級中的軟體版本則較穩定層級來得新,但是尚未經過完整的驗証,因此不列入穩定層級,必須經過一番時日的驗証後才能進入穩定層級。至於不穩定層級中的軟體則是最新版,但大部份尚未經過驗証,其穩定性亦較差,此層級僅供測試使用。由於 Debian 套件對於系統穩定性的要求極為嚴謹,因此重視系統穩定性的使用者可以確保其作業系統的穩定與安全性。

除了 Debian 本身的穩定性之外,其套件的升級方式亦值得一提:Debian 採用 APT 的機制來進行軟體安裝與管理,在 APT 的機制下使用者可以選擇網路上連線速度快的主機來進行軟體的更新與安裝、移除動作。在某些軟體發現有漏洞的情況下,亦可連接至 security.debian.org 網站來進行線上更新的動作。以上所描述之軟體安裝與更新、移除等動作完全不需向任何個人/公司繳交軟體費用。因此對於飽受微軟昂貴升級價格的公司而言,更是一大福音。