Linux塊裝置驅動(一)————塊裝置的結構及磁碟的結構
塊裝置的結構及磁碟的結構
1、扇區
磁碟上的每個磁軌被等分成若干個弧段,這些弧段便是磁碟的扇區。磁碟驅動器在向磁碟讀寫資料時,都是以扇區為單位。一般為512個位元組,但也有1024或者2048個位元組的。注意,即使程式只讀取一個位元組的資料,也應該傳遞一個扇區的資料。Linux系統中,扇區的大小都是512位元組。核心模組中都是以512位元組來定義扇區的。如果裝置的扇區大小為2048位元組,核心將其看成4個連續的扇區。
2、塊
扇區是硬體裝置傳遞資料的基本單位,硬體一次傳送一個扇區到記憶體中。塊是虛擬檔案系統傳遞資料的基本單位。塊的大小必須是扇區大小的整數倍,且不能超過一個頁的大小。
3、段
一個段就是一個記憶體頁或者記憶體頁的一部分。段的大小隻與塊有關,必須是塊的整數倍,且不超過一頁。
4 扇區、塊和段的關係
扇區是由物理磁碟的機械特性決定;塊緩衝區由核心程式碼決定;段是由快緩衝區決定,是快緩衝區大小的倍數,但不超過一頁。
說明: clipboard.png
相關推薦
Linux塊裝置驅動(一)————塊裝置的結構及磁碟的結構
塊裝置的結構及磁碟的結構 1、扇區 磁碟上的每個磁軌被等分成若干個弧段,這些弧段便是磁碟的扇區。磁碟驅動器在向磁碟讀寫資料時,都是以扇區為單位。一般為512個位元組,但也有1024或者
linux下的塊裝置驅動(一)
塊裝置的驅動比字符裝置的難,這是因為塊裝置的驅動和核心的聯絡進一步增大,但是同時塊裝置的訪問的幾個基本結構和字元還是有相似之處的。 有一句話必須記住:對於儲存裝置(硬碟~~帶有機械的操作)而言,調整讀寫的順序作用巨大,因為讀寫連續的扇區比分離的扇區快。 但是同時:SD卡和
字元裝置驅動(一)
寫字元裝置之前,我們先來看看linux驅動的整體框架吧,直接上圖。 linux系統主要將裝置分為3類:字元裝置、塊裝置、網路裝置 字元裝置:是指只能一個位元組一個位元組讀寫的裝置,不能隨機讀取裝置記憶體中的某一資料,讀取資料需要按照先後資料。字
tiny4412-arm嵌入式開發裸板驅動 (一):開發環境及工具搭建和介紹
寫在前面:在學習arm嵌入式時,發現網上exynos4412的資料很少(針對友善tiny4412開發板)走了很多彎路。把自己的學習經歷寫下來供參考。本人大學考研狗時間倉促,文章多有疏漏歡迎指正 一、開發環境 推薦在linux下進行開發,本文及後續以ubuntu 14
Netty實戰學習筆記(一)——Netty的概念及體系結構
JAVA早期的Socket JAVA早期只支援由本地系統套接字型檔提供的所謂的阻塞函式。 socket通訊的基本過程如圖: 在服務端,註冊服務對某個埠進行監聽,然後使用阻塞的accept()函式,來取出請求佇列中的socket,或者一直等待,直到收到客
linux 塊裝置驅動(1)
功能:新增一個ramdisk這樣的裝置,並且進行格式化,掛在,讀寫,很簡單的一個塊裝置例子,剛剛學習裝置驅動 <font color="#ff0000" size="5">看完,並且執行完程式碼,希望大家和我有一樣的問題,就是新的裝置空間那裡來的?原來的硬碟?
linux下的塊裝置驅動(二)
上一章主要講了請求佇列的一系列問題。下面主要說一下請求函式。首先來說一下硬碟類塊裝置的請求函式。 請求函式可以在沒有完成請求佇列的中的所有請求的情況下就返回,也可以在一個請求都不完成的情況下就返回。 下面貼出請求函式的例程: static int simp_blkdev_m
Linux塊裝置驅動(五)————通用塊層
通用塊層是塊裝置驅動的核心部分,這部分主要包含塊裝置驅動程式的通過程式碼部分。 1、通用塊層 通用塊層是一個核心元件,他處理來自系統其他元件發出的塊裝置請求。換句話說,通用塊層包含
Linux USB 驅動開發(一)—— USB裝置基礎概念
Linux USB 驅動開發(一)—— USB裝置基礎概念 在終端使用者看來,USB裝置為主機提供了多種多樣的附加功能,如檔案傳輸,聲音播放等,但對USB主機來說,它與所有USB裝置的介面都是一致的。一個USB裝置由3個功
學寫塊裝置驅動(三)----踢開IO排程器,自己處理bio(下)
本篇的(上)基本搞清楚了我們已經實現的記憶體塊裝置驅動和通用塊層之間的絲絲聯絡。現在我們該做點自己想做的事情了: 踢開IO排程器,自己來處理bio。 踢開IO排程器很容易,即不使用__make_request 這個系統指定的強力函式,如何不使用?其實我們從(上)的blk_init_queue()函式中也能看
學寫塊裝置驅動(三)----踢開IO排程器,自己處理bio(上)
前兩篇我們編寫了在記憶體中的最簡單的塊裝置驅動程式,併為其更換了我們心儀的’noop‘IO排程器。本篇我們試著搞清楚核心的塊裝置層在這裡為我們做的事情,以及我們如何做點自己想做的事情。 其實,我們前面兩篇都是圍繞著請求佇列(request_queue)這東西做事情。初始化請求佇列時我們註冊上驅動處理請求(r
塊裝置驅動(3)——nand flash驅動
/* 參考 * drivers\mtd\nand\s3c2410.c * drivers\mtd\nand\at91_nand.c */ #include <linux/module.h> #include <linux/types.h> #
Arduino系列之超聲波測距模塊代碼(一)
digital 工作原理 aso bsp out 就是 接收 功能 float 這裏我將簡單介紹超聲波測距模塊 SR04超聲波傳感器: 是利用超聲波特性檢測距離的傳感器,其帶有兩個超聲波探頭,分別用作於發射和接收超聲波。範圍在3-450cm。 工作原理: 超聲波發射器向某一
linux裝置驅動(3)I2C驅動
i2c驅動程式的核心是建立i2c_driver結構體 /* This is the driver that will be inserted */ static struct i2c_driver at24cxx_driver = { .driver = { .name
linux裝置驅動(0)測試工具(比較通用)
下面使用getopt_long實現的基於命令列的驅動測試軟體,比較通用,拓展性強 使用如下: No device found Usage: driver_test_tool [Device] [cmd] [data] ... Options: -o --ope
linux裝置驅動(3)字元驅動 -led
本文基於mini2440 /* * kernel : linux-2.6.22.6 * gcc : arm-linux-gcc -3.4.5 */ #include <linux/module.h> #include <linux/kerne
linux裝置驅動(3)字元驅動 -按鍵(查詢法)
本文描述查詢法。 所謂查詢法,就是在應用程式裡面執行 while (1) { read(fd, key_vals, sizeof(key_vals)); ... } 載入驅動並在後臺執行應用程式時, 通過top可以看到CPU利用率,該應用程序佔用9
Linux 裝置驅動篇之-------I2c裝置驅動(待續)
Linux 裝置驅動篇之-------I2c裝置驅動 雖然I2C硬體體系結構和協議都很容易理解,但是Linux I2C驅動體系結構卻有相當的複雜度,它主要由3部分組成,即I2C裝置驅動、I2C匯流
淺談Linux PCI裝置驅動(下)
我們在 淺談Linux PCI裝置驅動(上)中(以下簡稱 淺談(一) )介紹了PCI的配置暫存器組,而Linux PCI初始化就是使用了這些暫存器來進行的。後面我們會舉個例子來說明Linux PCI裝置驅動的主要工作內容(不是全部內容),這裡只做文字性的介紹而不會涉及具體程式碼的分析,因為要
淺談Linux PCI裝置驅動(上)
有學員建議寫寫PCI驅動,今天就找到一篇,文章很長,這基本上是全網對PCI講的比較詳細的部落格了,分成上下兩篇,這是上部分,未完待續。 要弄清楚Linux PCI裝置驅動,首先要明白,所謂的Linux PCI裝置驅動實際包括Linux PCI裝置驅動和裝置本身驅動兩部分。 不知道讀者