Linux學習筆記(三)-設備管理與驅動

設備管理與驅動

一. 設備分類:字符設備、塊設備、特殊設備
1. 字符設備
- 是指每次與系統傳輸1個字符的設備
- 字符設備通常爲傳真、虛擬終端和串口調制解調器、鍵盤之類設備提供流通信服務
- 字符設備在實現時,大多不使用緩存器。系統直接從設備讀取或者寫入每一個字符
- 例如,鍵盤這種設備提供的就是一個數據流,當你敲入“abcdefg這個字符串時,鍵盤驅動程序會按照和輸入完全相同的順序返回這個由七個字符組成的數據流。它們是順序的,先返回a,最後是g
2. 塊設備
- 是指與系統間用塊的方式移動數據的設備。如硬盤、CD-ROM和內存區域
- 塊設備通常支持隨機存取和尋址,並使用緩存器
- 操作系統爲輸入輸出分配了緩存以存儲一塊數據。當程序向設備發送了讀取或者寫入數據的請求時,系統把數據中的每一個字符存儲在適當的緩存中
- 當緩存被填滿時,會採取適當的操作(把數據傳走),而後系統清空緩存
- 它與字符設備不同之處就是其一般支持隨機存儲,而字符型是流形式,逐一存儲
3. 特殊設備(僞設備)
- 在類Unix操作系統中,設備節點並不一定要對應物理設備
- 沒有這種對應關係的設備是特殊設備(或僞設備)。操作系統運用了它們提供的多種功能
- 部份經常使用到的特殊設備(或僞設備)包括: null, zero, full, loop
3.1. /dev/stdin:指的就是鍵盤設備

實驗1#cat > file1 < /dev/stdin
Test
Ctrl +d
#cat從/dev/stdin獲得數據,然後保存到file1文件中。
#cat file1
Test
實驗2#cat > file1
Test
Ctrl+D
#不指定輸入,默認的輸入設備就是/dev/stdin

3.2. /dev/null設備
- 是個黑洞設備,它丟棄一切寫入其中數據,空設備通常被用於丟棄不需要的輸出流
- 任何寫入該設備數據都會被丟棄掉。從這個裏面讀取數據返回是空。將一些不用內容經常發送給這個設備,丟棄不需要的數

 #cat /dev/null
 #cat test.sh >/dev/null

 //讀該設備爲空,寫入改設備的數據都丟棄了

3.3. /dev/zero設備
- /dev/zero 會提供無限的空字符(NULL, ASCII NUL, 0x00)。其中的一個典型用法是用它提供的字符流來覆蓋信息,另一個常見用法是產生一個特定大小的空白文件

//創建一個大小爲1M文件,該文件一個塊是1024字節,一共是1024塊(剛好1M),用/dev/zero文件內容填充它。輸出創建到:testzero文件 
# dd if=/dev/zero of=testzero count=1024 bs=1024 
    1024+0 records in
    1024+0 records out 
    1048576 bytes (1.0 MB) copied, 0.0107194 seconds, 97.8 MB/s

//這個命令一定不要隨便用,有點象windows裏面的粉碎文件工具。不過它是用\0x00填充整個分區。這樣做數據是不可以恢復的了
# dd if=/dev/zero of=/dev/磁盤分區 
  • 注意:在linux操作系統中,如果沒有資源配額限制,一個普通用戶就可以通過上面方法在短時間內將整個磁盤空間佔用。也可以通過while(true) {fork……}類程序,啓動無限線程,耗盡整個系統內存

    3.4. /dev/full設備

    • 類Unix系統中,/dev/full(常滿設備)是一個特殊設備文件,總是在向其寫入時返回設備無剩餘空間
    • 這個設備通常被用來測試程序在遇到磁盤無剩餘空間錯誤時的行爲
# echo 'chengmo' >/dev/full
-bash: echo: write error: 設備上沒有空間
# echo $?
1
//命令執行返回錯誤
//$?顯示最後命令的退出狀態。0表示沒有錯誤,其它任何值表明有錯誤

命令補充:dd命令
- dd命令的用途把指定的輸入文件拷貝到指定的輸出文件中,並且在拷貝的過程中可以進行格式轉換
- 一般用於數據備份與恢復

1:將本地的/dev/hdx整盤備份到/dev/hdy :
#dd if=/dev/hdx of=/dev/hdy

例2:將/dev/sda1全盤數據備份到指定路徑的image文件:
#dd if=/dev/sda1 of=/home/apple/test

例3:將備份文件恢復到指定盤:
#dd if =/home/apple/test  of=/dev/hdx

二. Linux下的設備驅動
1. 設備驅動
- 每個物理設備都擁有自己的控制器。且硬件控制器一般有各自的控制狀態寄存器(CSR)。這些寄存器用來啓動、停止、初始化設備以及對設備進行診斷
- Linux 中的設備由內核統一管理,這些處理和管理硬件控制器的軟件就是設備驅動程序
- 這些設備驅動程序運行在特權優先級上,駐留在內存,負責對底層硬件進行處理
1.1. 主要功能
- 使設備投入運行和退出服務;
- 從設備接收數據並將它們送回內核;
- 將數據從內核送到設備;
- 檢測和處理設備出現的錯誤。
1.2. 特性
a. 驅動程序屬於內核代碼
設備驅動程序是內核的一部分,它像內核中其它代碼一樣運行在內核模式,驅動程序如果出錯將會使操作系統受到嚴重破壞,甚至能使系統崩潰並導致文件系統的破壞和數據丟失
b. 爲內核提供統一的接口
設備驅動程序必須爲 Linux 內核或其它子系統提供一個標準的接口。例如終端驅動程序爲Linux 內核提供了一個文件 I/O 接口
c. 驅動程序的執行是屬於內核機制並且使用內核服務
設備驅動可以使用標準的內核服務如內存分配、中斷髮送和等待隊列等等
d. 動態可加載
多數 Linux 設備驅動程序可以在內核模塊發出加載請求時加載,而不再使用時將其卸載。這樣內核能有效地利用系統資源

e. 可配置
Linux 設備驅動程序可以連接到內核中。當內核被編譯時,被連入內核的設備驅動程序是可配置的
1.3. 內核和模塊
- Linux下硬件的驅動可以有兩種方式:
- 直接加載到內核代碼中,啓動內核時就會驅動此硬件設備
- 另一種就是以模塊方式,編譯生成一個.o文件。當應用程序需要時再加載進內核空間運行。所以我們所說的一個硬件的驅動程序,通常指的就是一個驅動模塊

模塊(module)是在內核空間運行的程序,實際上是一種目標對象文件,沒有鏈接,不能獨立運行,但是可以裝載到系統中作爲內核的一部分運行,從而可以動態擴充內核的功能。模塊最主要的用處就是用來實現設備驅動程序

1.4. 設備文件
- 設備管理的一個基本特徵是設備處理的抽象性,即所有硬件設備都被看成普通文件
- 可以通過用操縱普通文件相同的系統調用來打開、關閉、讀取和寫入設備
- 對於一個物理設備,它可以在/dev下面存在一個或者多個對應的邏輯設備節點,這個節點以文件的形式存在,但它不是普通意義上的文件,它是設備文件,更確切的說,它是設備節點。例如系統中第一個IDE硬盤被表示成/dev/hda。
- 設備一般有主設備號和次設備號

  • 主設備號表明了某一類設備,一般對應着確定的驅動程序;主設備號是從/proc/devices文件中獲得的

    • 主設備號的主要作用:就是聲明設備所使用的驅動程序。驅動程序和設備號是一一對應的,當你打開一個設備文件時,操作系統就已經知道這個設備所對應的驅動程序
  • 次設備號一般是區分不同屬性,例如不同的使用方法,不同的位置,不同的操作

    2.例子:U盤的訪問
    2.1 U盤在訪問之前一般需要mount,mount 的語法是

#mount 設備名 掛載點目錄

2.2 但如何知道u盤的設備名?方法是:可以在插入u盤後用#fdisk -l看一下
2.3 在非虛擬機環境下,插入U盤或存儲卡後,就會發現系統中多了一個SCSI硬盤,通過正確地mount它,就可以使用了。例如:

     #mount  /dev/sda1  /mnt #mount  /dev/sda  /mnt 

然後,可以進入到這個目錄/dev/sda1下查看u盤內容
2.4 而在虛擬機環境中,一般在插入U盤後,會自動mount。
例如其對應關係爲:
設備名:/dev/sdb1 掛載目錄:/media/KINGSTON

然後,可以進入到這個目錄/media/KINGSTON下查看u盤內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章