目的:啟動音效卡支援
1. 使用 id 指令檢查自己是否有 audio 次群組
id
其輸出如下:
uid=1000(herman) gid=1000(herman) groups=1000(herman),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev)
若無 audio 次群組,請編輯 /etc/group 檔案,在 audio 行加上 eecs,如底下所示:
audio:x:29:eecs
改完要登出系統,再重新登入一次,並執行 id 指令確認是否有 audio 次群組。
2. 安裝 alsamixergui
apt-get install alsamixergui
3. 安裝播 mp3 程式 audacious
apt-get install audacious
4. 啟動 audacious 並下載 mp3 檔案進行測試
5. 安裝 flash player
請確定 /etc/apt/sources.list 中的設定有 non-free,如下所示:
deb ftp://120.117.72.71/debian wheezy main contrib non-free
接著安裝 flashplugin-nonfree 套件,然後重開 firefox,再連上 youtube 等影音網站看看是否可以看到電影。
2013年11月10日 星期日
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 來開機。
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 點。
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
可以切換至不同頁面,編輯不同檔案。
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 開機
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 開機
2013年9月30日 星期一
Linux 核心編譯及相關知識
=== 編譯設定時請先注意核心版本是否正確,並確定是否有 64-bit kernel 選項 ===
設定核心參譯參數:
設定參數有三種選項,分別是:
1. M -> 編譯成模組,可即時載入/移除模組,舉例來說:搖桿的驅動程式是 joydev.ko,一般人電腦並沒有連接 USB 搖桿,因此我們無需隨時載入 joydev.ko 這個驅動程式模組,等到我們有接上 USB 搖桿時再來載入即可。
2. * -> 編譯並內嵌至核心,無法移除
3. -> 不編譯此模組
驅動程式模組操作:
1. lsmod -> 觀看目前有那些驅動程式模組已載入至記憶體,其輸出如下:
herman@debian:~$ lsmod
Module Size Used by
joydev 17232 0
nvidia 9384645 29
drm 211810 2 nvidia
nfsv3 29787 1
rpcsec_gss_krb5 26504 0
nfsv4 158090 0
nfsd 192007 2
auth_rpcgss 39085 2 nfsd,rpcsec_gss_krb5
oid_registry 12419 1 auth_rpcgss
nfs_acl 12511 2 nfsd,nfsv3
nfs 105982 3 nfsv3,nfsv4
lockd 55577 3 nfs,nfsd,nfsv3
fscache 37551 2 nfs,nfsv4
sunrpc 160406 24 nfs,nfsd,rpcsec_gss_krb5,auth_rpcgss,lockd,nfsv3,nfsv4,nfs_acl
..
..
其中 Module 欄位是目前已載入至記憶體中之模組,Size 是該模組大小,Used by 是指該模組是否有被其它模組使用,舉例來說,如果我們執行:
lsmod|grep usb
會得到以下輸出:
usb_storage 48020 0
scsi_mod 158157 5 sg,usb_storage,libata,sd_mod,sr_mod
usbcore 134854 4 uhci_hcd,usb_storage,ehci_hcd,ehci_pci
usb_common 12440 1 usbcore
其中 usbcore 是 USB 驅動程式之主模組,它會被其它 USB 相關驅動程式模組所使用,例如 usb_storage 是用來驅動 USB 儲存裝置之模組,它必須有 usbcore 才能使用。
2. modprobe -> 載入驅動程式模組
請先執行 lsmod|grep joydev 看看目前是否有載入 joystick 之驅動程式模組。接著我們可以使用 root 權限來載入 joydev 驅動程式模組:
# modprobe joydev
載入後可以再執行一次 lsmod|grep joydev 來看目前是否有載入 joystick 之驅動程式模組,理論上其輸出如下:
joydev 17232 0
這表示我們已成功載入 joydev 驅動程式模組。
3. rmmod -> 移除驅動程式模組
若我們要移除 joydev 模組的話,請以 root 權限執行底下指令:
# rmmod joydev
再以 lsmod|grep joydev 來看目前是否有載入 joystick 之驅動程式模組。
編譯核心參數設定
請以 root 權限在 /usr/src/linux 目錄下執行底下指令:
/usr/src/linux # make menuconfig
接著可以進行參數設定
1. General setup --->
Kernel compression mode (Gzip) --->
XZ
目的:使用最高壓縮率之壓縮演算法以節省空間。
[*] Enable loadable module support --->
目的:開啟可載入模組設定
[*] Module versioning support
支援其它版本核心所編譯出來的模組,萬一有相容性的問題則無法支援。
2. Processor type and features --->
Processor family (Generic-x86-64) --->
Processor family (Core 2/newer Xeon)
目的:把 CPU 由 Generic-x86-64 改為 Core 2/newer Xeon 可以加強在本機的
效能,因為本機 CPU 是 Core 2 Duo (hint: cat /proc/cpuinfo)
(512) Maximum number of CPUs
目的:支援最高 512 顆 CPU。
Bus options (PCI etc.) ---> 設定電腦內部匯流排,例如 PCI、ISA .. etc.
3. Executable file formats / Emulations --->
[*] IA32 Emulation
<*> IA32 a.out support
目的:在 64 位元 Linux 底下執行 32 位元 Linux 程式,例如 Adobe Reader 只出 32
位元版 (i386 版),打開此參數可以讓我們所編譯的 Linux 核心支援此程式
執行。
--- Networking support 設定網路相關硬體及軟體
Networking options ---> 不要動,以免網路無法動作
[ ] Amateur Radio support ---> 業餘無線電支援,請關閉,我們不需要。
< > CAN bus subsystem support --->
< > IrDA (infrared) subsystem support --->
<M> Bluetooth subsystem support --->
-*- Wireless ---
< > WiMAX Wireless Broadband support --->
< > NFC subsystem support --->
4. Device Drivers ---> 此目錄底下有相當多的參數可以設定,請將不要的模組移除以
減少空間。
< > Parallel port support ---> 關閉,我們現在的電腦已經沒有 RS232
的平行埠介面了。
<M> Loopback device support
(8) Number of loop devices to pre-create at init time
< > Cryptoloop Support
loopback device 可以用來掛載光碟片的 ISO 檔,簡單來說它是 Linux 上的
虛擬光碟。舉例來說,假設我們要掛在 debian 安裝 iso 檔,其檔名是:
debian-7.1.0-amd64-CD-1.iso 的話,我們可以使用 root 的權限執行:
# mount -o loop debian-7.1.0-amd64-CD-1.iso /mnt
將此光碟片掛載至 /mnt 目錄下,此時系統會出現底下訊息:
mount: warning: /mnt seems to be mounted read-only.
這表示 /mnt (光碟片) 是唯讀目錄,無法寫入。我們可以使用 ls /mnt
來觀看是否是光碟片內容。
因此 Loopback device 參數一定要設定,否則將無法使用虛擬光碟。
< > ATA/ATAPI/MFM/RLL support (DEPRECATED) --->
此參數有個 DEPRECATED 的單字,因此通常不再支援,除非你的電腦有接很老舊
的裝置,否則可以不必編。
<M> Serial ATA and Parallel ATA drivers --->
支援 SATA 介面,問題在於:我們如何知道本機 SATA 介面卡為何 ?
lspci 可以看到底下資訊:
00:1f.2 IDE interface: Intel Corporation NM10/ICH7 Family SATA Controller [IDE mode] (rev 01)
上述資料告訴我們本機的 SATA 介面是 Intel 的 NM10/ICH7 晶片,若想知道該晶
片使用那個模組的話,請執行:lspci -v,其輸出如下所示:
00:1f.2 IDE interface: Intel Corporation NM10/ICH7 Family SATA Controller [IDE mode] (rev 01) (prog-if 80 [Master])
Subsystem: Giga-byte Technology Device b002
Flags: bus master, 66MHz, medium devsel, latency 0, IRQ 19
I/O ports at 01f0 [size=8]
I/O ports at 03f4 [size=1]
I/O ports at 0170 [size=8]
I/O ports at 0374 [size=1]
I/O ports at f000 [size=16]
Capabilities: <access denied>
Kernel driver in use: ata_piix
============
IEEE 1394 (FireWire) support ---> 取消,目前此介面幾乎沒人使用
[ ] Macintosh device drivers ---> 取消,目前此介面幾乎沒人使用
============
-*- Network device support ---> 設定網路介面
< > ARCnet support --->
[ ] ATM drivers --->
*** CAIF transport drivers ***
Distributed Switch Architecture drivers --->
-*- Ethernet driver support ---> 設定網路卡驅動程式
我們以 lspci -v 可以看到以下訊息:
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/GA-EG45M-DS2H Motherboard
Flags: bus master, fast devsel, latency 0, IRQ 43
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
因此可以看到本機電腦所使用之網路卡驅動模組是 r8169,廠牌為 Realtek。
< > FDDI driver support
[ ] HIPPI driver support
< > General Instruments Surfboard 1000
{M} PHY Device support and infrastructure --->
< > Micrel KS8995MA 5-ports 10/100 managed Ethernet switch (NEW
< > PLIP (parallel port) support
{M} PPP (point-to-point protocol) support
USB Network Adapters ---> 沒有 USB 網卡則全部關掉
[ ] Wireless LAN ---> 沒有 wifi 無線網卡則全部關掉
WiMAX Wireless Broadband devices ---> 沒有 wimax 卡則關掉
[ ] Wan interfaces support --->
< > IEEE 802.15.4 drivers --->
< > VMware VMXNET3 ethernet driver
[ ] ISDN support --->
<M> Sound card support ---> 音效卡支援
--- Sound card support
[ ] Preclaim OSS device numbers
<M> Advanced Linux Sound Architecture --->
< > Open Sound System (DEPRECATED) --->
音效卡我們只保留 ALSA,我們的音效卡是:
00:1b.0 Audio device: Intel Corporation NM10/ICH7 Family High Definition Audio Controller (rev 01)
因此其驅動程式如下:
[*] PCI sound devices --->
<M> Intel HD Audio --->
<M> Intel/SiS/nVidia/AMD/ALi AC97 Controller
<M> Intel/SiS/nVidia/AMD MC97 Modem
Graphics support ---> 顯示卡支援
我們的顯示卡是
01:00.0 VGA compatible controller: NVIDIA Corporation G96 [GeForce 9400 GT] (rev a1)
由於我只裝官方驅動程式,因此把 nouveau 關掉,兩者會相衝。
< > Nouveau (nVidia) cards
其餘驅動程式可以關閉以簡省空間。
{*} Hardware Monitoring support --->
硬體監測驅動程式,因為我們看不到主機板上面的晶片,因此建議全部編譯,
讓電腦開機時自動偵測並載入相對應之驅動程式模式。
我們可以使用 lm-sensors 這個套件來看主機板上面的溫度/電壓/風扇
sensors-detect
偵測完畢後會出現底下訊息,告訴我們要載入那些模組以驅動硬體監視驅動
程式。
Now follows a summary of the probes I have just done.
Just press ENTER to continue:
Driver `it87':
* ISA bus, address 0x290
Chip `ITE IT8718F Super IO Sensors' (confidence: 9)
Driver `coretemp':
* Chip `Intel digital thermal sensor' (confidence: 9)
To load everything that is needed, add this to /etc/modules:
#----cut here----
# Chip drivers
coretemp
it87
#----cut here----
If you have some drivers built into your kernel, the list above will
contain too many modules. Skip the appropriate ones!
Do you want to add these lines automatically to /etc/modules? (yes/NO)
Unloading i2c-dev... OK
Unloading cpuid... OK
{M} Generic Thermal sysfs driver ---> 溫度管理
<M> Multimedia support ---> 設定視訊/電視卡之驅動程式模組
<M> VFIO Non-Privileged userspace driver framework ---> 將 VGA pass 給 qemu
--- VFIO Non-Privileged userspace driver framework
<M> VFIO support for PCI devices
[*] VFIO PCI support for VGA devices
5. Firmware Drivers ---> 某些硬體需要 firmware (韌體) 才能動作,
這些韌體在 Debian 的 firmware* 套件中。
大部份常見會用到的韌體是無線網卡,例如 b43 (broadcom) 無線網卡之類。
設定核心參譯參數:
設定參數有三種選項,分別是:
1. M -> 編譯成模組,可即時載入/移除模組,舉例來說:搖桿的驅動程式是 joydev.ko,一般人電腦並沒有連接 USB 搖桿,因此我們無需隨時載入 joydev.ko 這個驅動程式模組,等到我們有接上 USB 搖桿時再來載入即可。
2. * -> 編譯並內嵌至核心,無法移除
3. -> 不編譯此模組
驅動程式模組操作:
1. lsmod -> 觀看目前有那些驅動程式模組已載入至記憶體,其輸出如下:
herman@debian:~$ lsmod
Module Size Used by
joydev 17232 0
nvidia 9384645 29
drm 211810 2 nvidia
nfsv3 29787 1
rpcsec_gss_krb5 26504 0
nfsv4 158090 0
nfsd 192007 2
auth_rpcgss 39085 2 nfsd,rpcsec_gss_krb5
oid_registry 12419 1 auth_rpcgss
nfs_acl 12511 2 nfsd,nfsv3
nfs 105982 3 nfsv3,nfsv4
lockd 55577 3 nfs,nfsd,nfsv3
fscache 37551 2 nfs,nfsv4
sunrpc 160406 24 nfs,nfsd,rpcsec_gss_krb5,auth_rpcgss,lockd,nfsv3,nfsv4,nfs_acl
..
..
其中 Module 欄位是目前已載入至記憶體中之模組,Size 是該模組大小,Used by 是指該模組是否有被其它模組使用,舉例來說,如果我們執行:
lsmod|grep usb
會得到以下輸出:
usb_storage 48020 0
scsi_mod 158157 5 sg,usb_storage,libata,sd_mod,sr_mod
usbcore 134854 4 uhci_hcd,usb_storage,ehci_hcd,ehci_pci
usb_common 12440 1 usbcore
其中 usbcore 是 USB 驅動程式之主模組,它會被其它 USB 相關驅動程式模組所使用,例如 usb_storage 是用來驅動 USB 儲存裝置之模組,它必須有 usbcore 才能使用。
2. modprobe -> 載入驅動程式模組
請先執行 lsmod|grep joydev 看看目前是否有載入 joystick 之驅動程式模組。接著我們可以使用 root 權限來載入 joydev 驅動程式模組:
# modprobe joydev
載入後可以再執行一次 lsmod|grep joydev 來看目前是否有載入 joystick 之驅動程式模組,理論上其輸出如下:
joydev 17232 0
這表示我們已成功載入 joydev 驅動程式模組。
3. rmmod -> 移除驅動程式模組
若我們要移除 joydev 模組的話,請以 root 權限執行底下指令:
# rmmod joydev
再以 lsmod|grep joydev 來看目前是否有載入 joystick 之驅動程式模組。
編譯核心參數設定
請以 root 權限在 /usr/src/linux 目錄下執行底下指令:
/usr/src/linux # make menuconfig
接著可以進行參數設定
1. General setup --->
Kernel compression mode (Gzip) --->
XZ
目的:使用最高壓縮率之壓縮演算法以節省空間。
[*] Enable loadable module support --->
目的:開啟可載入模組設定
[*] Module versioning support
支援其它版本核心所編譯出來的模組,萬一有相容性的問題則無法支援。
2. Processor type and features --->
Processor family (Generic-x86-64) --->
Processor family (Core 2/newer Xeon)
目的:把 CPU 由 Generic-x86-64 改為 Core 2/newer Xeon 可以加強在本機的
效能,因為本機 CPU 是 Core 2 Duo (hint: cat /proc/cpuinfo)
(512) Maximum number of CPUs
目的:支援最高 512 顆 CPU。
Bus options (PCI etc.) ---> 設定電腦內部匯流排,例如 PCI、ISA .. etc.
3. Executable file formats / Emulations --->
[*] IA32 Emulation
<*> IA32 a.out support
目的:在 64 位元 Linux 底下執行 32 位元 Linux 程式,例如 Adobe Reader 只出 32
位元版 (i386 版),打開此參數可以讓我們所編譯的 Linux 核心支援此程式
執行。
--- Networking support 設定網路相關硬體及軟體
Networking options ---> 不要動,以免網路無法動作
[ ] Amateur Radio support ---> 業餘無線電支援,請關閉,我們不需要。
< > CAN bus subsystem support --->
< > IrDA (infrared) subsystem support --->
<M> Bluetooth subsystem support --->
-*- Wireless ---
< > WiMAX Wireless Broadband support --->
< > NFC subsystem support --->
4. Device Drivers ---> 此目錄底下有相當多的參數可以設定,請將不要的模組移除以
減少空間。
< > Parallel port support ---> 關閉,我們現在的電腦已經沒有 RS232
的平行埠介面了。
<M> Loopback device support
(8) Number of loop devices to pre-create at init time
< > Cryptoloop Support
loopback device 可以用來掛載光碟片的 ISO 檔,簡單來說它是 Linux 上的
虛擬光碟。舉例來說,假設我們要掛在 debian 安裝 iso 檔,其檔名是:
debian-7.1.0-amd64-CD-1.iso 的話,我們可以使用 root 的權限執行:
# mount -o loop debian-7.1.0-amd64-CD-1.iso /mnt
將此光碟片掛載至 /mnt 目錄下,此時系統會出現底下訊息:
mount: warning: /mnt seems to be mounted read-only.
這表示 /mnt (光碟片) 是唯讀目錄,無法寫入。我們可以使用 ls /mnt
來觀看是否是光碟片內容。
因此 Loopback device 參數一定要設定,否則將無法使用虛擬光碟。
< > ATA/ATAPI/MFM/RLL support (DEPRECATED) --->
此參數有個 DEPRECATED 的單字,因此通常不再支援,除非你的電腦有接很老舊
的裝置,否則可以不必編。
<M> Serial ATA and Parallel ATA drivers --->
支援 SATA 介面,問題在於:我們如何知道本機 SATA 介面卡為何 ?
lspci 可以看到底下資訊:
00:1f.2 IDE interface: Intel Corporation NM10/ICH7 Family SATA Controller [IDE mode] (rev 01)
上述資料告訴我們本機的 SATA 介面是 Intel 的 NM10/ICH7 晶片,若想知道該晶
片使用那個模組的話,請執行:lspci -v,其輸出如下所示:
00:1f.2 IDE interface: Intel Corporation NM10/ICH7 Family SATA Controller [IDE mode] (rev 01) (prog-if 80 [Master])
Subsystem: Giga-byte Technology Device b002
Flags: bus master, 66MHz, medium devsel, latency 0, IRQ 19
I/O ports at 01f0 [size=8]
I/O ports at 03f4 [size=1]
I/O ports at 0170 [size=8]
I/O ports at 0374 [size=1]
I/O ports at f000 [size=16]
Capabilities: <access denied>
Kernel driver in use: ata_piix
============
IEEE 1394 (FireWire) support ---> 取消,目前此介面幾乎沒人使用
[ ] Macintosh device drivers ---> 取消,目前此介面幾乎沒人使用
============
-*- Network device support ---> 設定網路介面
< > ARCnet support --->
[ ] ATM drivers --->
*** CAIF transport drivers ***
Distributed Switch Architecture drivers --->
-*- Ethernet driver support ---> 設定網路卡驅動程式
我們以 lspci -v 可以看到以下訊息:
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/GA-EG45M-DS2H Motherboard
Flags: bus master, fast devsel, latency 0, IRQ 43
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
因此可以看到本機電腦所使用之網路卡驅動模組是 r8169,廠牌為 Realtek。
< > FDDI driver support
[ ] HIPPI driver support
< > General Instruments Surfboard 1000
{M} PHY Device support and infrastructure --->
< > Micrel KS8995MA 5-ports 10/100 managed Ethernet switch (NEW
< > PLIP (parallel port) support
{M} PPP (point-to-point protocol) support
USB Network Adapters ---> 沒有 USB 網卡則全部關掉
[ ] Wireless LAN ---> 沒有 wifi 無線網卡則全部關掉
WiMAX Wireless Broadband devices ---> 沒有 wimax 卡則關掉
[ ] Wan interfaces support --->
< > IEEE 802.15.4 drivers --->
< > VMware VMXNET3 ethernet driver
[ ] ISDN support --->
<M> Sound card support ---> 音效卡支援
--- Sound card support
[ ] Preclaim OSS device numbers
<M> Advanced Linux Sound Architecture --->
< > Open Sound System (DEPRECATED) --->
音效卡我們只保留 ALSA,我們的音效卡是:
00:1b.0 Audio device: Intel Corporation NM10/ICH7 Family High Definition Audio Controller (rev 01)
因此其驅動程式如下:
[*] PCI sound devices --->
<M> Intel HD Audio --->
<M> Intel/SiS/nVidia/AMD/ALi AC97 Controller
<M> Intel/SiS/nVidia/AMD MC97 Modem
Graphics support ---> 顯示卡支援
我們的顯示卡是
01:00.0 VGA compatible controller: NVIDIA Corporation G96 [GeForce 9400 GT] (rev a1)
由於我只裝官方驅動程式,因此把 nouveau 關掉,兩者會相衝。
< > Nouveau (nVidia) cards
其餘驅動程式可以關閉以簡省空間。
{*} Hardware Monitoring support --->
硬體監測驅動程式,因為我們看不到主機板上面的晶片,因此建議全部編譯,
讓電腦開機時自動偵測並載入相對應之驅動程式模式。
我們可以使用 lm-sensors 這個套件來看主機板上面的溫度/電壓/風扇
sensors-detect
偵測完畢後會出現底下訊息,告訴我們要載入那些模組以驅動硬體監視驅動
程式。
Now follows a summary of the probes I have just done.
Just press ENTER to continue:
Driver `it87':
* ISA bus, address 0x290
Chip `ITE IT8718F Super IO Sensors' (confidence: 9)
Driver `coretemp':
* Chip `Intel digital thermal sensor' (confidence: 9)
To load everything that is needed, add this to /etc/modules:
#----cut here----
# Chip drivers
coretemp
it87
#----cut here----
If you have some drivers built into your kernel, the list above will
contain too many modules. Skip the appropriate ones!
Do you want to add these lines automatically to /etc/modules? (yes/NO)
Unloading i2c-dev... OK
Unloading cpuid... OK
{M} Generic Thermal sysfs driver ---> 溫度管理
<M> Multimedia support ---> 設定視訊/電視卡之驅動程式模組
<M> VFIO Non-Privileged userspace driver framework ---> 將 VGA pass 給 qemu
--- VFIO Non-Privileged userspace driver framework
<M> VFIO support for PCI devices
[*] VFIO PCI support for VGA devices
5. Firmware Drivers ---> 某些硬體需要 firmware (韌體) 才能動作,
這些韌體在 Debian 的 firmware* 套件中。
大部份常見會用到的韌體是無線網卡,例如 b43 (broadcom) 無線網卡之類。
2013年4月1日 星期一
Debounce 電路設計
1. 何謂 Bounce (彈跳):
所謂的 Bounce 是指我們在按下電源開關時,電壓不會從 0 伏直接升到 VDD 伏。而是在 0 及 VDD 間震盪好幾次,最後才在 VDD 端穩定下來。
一個電子產品若有彈跳現象的話,最常見到的「症狀」是按下一個開關,結果數字跳好幾下。
2. 何謂 Debounce 電路 ??
為了解決彈跳問題,我們設計了 Debounce (反彈跳)電路,Debounce 電路的原理是:我們設定一個 Time Window,當波形能穿過這個 Time Window 時,才切換波形。
假設我們希望開關穩定的時間為 0.001 秒 = 1*10^-3 秒 = 1 ms
3. 如何設計 Debounce 電路 ??
a. 第一種作法:使用 AND 閘
利用 AND 閘來作 Debounce 電路可以在很短的時間之內設計完成,它的優點是簡單易懂。
缺點:
* 單一 AND 閘之 Delay 相當短,要湊 1ms 可能需要很多的 AND 閘串接
* 由於我們使用固定數量之 AND 閘,因此其 time window 不可改變,其彈性比較差
b. 第二種作法:使用 NOT 閘加一個超大 AND 閘
利用 NOT 閘來作 Debounce 電路可以在很短的時間之內設計完成,它的優點是簡單易懂。
上述兩種作法最大的缺點有二:
1. 佔空間:如果我們要設計的 debounce 電路之 time window 為 1ms,我們可能要串 1000 個 NOT 閘才能成功,這是相當佔空間的。
2. 沒彈性:如果我們有兩個專案,其中 A 專案的 debounce 時間為 1ms,而 B 專案的 debounce 時間為 1.5 ms,則我們必須針對兩個不同的專案設計出不同的 debounce 電路。
因此這兩種作法是比較差的 debounce 電路。
c. 第三種作法:兼具彈性及省空間的作法 ??
利用 Counter 電路來設計 debounce 電路可以解決上述兩個問題,因此我們可以看實體
電路設計。
low-active -> 低態動作:輸入為 0 時動作。
high-active -> 高態動作:輸入為 1 時動作。
{a[7:3],b[2:0]}
所謂的 Bounce 是指我們在按下電源開關時,電壓不會從 0 伏直接升到 VDD 伏。而是在 0 及 VDD 間震盪好幾次,最後才在 VDD 端穩定下來。
一個電子產品若有彈跳現象的話,最常見到的「症狀」是按下一個開關,結果數字跳好幾下。
2. 何謂 Debounce 電路 ??
為了解決彈跳問題,我們設計了 Debounce (反彈跳)電路,Debounce 電路的原理是:我們設定一個 Time Window,當波形能穿過這個 Time Window 時,才切換波形。
假設我們希望開關穩定的時間為 0.001 秒 = 1*10^-3 秒 = 1 ms
3. 如何設計 Debounce 電路 ??
a. 第一種作法:使用 AND 閘
利用 AND 閘來作 Debounce 電路可以在很短的時間之內設計完成,它的優點是簡單易懂。
缺點:
* 單一 AND 閘之 Delay 相當短,要湊 1ms 可能需要很多的 AND 閘串接
* 由於我們使用固定數量之 AND 閘,因此其 time window 不可改變,其彈性比較差
b. 第二種作法:使用 NOT 閘加一個超大 AND 閘
利用 NOT 閘來作 Debounce 電路可以在很短的時間之內設計完成,它的優點是簡單易懂。
上述兩種作法最大的缺點有二:
1. 佔空間:如果我們要設計的 debounce 電路之 time window 為 1ms,我們可能要串 1000 個 NOT 閘才能成功,這是相當佔空間的。
2. 沒彈性:如果我們有兩個專案,其中 A 專案的 debounce 時間為 1ms,而 B 專案的 debounce 時間為 1.5 ms,則我們必須針對兩個不同的專案設計出不同的 debounce 電路。
因此這兩種作法是比較差的 debounce 電路。
c. 第三種作法:兼具彈性及省空間的作法 ??
利用 Counter 電路來設計 debounce 電路可以解決上述兩個問題,因此我們可以看實體
電路設計。
low-active -> 低態動作:輸入為 0 時動作。
high-active -> 高態動作:輸入為 1 時動作。
{a[7:3],b[2:0]}
訂閱:
文章 (Atom)