欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    Linux操作系统的驱动框架及驱动加载.docx

    • 资源ID:1466371       资源大小:21.24KB        全文页数:11页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Linux操作系统的驱动框架及驱动加载.docx

    1.inux驱动框架及驱动加载本讲主要概述1.inUX设备驱动框架、驱动程序的配置文件及常用的加载驱动程序的方法:并且介绍RedHat1.inux安装程序是如何加载驱动的,通过了解这个过程,我们可以自己将驱动程序放到引导盘中:安装完系统后,运用kudzu臼动配置硬件程序。1.inux设备驱动概述1 .内核和驱动模块操作系统是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备,驱动硬件是操作系统最基本的功能,并且供应统一的操作方式。正如我们查看屏箱上的文档时,不用去管究竟运用nVIDIA芯片,还是ATl芯片的显示卡,只需知道输入吩咐后,须要的文字就显示在屏幕上。硬件驱动程序是操作系统最基本的组成部分,在1.inUX内核源程序中也占有较高的比例。1.inux内核中采纳可加我的模块化设计(1.KMs,1.oadableKernelM(XluIcs),一般状况卜编译的1.inUX内核是支持可插入式模块的,也就是将最基本的核心代码编译在内核中,其它的代码可以选择是在内核中,或者编译为内核的模块文件。假如须要某种功能,比如须要访问一个NTFS分区,就加载相应的NTFS模块。这种设计可以使内核文件不至于太大,但是又可以支持许多的功能,必要时动态地加载。这是一种跟微内核设计不太一样,但却是切实可行的内核设计方案。我们常见的驱动程序就是作为内核模块动态加载的,比如声卡驱动和网卡驱动等,而1.inux最基础的驱动,如CPU、PCl总线、TCP/IP协议、APM(高级电源管理)、VFS等驱动程序则编译在内核文件中。有时也把内核模块就叫做驱动程序,只不过驱动的内容不肯定是硬件罢了,比如ext3文件系统的驱动。理解这一点很重要。因此,加载驱动时就是加载内核模块。下面来看一下有关模块的吩咐,在加载驱动程序要用到它们:1Smod、modprobinsmod、rmmod、modinfoIsmod列出当前系统中加载的模块,例如:#1snod(与catprocmo<iules得出的内容是"样的)ModuleSizeUsedbyNotIaintedradeon1153641agpgarl566643nlsjso8859-l35161(autoclean)loop121203(autoclean)srnbfs445282(autoclean)parport-pc19076I(autoclean)lp90280(autoclean)parport370881(autoclean)|parport_pclpaulofs13364O(auloclean)(unused)ds87042yenta-socket137602pcmcia-core571840dsyenta_sockettg3551121sg369400(autoclean)sr_mod181040(autoclean)microcode47240(autoclean)ide-scsi122080scsi-mo<i1089683sgsjnodide-scsiide-cd356800cdrom336960lsr_mo<iide-cdnls.cp936124988I(autoclean)nls-cp43751481(autoclean)vfat13004I(autoclean)fat388720(autoclean)vfatJkeylxlev29760(unused)mousedev5524Ihid222120(unused)input58880keybdevmousedevhidehci-hcd201040(unused)usb-uhci264120(unused)usbcore79392Ihidehci-hcdusb-uhciexl3915922jbd523362ext3上面显示了当前系统中加载的模块,左边数第一列是模块名,其次列是该模块大小,第三列则是该模块运用的数量。假如后面为UnuSed,则表示该模块当前没在运用。假如后面有autoclean,则该模块可以被rmmod-a吩咐自动清洗。rmmod-a吩咐会将目前有autoclean的模块卸载,假如这时候某个模块未被运用,则将该模块标记为autodean。假如在行尾的括号内有模块名称,则括号内的模块就依竟于该模块。例如:cdrom341440sr_modidc-cd其中ide-cd及SJmod模块就依靠于cdrom模块。系统的模块文件保存在libmodules24.XXXkeme书目中,依据分类分别在fs、net等子书目中,他们的相互依存关系则保存在libmodules2.4.XXXmodules.dep文件中。须要留意,该文件不仅写入了模块的依存关系,同时内核查找模块也是在这个文件中,运用modprobe吩咐,可以智能插入模块,它可以依据模块间依存关系,以及eicmodulesconf文件中的内容智能插入模块。比如希望加载ide的光驱驱动,则可运行下面吩咐:#modprobeideYd此时会发觉,Cdrom模块也会FI动插入。insmod也是插入模块的吩咐,但是它不会H动解决依存关系,所以一般加载内核模块时运用的吩附为nodprobe。rmmod可以删除模块,但是它只可以删除没有运用的模块。Modinfo用来查看模块信息,如modinfo-dcdrom,在RedHat1.inux系统中,模块的相关吩咐在modutils的RPM包中。2.设备文件当我们加载了设备驱动模块后,应当怎样访问这些设备呢?1.inux是-种类UniX系统,UniX的个基本特点是“一,切皆为文件“,它抽象了设备的处理,将全部的硬件设备都像一般文件一样看待,也就是说硬件可以跟般文件一样来打开、关闭和读写。系统中的设备都用一个设备特别文件代表,叫做设备文件,设备文件乂分为BIOCk(块)型设备文件、Chanicter(字符)型设备文件和SOCket(网络插件)型设备文件。Bk)Ck设备文件经常指定哪些须要以块(如512字节)的方式写入的设备,比如IDE硬盘、SCSI硬盘、光驱等。而CharaCter型设备文件常指定干脆读写,没有缓冲区的设备,比如并口、虚拟限制台等。Socket(网络插件)型设备文件指定的是网络设备访问的BSDSoCket接I-I。#Is-1devhdaZdevZvideoOdevlogb11v-rur-1rootdisk3,0Sep152003ZdcvZhdasrw-rw-rw-1rootroot0Jun316:55devlogc11rIrootroot81,0Sep152003ZdcvZvideoO上面显示的是三种设备文件,留意它们最前面的字符,BloCk型设备为b,CharaCIer型设备为c,SOCkel设备为s.由此可以看出,设备文件都放在dev节目下,比如硬盘就是用devhd"来表示,devhda表示第一个IDE接口的主设备,devhda1表示第一个硬盘上的第一个分区:而devhdc表示其次个IDE接口的主设备。可以运用下面吩咐:#ddif=devldaof=roota.imgbs=446count=1把第一个硬盘上前446个字节的MBR信息导入到a.img文件中。对于BloCk和CharaCter型设备,运用主(Major)和辅(minor)设备编号来描述设备。主设备编号来表示某种驱动程序,同一个设备驱动程序模块所限制的全部设备都有一个共同的主设备编号,而辅设备编号用于区分该限制器下不同的设备,比如,devhdal(block3/1).devhda2(block3/2)和devhda3(block33)都代表着同一块硬盘的三个分区,他们的主设备号都是3,辅设备号分别为1、2、3。这些设备特别文件用mknod吩咐来创建:#mknodharddiskb30我们就在当前位置创建出一个与devhda一样的、可以访问第一个IDE设备主硬盘的文件,文件名叫做Iiarddisk0运用下面吩附可以查看设备编号:#filedevhdadevhda:blockspecial(3/0)其中Block代表devhda是系统的Block型(块型)设备文件,它的主设备编号为3,辅设备编号为0。#ls-1devhdadevhdbbrw-rw-1rootdisk3,0Sep152003dcvhdabrw-rw-1rootdisk3,64Sep152003devl1db运用IS一】也可以看到设备编号,/devhdb代表第一个IDE接口的从设备(SlaVC)也是Block设备,编号为64),还有另外一种设备文件是devlty*。运用如下吩咐:#echo"hellotty1">devtty1将字符串“hellotiyl”输出到devtyl代表的第一个虚拟限制台上,此时按“Alt+Fl”可以看到该字符出现在屏幕上,这个特别的文件就代表着我们的第一虚拟限制台。filedevtty1/dcv/ttyl:characterspecial(4/1)由上可以看到,它的类型为CharaCter型(字符型)设备文件,主设备号为4,辅设备号为1。同样,devtly2代表着其次个虚拟限制台,是CharaCter设备,编号为(4/2)。当将devcdrom加载到mn"cdrom中时,只要访问mntcdrom系统就会FI动引入到devcdrom对应的驱动程序中,访问实际的数据。有关设备文件的编号可以看内核文档/usr/src/linux-2.*/DOCUmentatiOn/devices.txt文件(在Kernel的源文件解包后的DOCUmemaIiOn竹目中),其中具体叙述了各种设备文件编号的意义。3.运用/proc朽目中的文件监视驱动程序的状态通过设备文件怎样访问到相应的驱动程序呢?它们中间有一个桥梁,那就是PrOC文件系统,它一般会被加载到/proc书目。访问设备文件时,操作系统通常会通过查找/pr。C书目下的值,确定由哪些驱动模块来完成任务.假如PrOC文件系统没有加载,访问设备文件时就会出现错误。1.inux系统中proc文件系统是内核虚拟的文件系统,其中全部的文件都是内核中虚拟出来的,各种文件事实上是当前内核在内存中的参数。它就像是特地为访问内核而打开的一扇门,比如访问procCPUinfO文件,事实上就是访问目前的CPU的参数,每一次系统启动时系统都会通过etcfstab中设置的信息Fl动将proc文件系统加载到/proc书目下:# grepprocZetcZfstabnone/procprocdefaults00此外,也可以通过mount吩咐手动加载:# mount-tprocnone/proc通过/proc节目下的文件可以访问或更改内核参数,可以通过/proc书目查询驱动程序的信息。卜面先让我们看一卜7proc书目中的信息:# IsZprocI47255032510052485292cryptokcorepartitions1447945044511052505293deviceskmsgpci248105075512252525295dmaksynsself348205079513252545345driverIoadavgslabinfo448315080515152566execdonainslocksstat431649105081516052587fbIvmswaps4317491250825170526270filesystemsndstatsys431849245083518052718fsneminfosysrq-trigger431949505084518952879ideIniSCsysvipc46204963508552325288apminterruptsmodulestty46765508652425289busiomemmountsuptine46805005508752445290cmdlineioportsmtrrversion47065018508852465291Cpuinfbirqnet须要知道的是,这些文件都是实时产生的虚拟文件,访问它们就是访问内存中真实的数据。这些数据是实时改变产生的,可以通过以卜.吩咐来查看文件的具体值:# catprocinterruptsCPUOO:50662XT-PICtimerl:3XT-PICkeyboard2:0XT-PICcascade5:618XT-PICehci-hcd.eth18:1XT-PICrtc9:0XT-PICusb-uhci,usb-uhcil1:50XT-PICusb-uhci,ethO12:16XT-PICPS/2Mouse14:8009XT-PICide015:0XT-PICidelNMI:OERR:0其它文件的含看法表1所示。procsys书目卜的文件一般可以干脆更改,相当于干脆更改内核的运行参数,例如:# echo1>procsysnetipv4ip-foru,ard上面代码可以将内核中的数据包转发功能打开。另外,1.inUX系统中供应一些吩咐来查询系统的状态,如free可以查看目前的内存运用状况,ide_info可以查看ide设备的信息,例如:#idc_info/dcv/had类似的吩咐还有SCS1.infO,nJ以查看SCSI设备的信息。这些吩咐一般也是查询/proc节目下的文件,并返回结果。系统初始化过程驱动程序的安装在1.inUX安装过程中,系统上的硬件会被检测,基于检测到的结果安装程序会确定哪些模块须要在引导时被载入。RedHat的安装程序为anaconda,它供应了自动检测硬件,并且安装的机制。但是,假如计算机内的某些硬件没有默认的驱动程序,比如一块SCSIK,我们可以在启动后的boo提示符卜,输入“linuxdd”,在加我完内核后,系统会自动提示插入驱动盘,这时就有机会把该硬件的1.inux驱动程序装入。假如在安装系统时,某种硬件总是因为中断冲突(ISA总线的设备较常见,比如一块ISA网卡)没法正常驱动,或者是缺少驱动程序,那么可以在bool提示符卜,输入“Iinuxnoprobc”。在这种模式卜,安装程序不会自动配置找到的硬件,可以自己来选择现有驱动,配置驱动程序的参数,或者选择用光盘或软盘加载驱动程序。定制引导盘系统启动时是如何加载驱动的?下面让我们来看一下RedHat的安装光盘是怎样引导的。当1.inUX安装光盘启动时,加载位于光盘上isolinux中的内核文件VmlinUz,内核运行完毕后,乂将initrd.img的虚拟文件系统加载到内存中。这个文件为ext2文件系统的镜像,经过gzip压缩,可以通过以下步骤查看该镜像中的内容:其中modulcs.dep为模块的注册文件,同时有各种模块的依存关系。modules.cgz为CPiO的打包文件,实际的各种驱动模块就在该文件中。我们可以通过以下吩咐解包:# cpio-idmv<modules.cgz由此可以看到,解包出来的书目4XXX0进入该书目下的i386书目,就可以看到当前启动盘中支持的所以驱动程序:#ls3c59x.o3w-xxxx.o8139cp.o8139too.o8390.oaacraid.oacenic.oaic79xx.o若希望在系统中加入须要的驱动程序,可以相应地修改这些文件,比如在modulcsdcp中加入该模块的名字和依存关系,将编译好的驱动模块文件加入moduIes.cgz中,这样就可以制定自己的安装光盘。硬盘上的系统启动过程与上面类似,但是ini(rd的镜像文件要更简洁些,般在initrd-2.4.XXX.ing的虚拟文件系统中,只会在/Iib书目卜包含cxl3.ojbd.olvm-mod.o等少数文件,用来驱动硬盘上的ext3的文件系统。加载文件系统后,就可以运用川bmodues24.XXX卜的modulcs.dc文件及Kcmel书目中的各种驱动文件。自动配置安装假如安装完1.inUX系统后,又添加了新的硬件,那么系统必需载入正确的驱动程序才可以运用它。在RedHat1.inUX中,可以运用kudzu来配置硬件。这是PnP设备的检测程序,当系统运用新硬件引导后,运行kudzu(默认会自动运行),假如新硬件被支持,那么它就会被Fl动检测到。该程序还会为它配置驱动模块,把结果写入到文件etcsysconfighwconf中,kudzu可以通过对比这个文件发觉新安装的硬件,并进行配置:也可以通过编辑模块配置文件etcmodules.conf来手工指定加载模块。KUdZU服务默认每次启动时都要运行,假如须要缩短启动时间,运用卜面吩咐可以停止系统启动时的kudzu服务:# Chkconfigkudzuoff假如要安装新的硬件,可以手动运行kudzu程序。# kudzu那么kudzu程序如何相识硬件的呢?可以查看usrsharehwdata书目下的文件,依据这些文件中的PnP信息,kudzu可以识别各种硬件设备。以上介绍了1.inux下驱动程序的大体结构、主要的加载方式和相关配置文件,在安装1.inUX时加载驱动程序,并且依据须要定制自己的引导盘,在安装完成后安装新的、即插即用硬件。下一讲起先,我们将学习具体硬件驱动的安装方法。

    注意事项

    本文(Linux操作系统的驱动框架及驱动加载.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开