新手建議跳過本章節。等到 SD 卡章節的時候,博主會以 SD 卡為實例給大家講解。
塊設備驅動要遠比字符設備驅動復雜得多,不同類型的存儲設備又對應不同的驅動子系統,本章我們重點學習一下塊設備相關驅動概念,不涉及到具體的存儲設備。
1、什么是塊設備?
塊設備是針對存儲設備的,比如 SD 卡、EMMC、NAND Flash、Nor Flash、SPI Flash、機械硬盤、固態硬盤等。因此塊設備驅動其實就是這些存儲設備驅動,塊設備驅動相比字符設備驅動的主要區別如下:
- 塊設備只能以塊為單位進行讀寫訪問,塊是 linux 虛擬文件系統(VFS)基本的數據傳輸單位。字符設備是以字節為單位進行數據傳輸的,不需要緩沖。
- 塊設備在結構上是可以進行隨機訪問的,對于這些設備的讀寫都是按塊進行的,塊設備使用緩沖區來暫時存放數據,等到條件成熟以后再一次性將緩沖區中的數據寫入塊設備中。這么做的目的為了提高塊設備壽命,大家如果仔細觀察的話就會發現有些硬盤或者 NAND Flash 就會標明擦除次數(flash 的特性,寫之前要先擦除),比如擦除 100000 次等。因此,為了提高塊設備壽命引入了緩沖區,數據先寫入到緩沖區中,等滿足一定條件后再一次性寫入到真正的物理存儲設備中,這樣就減少了對塊設備的擦除次數,提高了塊設備壽命。字符設備是順序的數據流設備,字符設備是按照字節進行讀寫訪問的。字符設備不需要緩沖區,對于字符設備的訪問都是實時的,而且也不需要按照固定的塊大小進行訪問。塊設備結構的不同其 I/O 算法也會不同,比如對于 EMMC、SD 卡、NAND Flash 這類沒有任何機械設備的存儲設備就可以任意讀寫任何的扇區(塊設備物理存儲單元)。但是對于機械硬盤這樣帶有磁頭的設備?