版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、作者:日期:個人收集整理 勿做商業(yè)用途Linux 驅(qū)動框架及驅(qū)動加載本講主要概述 Linux 設(shè)備驅(qū)動框架、驅(qū)動程序的配置文件及常用 的加載驅(qū)動程序的方法 ;并且介紹 Red Hat Linux 安裝程序是如何加載 驅(qū)動的,通過了解這個過程, 我們可以自己將驅(qū)動程序放到引導(dǎo)盤 中;安裝完系統(tǒng)后 ,使用 kudzu 自動配置硬件程序。Linux 設(shè)備驅(qū)動概述1。內(nèi)核和驅(qū)動模塊操作系統(tǒng)是通過各種驅(qū)動程序來駕馭硬件設(shè)備 ,它為用戶屏蔽了 各種各樣的設(shè)備, 驅(qū)動硬件是操作系統(tǒng)最基本的功能, 并且提供統(tǒng)一 的操作方式 .正如我們查看屏幕上的文檔時,不用去管到底使用 nVIDIA 芯片,還是 ATI 芯片
2、的顯示卡,只需知道輸入命令后,需要 的文字就顯示在屏幕上 .硬件驅(qū)動程序是操作系統(tǒng)最基本的組成部 分,在 Linux 內(nèi)核源程序中也占有較高的比例。Linux 內(nèi)核中采用可加載的模塊化設(shè)計 ( LKMs ,Loadable KernelModules), 一般情況下編譯的Linux內(nèi)核是支持可插入式模塊的, 也就是將最基本的核心代碼編譯在內(nèi)核中, 其它的代碼可以選擇是在 內(nèi)核中,或者編譯為內(nèi)核的模塊文件。如果需要某種功能,比如需要訪問一個 NTFS 分區(qū),就加載相應(yīng) 的 NTFS 模塊。這種設(shè)計可以使內(nèi)核文件不至于太大 ,但是又可以支 持很多的功能,必要時動態(tài)地加載 .這是一種跟微內(nèi)核設(shè)計不太
3、一樣 , 但卻是切實(shí)可行的內(nèi)核設(shè)計方案。我們常見的驅(qū)動程序就是作為內(nèi)核模塊動態(tài)加載的,比如聲卡驅(qū)動和網(wǎng)卡驅(qū)動等,而Linux最基礎(chǔ)的驅(qū)動,如CPU、PCI總線、TCP/IP 協(xié)議、APM (高級電源管理)、VFS等驅(qū)動程序則編譯在內(nèi)核文件 中.有時也把內(nèi)核模塊就叫做驅(qū)動程序,只不過驅(qū)動的內(nèi)容不一定是 硬件罷了,比如ext3文件系統(tǒng)的驅(qū)動。理解這一點(diǎn)很重要。因此,加載驅(qū)動時就是加載內(nèi)核模塊。下面 來看一下有關(guān)模塊的命令,在加載驅(qū)動程序要用到它們:lsmod、modprob、insmod、rmmod、modinfo。Ismod列出當(dāng)前系統(tǒng)中加載的模塊,例如:#lsmod (與 cat /proc/
4、modules 得出的內(nèi)容是 一致的)Module Size Used by Not taintedradeon 115364 1 agpgart 56664 3 nls_iso8859-1 3516 1 (autoclean) loop 12120 3 (autoclear) smbfs 44528 2 (autoclean)parport_pc 19076 1 ( autoclean)lp 9028 0 (autoclean) parport 37088 1 (autocleanparport_pc lpautofs 13364 0 (autoclean(un used)ds 8704 2
5、 yen ta_socket 13760 2 pcmcia_core 57184 0 ds yenta_socke| tg3 55112 1 sg 36940 0 (autoclea n)sr_mod 18104 0(autoclea n) microcode 4724 0(autoclea n)ide scsi 12208 0 scsi_mod 108968 3sg sr_mod ide-scsj ide-cd 35680 0 cdrom 33696 0sr_mod ide cd nl s_cp936 124988 1(autoclea n)nl s_cp437 5148 1 (autocl
6、ea) vfat 130041(autoclea n)fat 38872 0 (autoclean vfat keybdev 2976 0 (unu sed)mousedev 5524 1 hid 22212 0 (un used) in put 5888 0 keybdev mousedev hidehcihcd 20104 0 (unused usb-uhci 26412 0(unused) usbcore 79392 1 hid ehci-hcdusb uhci ext3 91592 2 jbd 52336 2 ext3上面顯示了當(dāng)前系統(tǒng)中加載的模塊,左邊數(shù)第一列是模塊名,第 二列是該模
7、塊大小,第三列則是該模塊使用的數(shù)量。如果后面為unused,則表示該模塊當(dāng)前沒在使用.如果后面有autoclean則該模塊可以被rmmod -a命令自動清洗.rmmod -a命令會將 目前有autoclean的模塊卸載,如果這時候某個模塊未被使用,則將 該模塊標(biāo)記為autoclear。如果在行尾的括號內(nèi)有模塊名稱,則 括號內(nèi)的模塊就依賴于該模塊例如:I-cdrom 34144 0 sr_mod ide-cd其中ide cd及sr_mod模塊就依賴于cdrom模塊.系統(tǒng)的模塊文件保存在/lib/modules/2.4。XXX/kerne目錄中,根據(jù) 分類分別在fs、net等子目錄中,他們的互相依
8、存關(guān)系則保存在 /lib/modules/2。4.XXX/modules.dep 文件中。需要注意,該文件不僅寫入了模塊的依存關(guān)系,同時內(nèi)核查找模 塊也是在這個文件中,使用modprobe命令,可以智能插入模塊,它可 以根據(jù)模塊間依存關(guān)系,以及/etc/modules.conf文件中的內(nèi)容智能插 入模塊。比如希望加載ide的光驅(qū)驅(qū)動,則可運(yùn)行下面命令:# modprobe ide-cd此時會發(fā)現(xiàn),cdrom模塊也會自動插入。in smod也是插入模塊的命令,但是它不會自動解決依存關(guān)系,所以一般加載內(nèi)核模塊時使用的命令為 modprobeormmod可以刪除模塊,但是它只可以刪除沒有使用的模塊.
9、Modinfo用來查看模塊信息,如 modinfo -d cdrom,在Red HatLinux系統(tǒng)中,模塊的相關(guān)命令在 modutils的RPM包中。2. 設(shè)備文件當(dāng)我們加載了設(shè)備驅(qū)動模塊后,應(yīng)該怎樣訪問這些設(shè)備呢? Lin ux 是一種類Unix系統(tǒng),Unix的一個基本特點(diǎn)是 一切皆為文件”它抽 象了設(shè)備的處理,將所有的硬件設(shè)備都像普通文件一樣看待, 也就是 說硬件可以跟普通文件一樣來打開、關(guān)閉和讀寫。系統(tǒng)中的設(shè)備都用一個設(shè)備特殊文件代表,叫做設(shè)備文件,設(shè)備 文件又分為Block (塊)型設(shè)備文件、Character (字符)型設(shè)備文件和 Socket (網(wǎng)絡(luò)插件)型設(shè)備文件。Block設(shè)
10、備文件常常指定哪些需要 以塊(如512字節(jié))的方式寫入的設(shè)備,比如IDE硬盤、SCSI硬盤、光 驅(qū)等。而Character型設(shè)備文件常指定直接讀寫,沒有緩沖區(qū)的設(shè)備 ,比 如并口、虛擬控制臺等.Socket (網(wǎng)絡(luò)插件)型設(shè)備文件指定的是網(wǎng)絡(luò) 設(shè)備訪問的BSD socket接口 .#ls l /dev/hda /dev/videoO/dev/logbrwrw- 1 root disk 3, 0 Sep 15 200/dev/hdasrw rw-rw 1 root root 0 Jun 3 16:55 /dev/logcrw1 root root 81, 0 Sep 15 2003 /dev/v
11、ideoO上面顯示的是三種設(shè)備文件,注意它們最前面的字符,Block型設(shè)備為b,Character型設(shè)備為c,Socket設(shè)備為s。由此可以看出,設(shè)備文件都放在/dev目錄下,比如硬盤就是用/dev/hd*來表示,/dev/hda表示第一個IDE接口的主設(shè)備,/dev/hda1表示第一個硬盤上的第一個分區(qū);而/dev/hdc表示第二個IDE接口的 主設(shè)備??梢允褂孟旅婷睿? dd if二/dev/hda of二/root/a。img bs= 446 couni=1把第一個硬盤上前446個字節(jié)的MBR信息導(dǎo)入到a°img文件中。對于Block和Character型設(shè)備,使用主(Maj
12、or)和輔(minor)設(shè) 備編號來描述設(shè)備.主設(shè)備編號來表示某種驅(qū)動程序,同一個設(shè)備驅(qū)動 程序模塊所控制的所有設(shè)備都有一個共同的主設(shè)備編號,而輔設(shè)備編號用于區(qū)分該控制器下不同的設(shè)備,比如,/dev/hda1 (block 3/1 )、 /dev/hda2( block 3/2 )和/dev/hda3( block3/3 )都代表著同一塊硬盤的 三個分區(qū),他們的主設(shè)備號都是 3,輔設(shè)備號分別為1、2、3。這些 設(shè)備特殊文件用mknod命令來創(chuàng)建:# mknod harddisk b 3 0我們就在當(dāng)前位置創(chuàng)建出一個與/dev/hda一樣的、可以訪問第一個IDE設(shè)備主硬盤的文件,文件名叫做har
13、ddisk。使用下面命令可以查看設(shè)備編號:#file /dev/hda/dev/hda: block special (3/0)其中Block代表/dev/hda是系統(tǒng)的Block型(塊型)設(shè)備文件,它的主設(shè)備編號為3,輔設(shè)備編號為0。-1 root#ls -l /dev/hda /dev/hdb brw rwdisk 3,0 Sep 15 2003 /dev/hdabrw rw- 1root disk 3,64 Sep 15 2003 /dev/hdb使用Is l也可以看到設(shè)備編號,/dev/hdb代表第一個IDE接口 的從設(shè)備(Slave)也是Block設(shè)備,編號為(3/64),還有另外一
14、種設(shè) 備文件是/dev/tty興。使用如下命令:# echo ” hello tty1 ” >tydev將字符串“hello tty1輸出到/dev/tty1代表的第一個虛擬控制臺上, 此時按“Alt + F1可以看到該字符出現(xiàn)在屏幕上,這個特殊的文件就 代表著我們的第一虛擬控制臺。 _# file /dev/tty1/dev/tty1: character special (4/1)由上可以看到,它的類型為 Character型(字符型)設(shè)備文件,主 設(shè)備號為4,輔設(shè)備號為1。同樣,/dev/tty2代表著第二個虛擬控制 臺,是Character設(shè)備 編號為(4/2)。當(dāng)將/dev/c
15、drom加載到/mnt/cdrom中時,只要訪問/mnt/cdrom系 統(tǒng)就會自動引入到/dev/cdrom對應(yīng)的驅(qū)動程序中,訪問實(shí)際的數(shù)據(jù)。有關(guān)設(shè)備文件的編號可以看內(nèi)核文檔/usr/src/linux 2.*/Documentation/devices。txt 文件(在 Kernel 的源文 件解包后的Documentation目錄中),其中詳細(xì)敘述了各種設(shè)備文件編 號的意義.3。使用/proc目錄中的文件監(jiān)視驅(qū)動程序的狀態(tài)個人收集整理勿做商業(yè)用途通過設(shè)備文件怎樣訪問到相應(yīng)的驅(qū)動程序呢?它們中間有一個 橋梁,那就是proc文件系統(tǒng),它一般會被加載到/proc目錄。訪問設(shè) 備文件時,操作系統(tǒng)通
16、常會通過查找/proc目錄下的值,確定由哪些驅(qū) 動模塊來完成任務(wù)。如果proc文件系統(tǒng)沒有加載,訪問設(shè)備文件時 就會出現(xiàn)錯誤。Linux系統(tǒng)中proc文件系統(tǒng)是內(nèi)核虛擬的文件系統(tǒng),其中所有的 文件都是內(nèi)核中虛擬出來的,各種文件實(shí)際上是當(dāng)前內(nèi)核在內(nèi)存中的 參數(shù)。它就像是專門為訪問內(nèi)核而打開的一扇門,比如訪問 /proc/cpuinfo文件,實(shí)際上就是訪問目前的 CPU的參數(shù),每一次系統(tǒng) 啟動時系統(tǒng)都會通過/etc/fstab中設(shè)置的信息自動將proc文件系統(tǒng)加 載到/proc目錄下:# grep proc /etc/fstab none /proc proc defaults 00此外,也可以通
17、過mount命令手動加載:# mount -t proc none /proc通過/proc目錄下的文件可以訪問或更改內(nèi)核參數(shù),可以通過/proc目錄查詢驅(qū)動程序的信息。下面先讓我們看一下/proc目錄中的信息:# ls /proc1 4725 5032 5100 5248 5292 cryptokcore partitio ns14 4794 5044 5110 5250 5293devices kmsg pci2 4810 5075 5122 5252 5295 dm; ksyms self3 4820 5079 5132 5254 5345 driver loadavg slabinfo
18、4 4831 5080 5151 5256 6 execdomains locks stat4316 4910 5081 5160 5258 fb lvm swaps4317 4912 5082 5170 5262 70 filesystems mdstat sys4318 4924 5083 5180 5271 fs memi nfo sysrq-trigger4319 4950 5084 5189 528' 9 ide misc sysvipc4620 4963 5085 5232 5288 apm in terrupts modules tty4676 5 5086 5242 5
19、289 bus iomem mounts uptime4680 5005 5087 5244 5290 cmdli ne ioports mtrr versio n4706 5018 5088 5246 5291 cpu info irq net需要知道的是,這些文件都是實(shí)時產(chǎn)生的虛擬文件,訪問它們就是 訪問內(nèi)存中真實(shí)的數(shù)據(jù)這些數(shù)據(jù)是實(shí)時變化產(chǎn)生的,可以通過以下命 令來查看文件的具體值:# cat /proc/i nterruptsCPU00: 50662 XTPICtimer1:3 XT-PIC keyboard2: 0 XTPICcascade5: 618 XT-PIC ehci-hcd,
20、 eth18 1 XT PIC rtc9: 0 XT PIC usb uhci, ust uhci11: 50 XT PIC usb uhci, eth012: 16 XT PIC PS/2 Mouse14:8009 XTPIC ide015:0 XT PIC ideINMI : OERR: 0其它文件的含意見表1所示。/proc/sys目錄下的文件一般可以直接更改,相當(dāng)于直接更改內(nèi)核 的運(yùn)行參數(shù),例如:qr# echo 1 > /proc/sys/net/ipv4/ip_forward上面代碼可以將內(nèi)核中的數(shù)據(jù)包轉(zhuǎn)發(fā)功能打開。另外,Linux系統(tǒng)中提供一些命令來查詢系統(tǒng)的狀態(tài),如fre
21、e可以 查看目前的內(nèi)存使用情況,ide_info可以查看ide設(shè)備的信息,例如: # ide_info /dev/had。類似的命令還有scsi_info,可以查看SCSI設(shè)備 的信息。這些命令一般也是查詢/proc目錄下的文件,并返回結(jié)果.系統(tǒng)初始化過程驅(qū)動程序的安裝在Linux安裝過程中,系統(tǒng)上的硬件會被檢測,基于檢測到的結(jié) 果安裝程序會決定哪些模塊需要在引導(dǎo)時被載入。Red Hat的安裝程序?yàn)閍naconda它提供了自動檢測硬件,并且安裝的機(jī)制。但是,如果計算機(jī)內(nèi)的某些硬件沒有默認(rèn)的驅(qū)動程序,比如一塊 SCSI卡,我們可以在啟動后的boot提示符下,輸入“l(fā)inux dd,在加載 完內(nèi)核
22、后,系統(tǒng)會自動提示插入驅(qū)動盤,這時就有機(jī)會把該硬件的 Linux驅(qū)動程序裝入。如果在安裝系統(tǒng)時,某種硬件總是因?yàn)橹袛鄾_突(ISA總線的設(shè) 備較常見,比如一塊ISA網(wǎng)卡)沒法正常驅(qū)動,或者是缺少驅(qū)動程序, 那么可以在boot提示符下輸入“l(fā)inux noprobe。在這種模式下,安裝 程序不會自動配置找到的硬件,可以自己來選擇現(xiàn)有驅(qū)動 ,配置驅(qū)動 程序的參數(shù),或者選擇用光盤或軟盤加載驅(qū)動程序。定制引導(dǎo)盤系統(tǒng)啟動時是如何加載驅(qū)動的?下面讓我們來看一下Red Hat的安裝光盤是怎樣引導(dǎo)的。當(dāng)Linux安裝光盤啟動時,加載位于光盤上 isolinux中的內(nèi)核文件vmlinuz,內(nèi)核運(yùn)行完畢后,又將in
23、itrd。img 的虛擬文件系統(tǒng)加載到內(nèi)存中。這個文件為ext2文件系統(tǒng)的鏡像,經(jīng)過gzip壓縮,可以通過以下步驟查看該鏡像中的內(nèi)容:# mount /mn t/cdrom# mkdir /mn t/imgdir# gun zip </mnt/cdrom/isolinux/initrd。img > /ext2img # mount -t ext2o loop /ext2img /mnt/imgdir # cd /mnt/imgdir # lsFbi n dev/etc/li nu xrclost+fo un d/modules/proc/sbi n/tmp/var/# cd mod
24、ules# ls module infomodules。cgzmodulesdepmodules.pcimappcitable其中modules.dep為模塊的注冊文件,同時有各種模塊的依存關(guān) 系。modules。cgz為cpio的打包文件,實(shí)際的各種驅(qū)動模塊就在該 文件中。我們可以通過以下命令解包:# cpio idmv < modules.cgz由此可以看到,解包出來的目錄 2。4。21-4XXX。進(jìn)入該目錄下的i386目錄,就可以看到當(dāng)前啟動盤中支持的所以驅(qū)動程序:# Is 3c59x。o3wxxxx。oaic79xx。o若希望在系統(tǒng)中加入需要的驅(qū)動程序,可以相應(yīng)地修改這些文件,比如在modules.dep中加入該模塊的名字和依存關(guān)系,將編譯
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二四年度新型鋁材特種定制購銷合同范本3篇
- 二零二五年度車輛抵押借款合同(含車輛保險理賠)4篇
- 二零二五版城市景觀照明工程設(shè)計施工合同范本4篇
- 專項(xiàng)服務(wù)協(xié)議知識產(chǎn)權(quán)維護(hù)說明一
- 二零二五年度家電租賃服務(wù)合同與2025年度維修維護(hù)保障合同4篇
- 2024年企業(yè)主要負(fù)責(zé)人安全培訓(xùn)考試題(培優(yōu)A卷)
- 二零二五年度環(huán)保型變壓器研發(fā)、生產(chǎn)及安裝合作合同3篇
- 23年-24年項(xiàng)目管理人員安全培訓(xùn)考試題【完整版】
- 2023年-2024年項(xiàng)目安全培訓(xùn)考試題附完整答案【歷年真題】
- 二零二五版房地產(chǎn)租賃合同擔(dān)保及售后服務(wù)保障范本4篇
- 初級中學(xué)語文教師資格考試學(xué)科知識與教學(xué)能力試題及解答參考(2024年)
- 《帶一本書去讀研:研究生關(guān)鍵學(xué)術(shù)技能快速入門》筆記
- 人教版八年級數(shù)學(xué)下冊舉一反三專題17.6勾股定理章末八大題型總結(jié)(培優(yōu)篇)(學(xué)生版+解析)
- 2024屆上海高考語文課內(nèi)古詩文背誦默寫篇目(精校版)
- DL-T5024-2020電力工程地基處理技術(shù)規(guī)程
- 2024年度-美團(tuán)新騎手入門培訓(xùn)
- 初中數(shù)學(xué)要背誦記憶知識點(diǎn)(概念+公式)
- 駕照體檢表完整版本
- 農(nóng)產(chǎn)品農(nóng)藥殘留檢測及風(fēng)險評估
- 農(nóng)村高中思想政治課時政教育研究的中期報告
- 20100927-宣化上人《愣嚴(yán)咒句偈疏解》(簡體全)
評論
0/150
提交評論