核心管理概述(轉貼)
這篇檔案看了好多次,覺得非常不錯。
作者:北南南北
來自:LinuxSir.Org
摘要:本文講述與核心操作有關的基礎知識;比如編譯核心,裝載、移除核心模組,檢視模組資訊等;本文涉及相關的命令有modprobe、
insmod、depmod、rmmod、modinfo等;
一、什麼是核心;
核心官方:
核心洋文用 kernel,我剛才翻了一下詞典,kernel
中文意思是核心、核心、中心、精髓的意思;也是果仁、果核的意思。從字面理解,kernel
是一事物的中心,植物的果實最重要的也是果仁和果核;:) 由此我們可以推斷核心是作業系統的中心。
我們知道Linus Torvalds 開發了Linux ,其實他開發的就是核心,按核心官方主頁的理解,這個核心就是Linux
;其它的擴充套件和應用都是圍繞核心而展開的。所有Linux應用程式都會和核心發生直接或者間接的接觸;比如硬體需要核心支援,網路的通訊
也需要核心支援;檔案系統更需要核心支援... ...
直言我的能力的不行,如果您想了解和學習解作業系統,我寫的教程只是初級應用,理論性的東西不是一言兩語能說的清楚的,更不是應用者
能說的清楚的。
二、為什麼需要編譯核心和管理核心
硬體是需要核心支援才行,有些硬體的支援沒有被編入核心,這也需要我們重編核心;核心的包含的不僅僅是裝置的驅動,還有其它的內容,
比如網路協議的支援,防火牆的支援... ...
比如iptables的實現,有些功能是需要核心支援的,如果核心與iptables相關的內容沒有被編入,iptables 相關的功能就無法實現;
三、核心編譯方法
請參考:《編譯核心操作流程 ──為新手指南》
四、管理核心模組的相關命令
1、lsmod 列加以掛載的核心模組;
lsmod 是列出目前系統中已載入的模組的名稱及大小等;另外我們還可以檢視 /proc/modules ,我們一樣可以知道系統已經載入的模組;
[root@localhost beinan]# lsmod
2、modinfo 檢視模組資訊;
modinfo 可以檢視模組的資訊,透過檢視模組資訊來判定這個模組的用途;
[root@localhost beinan]# moinfo 模組名
舉例:
[root@localhost beinan]# modinfo ne2k-pci
filename: /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/ne2k-pci.ko
author: Donald Becker / Paul Gortmaker
description: PCI NE2000 clone driver
license: GPL
parmtype: debug:int
parmtype: options:array of int
parmtype: full_duplex:array of int
parm: debug:debug level (1-2)
parm: options:Bit 5: full duplex
parm: full_duplex:full duplex setting(s) (1)
vermagic: 2.6.11-1.1369_FC4 686 REGPARM 4KSTACKS gcc-4.0
depends: 8390
alias: pci:v000010ECd00008029sv*sd*bc*sc*i*
alias: pci:v00001050d00000940sv*sd*bc*sc*i*
alias: pci:v000011F6d00001401sv*sd*bc*sc*i*
alias: pci:v00008E2Ed00003000sv*sd*bc*sc*i*
alias: pci:v00004A14d00005000sv*sd*bc*sc*i*
alias: pci:v00001106d00000926sv*sd*bc*sc*i*
alias: pci:v000010BDd00000E34sv*sd*bc*sc*i*
alias: pci:v00001050d00005A5Asv*sd*bc*sc*i*
alias: pci:v000012C3d00000058sv*sd*bc*sc*i*
alias: pci:v000012C3d00005598sv*sd*bc*sc*i*
alias: pci:v00008C4Ad00001980sv*sd*bc*sc*i*
srcversion: 6ACE95F441CD26DF9DC31C2
上面的例子是我們檢視 ne2k-pci 這個模組的資訊,透過檢視,我們知道ne2k-pci 模組是8029網路卡(PCI NE2000 clone
driver)的驅動;模組是位於 /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/ 中ne2k-pci.ko
我們現在常用的網路卡也有8139的,8139網路卡所用的驅動是 8139too ;查檢視?
[root@localhost beinan]# modinfo 8139too
我們再查查vfat 和ntfs 的模組資訊;
[root@localhost beinan]# modinfo vfat
[root@localhost beinan]# modinfo ntfs
自己嘗試一下;
注意: 模組名是不能帶有字尾的,我們透過modprobe -l 所看到的模組,都是帶有.ko 或.o字尾;
3、modprobe 掛載新模組以及新模組相依賴的模組
modprobe 我們常用的功能就是掛載模組,在掛載某個核心模組的同時,這個模組所依賴的模組也被同時掛載;當然modprobe
也有列出核心所有模組,還有移除模組的功能;下在我們舉個例子說一說我們們常用的功能和引數;
modprobe [-v] [-V] [-C config-file] [-n] [-i] [-q] [-o
modprobe -r [-n] [-i] [-v]
modprobe -l -t
上面是modprobe 的用法,具體更為詳細的幫助,我們可以檢視 man modprobe ;
[root@localhost beinan]# modprobe -c
modprobe -c 可以檢視modules 的配置檔案,比如模組的別名是什麼等;
[root@localhost beinan]# modprobe -l
modprobe -l 是列出核心中所有的模組,包括已掛載和未掛載的;透過modprobe -l
,我們能檢視到我們所需要的模組,然後根據我們的需要來掛載;其實modprobe -l 讀取的模組列表就位於 /lib/modules/'uname -r'
目錄中;其中uname -r 是核心的版本;
[root@localhost beinan]# uname -r
2.6.11-1.1369_FC4
[root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/
透過上面的命令,自己試試看?
[root@localhost beinan]# modprobe 模組名 注:掛載一個模組;
舉例:
[root@localhost beinan]# modprobe ne2k-pci 注:掛載 ne2k-pci 模組;
[root@localhost beinan]# modprobe vfat 注:掛載vfat 模組
[root@localhost beinan]# modprobe ntfs 注:掛載ntfs 模組
[root@localhost beinan]# lsmod 注:列出已掛載模組, 我們會看到ne2k-pci ,vfat ,ntfs的模組 ;
注意: 模組名是不能帶有字尾的,我們透過modprobe -l 所看到的模組,都是帶有.ko 或.o字尾;
[root@localhost beinan]# modprobe -r 模組名 注:移除已載入的模組,和rmmod 功能相同;
注意: 模組名是不能帶有字尾的,我們透過modprobe -l 所看到的模組,都是帶有.ko 或.o字尾;
[root@localhost beinan]# modprobe -r 模組名
舉例:
[root@localhost beinan]# modprobe -r ne2k-pci
就說這麼多吧,更為詳細的還是用 man modprobe 來檢視和嘗試;
4、rmmod 移除已掛載模組;
命令格式:
rmmod 模組名
注意: 模組名是不能帶有字尾的,我們透過modprobe -l 所看到的模組,都是帶有.ko 或.o字尾;
舉例:
[root@localhost beinan]# rmmod vfat 注:移除已掛載的模組vfat
5、depmod 建立模組依賴關係的列表
這個模組管理工具是建立模組依賴關係的列表,有幾個引數我們注意一下就行了,目前的的Linux
發行版所用的核心是2.6x版本,是自動解決依賴關係,所以這個命令知道就行了;模組之前也有依賴關係,比如我們想驅動USB
行動硬碟,目前有兩種驅動,一種是udev ,在核心中有,但目前不太穩定;另一種辦法是用usb-storage驅動,而usb-storage
依賴的模組是scsi 模組,所以我們要用usb-storage 的模組,也得把scsi 編譯安裝;
再舉個例子:sata的硬碟,在Linux中的裝置表示的是/dev/sd* ,比如 /dev/sda,/dev/sdb 等... 系統要驅動
sata硬碟,則需要把sata在核心中選中,或編譯成模組,或內建於核心之中,在此同時,還需要在核心中選中ide ,scsi 的支援等;
depmod 工具的洋文原意:depmod — program to generate modules.dep and map files.(我譯的:為modules.dep
檔案或對映檔案建立依賴關係)
[root@localhost beinan]# depmod -a 注:為所有列在/etc/modprobe.conf 或/etc/modules.conf
中的所有模組建立依賴關係,並且寫入到modules.dep檔案;
[root@localhost beinan]# depmod -e 注:列出已掛載但不可用的模組;
[root@localhost beinan]# depmod -n 注:列出所有模組的依賴關係,但僅僅是輸出出來 (Write the dependency file on stdout only)
注:modules.dep 位於 /lib/modules/核心版本 目錄
比如 Fedora Core 4.0 中,系統預設的核心:
[root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/modules.dep
/lib/modules/2.6.11-1.1369_FC4/modules.dep
6、insmod 掛載模組;
insmod 這個工具,和modprobe 有點類似,但功能上沒有modprobe 強,modprobe
在掛載模組是不用指定模組檔案的路徑,也不用帶檔案的字尾.o 或.ko ;而insmod
需要的是模組的所在目錄的絕對路徑,並且一定要帶有模組檔名字尾的(modulefile.o 或modulesfile.ko );
對於這個工具,我們只是介紹一下, 並不推薦使用。因為模組有依賴關係,對於新手來說,可能不知道這個模組依賴和哪個模組依賴;
舉例:
[root@localhost beinan]# insmod /lib/modules/2.6.11-1.1369_FC4/kernel/drivers/net/tg3.ko
我們要到 /lib/modules/核心版本 uname -r 的命令輸出/kernel/drivers
中找相對應的模組才行,要有絕對路徑,而且必須要用到檔名的全稱,不能把檔名的字尾省略;
五、與核心模組載入相關的配置檔案;
1、模組的配置檔案 modules.conf 或 modprobe.conf
核心模組的開機自動掛載模組一般是位於一個配置檔案,一般的Linux發行版本都有 /etc/modules.conf 或 /etc/modprobe.conf
。比如Fedora Core 4.0 核心模組開機自動載入檔案是 /etc/modprobe.conf
;在這個檔案中,一般是寫入模組的載入命令或模組的別名的定義等;比如我們在modules.conf 中可能會發行類似的一行 ;
alias eth0 8139too
而8029的網路卡應該是
alias eth0 ne2k-pci
這樣系統啟動的時候,首先會modprobe 8139too ,然後再為8139too 指定別名為 eth0,然後我們在登入的時候,用 ifconfig
就會檢視到網路卡的IP 等情況,當然您得為網路卡設定IP 才行;
一般的情況下,modproe.conf 或modules.conf的內容
是我們用相應的硬體配置工具而生成的;如果您的硬體驅動是沒有被核心支援,您自己到硬體的廠商下載而來的驅動。一般的情況下都有安裝
和幫助檔案。他們的驅動在配置時,他會寫入硬體的支援到modules.conf 或modprobe.conf 檔案中。
再比如我們的音效卡在modules.conf 或modprobe.conf 中也有相應的內容,這是由alsaconf
配置工具生成的,明白了吧;同理網路卡在modprobe.conf 或modules.conf中的內容也是由網路卡的配置工具而來的。
有些硬體是以核心模組的方式驅動的,模組一旦載入上就能用,也沒有什麼配置工具,比如vfat 和ntfs
的支援;如果是硬體驅動不以模組的方式支援,而是直接編入核心,也不會用在modprobe.conf 或 modules.conf 中加入什麼內容;
如果您有些模組不能開機載入,您想讓一些模組加機自動載入,就可以把modprobe 模組 直接寫入配置檔案;
2、核心模組其它配置檔案
核心模組的其它配置檔案還是需要了解的,比如 /lib/modules/核心版本目錄下的幾個檔案;瞭解一下就行;比如:
[root@localhost beinan]# uname -r
2.6.11-1.1369_FC4
[root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/
build misc modules.ccwmap modules.ieee1394map modules.isapnpmap modules.symbols source
kernel modules.alias modules.dep modules.inputmap modules.pcimap modules.usbmap
六、硬體驅動在系統中的目錄;
硬體驅動在核心中以模組支援的目錄;
硬體驅動是必須由核心支援的,無論是我們自己安裝驅動,還是核心自帶的驅動都是如此。硬體驅動如果是以核心模組支援的,驅動目錄位於
: /lib/modules/核心版本/kernel/目錄 或 /lib/modules/核心版本/kernel/drivers 目錄中;
[root@localhost beinan]# uname -r
2.6.11-1.1369_FC4
[root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/kernel
arch crypto drivers fs lib net sound
注:只有驅動在核心中以模組的方法支援,驅動才位於
/lib/modules/相應的目錄;如果是直接置入核心的,不會出現在/lib/modules驅動相關的目錄;
七、自己編譯驅動的辦法;
如果是硬體廠商或者開源社群提供的驅動(沒有整合在核心原始碼中的),編譯驅動過程一般是./configure ;make;make install
,有時程式不提供./configure ,我們可以make或make install ,或者執行make;make install ;如果不能make install
,則需要我們自己複製.o或者.ko檔案到 /lib/modules/核心版本/kernel/目錄 或 /lib/modules/核心版本/kernel/drivers
目錄中相應的驅動目錄;
這個還是自己嘗試吧,說也說不清楚,遇到問題後就知道怎麼弄了;具體的還是驅動的REAME和INSTALL為準;
現在大多驅動都是在編譯安裝時,都自動複製.o或.ko 檔案到核心模組目錄,大多不用我們自己動手複製過去。如果您嘗試編譯安裝音效卡驅動
alsa-drivers 就會明白我所說的意思;
如果是我們透過重編核心來解決驅動問題,可以檢視/usr/src/目錄中的核心原始碼目錄中的 Documentation 的REAME
;所有的幫助檔案都在那裡;
後記:
核心編譯對新手來說是有點困難,我寫過類似的文件也有好多篇,但是不是新手弟兄從中能學到點什麼,我不太知道;畢竟我寫的文件在核心
檔案告訴一些基本的流程和注意的事項;核心的配置只有多實踐才能學會,在配置核心時,要多看看幫助;
核心模組管理方面我在本文中已經寫了一些,大體上就這些,如果想要知道更為詳細的,只能是自己看man
和--help了,我寫文件也無非是檢視這些東西,然後實踐再寫給大家;我能寫出來,我想您的能力並不一定比我差,應該超出我才對;
相關文件:
1、《編譯核心操作流程 ──為新手指南》
2、《核心管理概述》
3、《用ALSA驅動音效卡流程詳解》
4、 《Fedora / Redhat 軟體包管理指南》
5、核心主站:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/312079/viewspace-245482/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 核心管理概述(轉載)
- SQLServer會話數管理(轉貼)SQLServer會話
- 專案管理過程概述 (轉)專案管理
- spring 核心概述Spring
- IT組織管理的核心-知識管理(轉)
- 簡單管理的核心真理(轉)
- 旅店管理系統中的類的概述 (轉)
- 概述javascript部分核心機制JavaScript
- 概述nodejs核心機制NodeJS
- ORACLE 資料庫管理員的職責[轉貼]Oracle資料庫
- Linux2.6 核心的 Initrd 機制解析(1)(轉貼好文)Linux
- Linux2.6 核心的 Initrd 機制解析(4)(轉貼好文)Linux
- 質量管理的核心工作(轉載)
- 管理表空間(表空間的屬性)轉貼
- FreeBSD VM核心記憶體管理(轉)記憶體
- linux核心系列之程式管理(轉)Linux
- Linux 管理員手冊(2)--目錄樹概述(轉)Linux
- 概述nodejs模組系統核心原理NodeJS
- 探索ring0之核心概述
- ORACLE事務管理概述Oracle
- ORACLE lock 轉貼Oracle
- 轉貼crontab 命令
- Linux 管理員手冊(1)--Linux系統概述(轉)Linux
- 前端 JavaScript 複製貼上的奧義——Clipboard 物件概述前端JavaScript物件
- 轉spring概述Spring
- 【原創】xenomai核心解析--實時IPC概述AI
- 01記憶體管理-概述記憶體
- AIX儲存管理(一)概述AI
- WMI Series 1:實現Windows管理的各種技術概述 (轉)Windows
- 記憶體管理 記憶體管理概述記憶體
- 轉貼_字串分隔_拆分字串
- [轉貼]Skip Scan IndexIndex
- 轉貼_roger大師_
- ORACLE系統概述(轉)Oracle
- 儲存概述_轉摘
- Mobile Media API概述 (轉)API
- 資料探勘概述 (轉)
- xclip 貼上管理工具