Linux那些事兒之我是Block層(引子)

很久以前 , 天還是藍的 , 水也是綠的 , 莊稼是長在地裏的 , 豬肉是可以放心吃的 , 耗子還是怕貓的 , 法庭是講理的 , 上牀是先結婚的 , 理髮店是隻管理髮的 , 藥是可以治病的 , 醫生是救死扶傷的 , 拍電影是不需要陪導演睡覺的 , 照相是要穿衣服的 , 欠錢是要還的 , 孩子的爸爸是明確的 , 學校是不圖掙錢的 , 白癡是不能當教授的 , 賣狗肉是不能掛羊頭的 , 男就是男的女的就是女的 . 那時候 Block 層還是一部分附屬於 drivers/ 目錄下一部分附屬於 fs/ 目錄下的 .

但後來一切都變了 .2005 年秋天 ,Block 層搬出了 drivers/ fs/ 目錄 , 2.6.15 的內核開始 , 頂層目錄下面有了一個叫做 block 的目錄 , 內核目錄結構變成了現在這個樣子 :

localhost-1:/usr/src/linux-2.6.22.1 # ls

COPYING  Documentation  MAINTAINERS  README  arch   crypto   fs       init  kernel  mm   scripts   sound  CREDITS  Kbuild Makefile  REPORTING-BUGS  block  drivers  include  ipc   lib     net  security  usr

進入 block 目錄 , 用旁光看一下 :

localhost:/usr/src/linux-2.6.22.1/block # ls

Kconfig          Makefile      blktrace.c     deadline-iosched.c  genhd.c  ll_rw_blk.c     scsi_ioctl.c

Kconfig.iosched  as-iosched.c  cfq-iosched.c  elevator.c          ioctl.c  noop-iosched.c

wc 命令統計一下 :

localhost:/usr/src/linux-2.6.22.1/block # wc -l *

    54 Kconfig

    73 Kconfig.iosched

    12 Makefile

  1485 as-iosched.c

   562 blktrace.c

  2254 cfq-iosched.c

   485 deadline-iosched.c

  1160 elevator.c

   831 genhd.c

   304 ioctl.c

  4117 ll_rw_blk.c

   118 noop-iosched.c

   654 scsi_ioctl.c

  12109 total

一萬二千多行 . 還好我們不用每個文件都去看 .

老規矩 , 先看一下 Makefile Kconfig,

localhost:/usr/src/linux-2.6.22.1/block # cat Makefile

#

# Makefile for the kernel block layer

#

 

obj-$(CONFIG_BLOCK) := elevator.o ll_rw_blk.o ioctl.o genhd.o scsi_ioctl.o

 

obj-$(CONFIG_IOSCHED_NOOP)      += noop-iosched.o

obj-$(CONFIG_IOSCHED_AS)        += as-iosched.o

obj-$(CONFIG_IOSCHED_DEADLINE)  += deadline-iosched.o

obj-$(CONFIG_IOSCHED_CFQ)       += cfq-iosched.o

 

obj-$(CONFIG_BLK_DEV_IO_TRACE)  += blktrace.o

很顯然 , 經常在地鐵站裏吆喝着說劉德華死了的那位賣報的哥們兒也知道 , 這裏最重要的一個選項是 CONFIG_BLOCK, 而剩下幾個我們看一下 Kconfig 以及 Kconfig.iosched 就知道 , 是和 IO 調度算法有關的 , 並不一定每種算法都要清楚 , 看其中一種就湊合了 .

那麼整個 Block 子系統的入口在哪裏呢 ? 一路走來的兄弟相信不難找到 , block/genhd.c 中有這麼一行 :

    363 subsys_initcall(genhd_device_init);

所以很明顯 ,genhd_device_init 將爲我們掀開故事的大幕 .

發佈了7 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章