LPI102考試準備:核心(轉)
LPI102考試準備:核心(轉)[@more@] 執行時核心管理 本節討論初級管理(LPIC-1)102 考試的主題 1.105.1 的內容。這個主題的權值是 4。 在本節中,學習如何: 使用命令列工具獲得關於當前執行的核心和核心模組的資訊 手工裝載和解除安裝核心模組 判斷何時可以解除安裝模組 配置系統以便按照檔名之外的名稱來裝載模組 從技術上說,Linux 是系統的核心。核心為應用程式執行和使用各種硬體裝置提供了一個框架。它是處理硬體介面、排程和記憶體管理等任務的低層程式碼。許多人把整個系統稱為 GNU/Linux,因為大多數發行版中的許多工具來自 Free Software Foundation 的 GNU 專案。但是,常常簡稱為 “Linux” 而不是 “GNU/Linux”。 uname uname 命令輸出關於系統及其核心的資訊。清單 1 顯示 uname 的各種選項以及產生的資訊;表 3 中定義了這些選項。 清單 1. uname 命令 ian@pinguino:~$ uname Linux ian@pinguino:~$ uname -s Linux ian@pinguino:~$ uname -n pinguino ian@pinguino:~$ uname -r 2.6.12-10-386 ian@pinguino:~$ uname -v #1 Mon Jan 16 17:18:08 UTC 2006 ian@pinguino:~$ uname -m i686 ian@pinguino:~$ uname -o GNU/Linux ian@pinguino:~$ uname -a Linux pinguino 2.6.12-10-386 #1 Mon Jan 16 17:18:08 UTC 2006 i686 GNU/Linux 表 3. uname 的選項 選項 描述 -s 輸出核心名。如果沒有指定選項,這是預設選項。 -n 輸出節點名或主機名。 -r 輸出核心的釋出版本。這個選項常常與模組處理命令一起使用。 -v 輸出核心的版本。 -m 輸出機器的硬體(CPU)名。 -o 輸出作業系統名。 -a 輸出以上所有資訊。 清單 1 來自在 Intel® CPU 上執行的 Ubuntu 系統。uname 命令在大多數 UNIX® 和類 UNIX 系統以及 Linux 上都是可用的。根據 Linux 發行版和版本的不同,以及執行的機器型別的不同,顯示的資訊是不同的。清單 2 顯示的輸出來自執行 Fedora Core 4 的 AMD Athlon 64 系統和 Apple PowerBook。 清單 2. 對另一個系統使用 uname Linux attic4 2.6.14-1.1656_FC4 #1 Thu Jan 5 22:13:55 EST 2006 x86_64 x86_64 x86_64 GNU/Linuxfilesystem Darwin Ian-Shields-Computer.local 7.9.0 Darwin Kernel Version 7.9.0: Wed Mar 30 20:11:17 PST 2005; root:xnu/xnu-517.12.7.obj~1/RELEASE_PPC Power Macintosh powerpc 核心模組 核心管理著系統的許多低層功能,包括硬體和介面。由於存在許多不同的硬體和幾種不同的檔案系統,所以支援所有功能的核心會非常大。幸運的是,核心模組(kernel modules) 使我們能夠在需要時裝載支援軟體,比如硬體驅動程式或檔案系統,所以可以用一個小核心啟動系統,然後根據需要裝載其他模組。裝載常常是自動的,比如在插入 USB 裝置時自動裝載相關的驅動程式。 本節的剩餘部分討論用於核心模組的命令和配置。 用於裝載和解除安裝模組這樣的任務的命令需要根特權。顯示關於模組的資訊的命令常常可以由一般使用者執行。但是,因為這些命令在 /sbin 中,常常不在非根使用者的路徑中,所以如果您是非根使用者,那麼可能必須使用完整路徑名。 lsmod 使用 lsmod 命令顯示系統上當前裝載的模組,如清單 3 所示。您的輸出可能不一樣,但是應該會看到一些共同的條目。 清單 3. 用 lsmod 顯示核心模組 [ian@attic4 ~]$ /sbin/lsmod Module Size Used by nvnet 74148 0 nvidia 4092336 12 forcedeth 24129 0 md5 4161 1 ipv6 268737 12 parport_pc 29189 1 lp 13129 0 parport 40969 2 parport_pc,lp autofs4 29637 1 sunrpc 168453 1 ipt_REJECT 5825 1 ipt_state 1985 3 ip_conntrack 42009 1 ipt_state iptable_filter 3137 1 ip_tables 19521 3 ipt_REJECT,ipt_state,iptable_filter dm_mod 58613 0 video 16069 0 button 4161 0 battery 9541 0 ac 4933 0 ohci_hcd 26977 0 ehci_hcd 41165 0 i2c_nforce2 7105 0 i2c_core 21825 1 i2c_nforce2 shpchp 94661 0 snd_intel8x0 34945 1 snd_ac97_codec 76217 1 snd_intel8x0 snd_seq_dummy 3781 0 snd_seq_oss 37569 0 snd_seq_midi_event 9409 1 snd_seq_oss snd_seq 62801 5 snd_seq_dummy,snd_seq_oss,snd_seq_midi_event snd_seq_device 9037 3 snd_seq_dummy,snd_seq_oss,snd_seq snd_pcm_oss 51569 0 snd_mixer_oss 18113 1 snd_pcm_oss snd_pcm 100553 3 snd_intel8x0,snd_ac97_codec,snd_pcm_oss snd_timer 33733 2 snd_seq,snd_pcm snd 57669 11 snd_intel8x0,snd_ac97_codec,snd_seq_oss,snd_seq, snd_seq_device,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer soundcore 11169 1 snd snd_page_alloc 9925 2 snd_intel8x0,snd_pcm floppy 65397 0 ext3 132681 3 jbd 86233 1 ext3 sata_nv 9541 0 libata 47301 1 sata_nv sd_mod 20545 0 scsi_mod 147977 2 libata,sd_mod [ian@attic4 ~]$ 可以看到這個系統裝載了許多模組。其中大多數是核心提供的。但是,有一些模組(比如來自 NVIDIA Corporation 的 nvnet、nvidia 和 sata_nv 模組)包含專有程式碼,不是作為標準核心的一部分提供的。按照這種模組化的方式,可以將專有程式碼插入開放原始碼的核心。如果廠商的許可證允許的話,Linux 發行商可以將專有模組新增到發行版中,這樣您就不必直接從廠商那裡獲得這些模組,並可以確保具有適當的模組版本。 在清單 3 中,還可以看到對顯示卡、SATA 和 SCSI 硬碟驅動器、軟碟機和音效卡等裝置的模組化支援擴充套件,以及用於連網特性(比如 IPV6)、檔案系統支援(比如 ext3)和 Sun 遠端過程呼叫(RPC)的模組。 除了模組名之外,lsmod 還顯示模組的大小和使用者數量。如果一個模組由其他模組使用,那麼會列出這些模組。例如,soundcore 模組由 snd 模組使用,後者又由其他幾個聲音模組使用。 modinfo modinfo 命令顯示關於一個或多個模組的資訊。如清單 4 所示,這些資訊包括檔案的完整路徑、作者、許可證、模組可能接受的任何引數、版本、依賴項和其他資訊。 清單 4. 基本模組資訊 [ian@attic4 ~]$ /sbin/modinfo floppy filename: /lib/modules/2.6.12-1.1456_FC4/kernel/drivers/block/floppy.ko author: Alain L. Knaff license: GPL alias: block-major-2-* vermagic: 2.6.12-1.1456_FC4 686 REGPARM 4KSTACKS gcc-4.0 depends: srcversion: 2633BC999A0747D8D215F1F parm: FLOPPY_DMA:int parm: FLOPPY_IRQ:int parm: floppy:charp [ian@attic4 ~]$ /sbin/modinfo sata_nv filename: /lib/modules/2.6.12-1.1456_FC4/kernel/drivers/scsi/sata_nv.ko author: NVIDIA description: low-level driver for NVIDIA nForce SATA controller license: GPL version: 0.6 vermagic: 2.6.12-1.1456_FC4 686 REGPARM 4KSTACKS gcc-4.0 depends: libata alias: pci:v000010DEd0000008Esv*sd*bc*sc*i* alias: pci:v000010DEd000000E3sv*sd*bc*sc*i* alias: pci:v000010DEd000000EEsv*sd*bc*sc*i* alias: pci:v000010DEd00000054sv*sd*bc*sc*i* alias: pci:v000010DEd00000055sv*sd*bc*sc*i* alias: pci:v000010DEd00000036sv*sd*bc*sc*i* alias: pci:v000010DEd0000003Esv*sd*bc*sc*i* alias: pci:v000010DEd*sv*sd*bc01sc01i* srcversion: 3094AD48C1B869BCC301E9F 在清單 4 中,注意在給出模組檔名的行中,這些檔名以 .ko 字尾結束。這將 2.6 核心的模組與其他目標檔案和 2.4 及以前版本的核心模組區分開(在 2.4 及以前版本的核心中,核心模組與其他目標檔案都使用 .o 字尾)。 還會注意到模組路徑包括核心版本。例如,/lib/modules/2.6.12-1.1456_FC4/kernel/drivers/block/floppy.ko 包括 2.6.12-1.1456_FC4 作為路徑元素。這個值與 uname -r 顯示的值相同。核心模組是與給定的核心相關的,這種結構管理這種關係。 在 2.6 核心上,還可以使用 modinfo 來限制查詢的模組資訊範圍。使用 -F 選項提取單一型別的資訊,比如引數、描述、許可證、檔名或別名。如果需要不同型別的資訊,那麼可以用不同選項多次執行這個命令。在 2.4 核心上,用 -p 這樣的引數提取引數資訊。當前的 modinfo 命令也支援老式的引數。清單 5 給出一些例子。 清單 5. 特定的模組資訊 [ian@attic4 ~]$ /sbin/modinfo -F parm snd cards_limit:Count of auto-loadable soundcards. major:Major # for sound driver. [ian@attic4 ~]$ /sbin/modinfo -F license nvidia floppy NVIDIA GPL [ian@attic4 ~]$ /sbin/modinfo -p snd major:Major # for sound driver. cards_limit:Count of auto-loadable soundcards. 使用您的 Linux 技能 可以使用教程 “LPI 101 考試準備(主題 103):GNU 和 UNIX 命令” 中討論的一些技術來提取資訊,比如模組接受的引數數量。清單 6 給出一個例子。 清單 6. 每個模組的引數數量 [ian@attic4 ~]$ for n in `/sbin/lsmod | tail +2 | cut -d " " -f1`; > do echo "$n $(/sbin/modinfo -p $n |wc -l )" | grep -v " 0$"; done nvnet 12 forcedeth 1 parport_pc 5 dm_mod 1 ohci_hcd 2 ehci_hcd 2 shpchp 3 snd_intel8x0 7 snd_ac97_codec 1 snd_seq_dummy 2 snd_seq_oss 2 snd_seq 7 snd_pcm_oss 3 snd_pcm 2 snd_timer 1 snd 2 snd_page_alloc 1 scsi_mod 6 rmmod 如果模組的使用計數是 0,那麼可以安全地刪除它。例如,在準備裝載模組的更新版本時可能要進行刪除操作。這是一種出色的模組化核心特性,因為在對特定裝置的支援進行更新時,不一定需要重新引導系統。要刪除模組,使用 rmmod 命令以及模組名,如清單 7 所示。 清單 7. 刪除正在執行的系統上的模組 [root@attic4 ~]# rmmod floppy 關於 rmmod 的其他選項,請參考手冊頁。 insmod 和 modprobe 刪除了模組之後,可能需要重新裝載它。這可以使用 insmod 命令,這個命令接受要裝載的模組的完整路徑名以及可能需要的任何模組選項。如果使用這個命令,可能希望使用命令替換來生成檔名。可以採用的兩種方式見清單 8。 清單 8. 使用 insmod 裝載模組 [root@attic4 ~]# insmod /lib/modules/`uname -r`/kernel/drivers/block/floppy.ko [root@attic4 ~]# rmmod floppy [root@attic4 ~]# insmod $(modinfo -F filename floppy) 上面的第二種形式使我們不必記住模組所在的子目錄(這個例子中的 drivers/block),但是還有更好的裝載模組的方法。modprobe 命令提供一個高階介面,它操作模組名而不是檔案路徑。它還會裝載模組所依賴的其他模組,並可以裝載和刪除模組。 清單 9 演示如何使用 modprobe 刪除 vfat 模組以及使用它的 fat 模組。然後,它顯示如果重新裝載了模組,系統會做什麼,最後顯示重新裝載模組的結果。注意,指定 -v 選項可以獲得詳細輸出;否則,modprobe(和底層的 insmod 命令)只顯示來自模組本身的錯誤訊息。在每一步之間,lsmod 透過管道連線到 grep,從而顯示 vfat 或 fat 模組是否裝載了。 清單 9. 使用 modprobe 裝載模組 [root@lyrebird root]# modprobe -r vfat vfat: Device or resource busy [root@lyrebird root]# lsmod | grep fat vfat 13132 1 fat 38744 0 [vfat] [root@lyrebird root]# umount /windows/D [root@lyrebird root]# modprobe -r vfat [root@lyrebird root]# modprobe -v --show vfat /sbin/insmod /lib/modules/2.4.21-37.0.1.EL/kernel/fs/fat/fat.o /sbin/insmod /lib/modules/2.4.21-37.0.1.EL/kernel/fs/vfat/vfat.o [root@lyrebird root]# lsmod | grep fat [root@lyrebird root]# modprobe -v vfat /sbin/insmod /lib/modules/2.4.21-37.0.1.EL/kernel/fs/fat/fat.o Using /lib/modules/2.4.21-37.0.1.EL/kernel/fs/fat/fat.o Symbol version prefix ' /sbin/insmod /lib/modules/2.4.21-37.0.1.EL/kernel/fs/vfat/vfat.o Using /lib/modules/2.4.21-37.0.1.EL/kernel/fs/vfat/vfat.o [root@lyrebird root]# lsmod | grep fat vfat 13132 0 (unused) fat 38744 0 [vfat] depmod 您剛才看到,在一些模組依賴於其他模組時,modprobe 可以處理多個模組的自動裝載。這些依賴關係記錄在適當核心的 /lib/modules 子目錄中的 modules.dep 檔案中(核心版本號由 uname -r 命令給出)。這個檔案以及幾個對映檔案是由 depmod 命令生成的。-a(表示 all)現在是可選的。 depmod 命令掃描當前核心的 /lib/modules 子目錄中的模組並更新依賴資訊。清單 10 給出一個例子以及這個操作修改的檔案。 清單 10. 使用 depmod 重新構建 modules.dep [root@lyrebird root]# date Thu Mar 16 10:41:05 EST 2006 [root@lyrebird root]# depmod [root@lyrebird root]# cd /lib/modules/`uname -r` [root@lyrebird 2.4.21-37.0.1.EL]# ls -l mod* -rw-rw-r-- 1 root root 54194 Mar 16 10:41 modules.dep -rw-rw-r-- 1 root root 31 Mar 16 10:41 modules.generic_string -rw-rw-r-- 1 root root 73 Mar 16 10:41 modules.ieee1394map -rw-rw-r-- 1 root root 1614 Mar 16 10:41 modules.isapnpmap -rw-rw-r-- 1 root root 29 Mar 16 10:41 modules.parportmap -rw-rw-r-- 1 root root 65171 Mar 16 10:41 modules.pcimap -rw-rw-r-- 1 root root 24 Mar 16 10:41 modules.pnpbiosmap -rw-rw-r-- 1 root root 122953 Mar 16 10:41 modules.usbmap [root@lyrebird 2.4.21-37.0.1.EL]# cd - /root 可以使用配置檔案 /etc/modules.conf 定製 modprobe 和 depmod 的行為。這常常用來為模組名指定別名和指定在裝載模組之後或解除安裝模組之前應該執行的命令。但是,還可以進行許多其他配置。清單 11 給出一個 /etc/modules.conf 示例。更多細節請參考 modules.conf 的手冊頁。 清單 11. /etc/modules 檔案示例 [root@lyrebird root]# cat /etc/modules.conf alias eth0 e100 alias usb-controller usb-uhci alias usb-controller1 ehci-hcd alias sound-slot-0 i810_audio post-install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 || : pre-remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || : 您還應該知道,某些系統使用另一個配置檔案 modprobe.conf,而其他系統將模組配置資訊儲存在 /etc/modules.d 目錄中。在某些系統上還可以發現稱為 /etc/modules 的檔案;這個檔案包含應該在引導時裝載的核心模組的名稱。 USB 模組 在將 USB 裝置熱插入 Linux 系統時,核心必須判斷要裝載哪些模組來處理這個裝置。這常常由一個熱插入指令碼來完成,這個指令碼使用 usbmodules 命令來尋找適當的模組。也可以自己執行 usbmodules(作為根使用者)。清單 12 給出一個例子。 清單 12. USB 模組 root@pinguino:~# lsusb Bus 005 Device 004: ID 1058:0401 Western Digital Technologies, Inc. Bus 005 Device 003: ID 054c:0220 Sony Corp. Bus 005 Device 001: ID 0000:0000 Bus 004 Device 001: ID 0000:0000 Bus 003 Device 001: ID 0000:0000 Bus 002 Device 001: ID 0000:0000 Bus 001 Device 003: ID 04b3:310b IBM Corp. Red Wheel Mouse Bus 001 Device 001: ID 0000:0000 root@pinguino:~# usbmodules --device /proc/bus/usb/005/003 usb-storage root@pinguino:~# usbmodules --device /proc/bus/usb/001/003 usbmouse usbhid 下一節講解如何構建和配置定製的核心
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-965591/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [教學] LPI 考試準備系列教程(轉)
- 測試基準資料的準備
- 基於Fedora Core 5的核心編譯的準備工作(轉)編譯
- 基於Fedora Core 3的核心編譯的準備工作(轉)編譯
- PMP備考經驗(轉)
- 軟體測試BUG參考標準
- 渲染程式的筆試準備筆試
- 走向世界的中國IT考試--軟體水平考試 (轉)
- 計算機軟體專業技術資格和水平考試備考要略(上) (轉)計算機
- 計算機軟體專業技術資格和水平考試備考要略(下) (轉)計算機
- 如何準備專案(轉)
- 效能測試準備工作例項
- 軟考備考
- PMP 考試心得分享(轉)
- 準備考英語四級你得知道這些
- 當一個測試工程師準備找工作,需要準備什麼?工程師
- Linux 核心準備升級到 Rust 1.77LinuxRust
- 產品經理筆試面試準備筆試面試
- PMP考試經驗談(五)(轉)
- PMP考試經驗談(一)(轉)
- PMP考試經驗談(二)(轉)
- 10G-OCM考試簡介--考試環境-考試大綱-考試安排
- iOS 系統分析(一) 閱讀核心準備知識iOS
- 計算機等級考試簡介、考試形式與等級要求 (轉)計算機
- [轉帖]sysbench基準測試
- 【手摸手玩轉 OceanBase 174】恢復前準備準備工作有哪些?
- JB的測試之旅-測試資料的準備/構造
- ERP的實施準備分析(轉)
- 作好安裝Linux的準備(轉)Linux
- 1999年全國計算機等級考試三級(A)、(B)筆試試卷答案及評分標準一 (轉)計算機筆試
- 介面測試要如何做資料準備
- 《QTP自動化測試進階》準備加印!QT
- RHCE認證考試分數計算(轉)
- ERP專案準備三要素(轉)
- 開學考試
- 優思學院|怎麼準備質量工程師的考證?工程師
- 圖解無人機試飛準備:QGroundControl的配置圖解無人機
- LoadRunner:壓力測試前的分析準備工作