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 是同時顯示的。