您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 国内外标准规范 > 概述Linux系统的驱动框架及驱动加载
概述Linux系统的驱动框架及驱动加载本讲主要概述Linux设备驱动框架、驱动程序的配置文件及常用的加载驱动程序的方法;并且介绍RedHatLinux安装程序是如何加载驱动的,通过了解这个过程,我们可以自己将驱动程序放到引导盘中;安装完系统后,使用kudzu自动配置硬件程序。Linux设备驱动概述1.内核和驱动模块操作系统是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备,驱动硬件是操作系统最基本的功能,并且提供统一的操作方式。正如我们查看屏幕上的文档时,不用去管到底使用nVIDIA芯片,还是ATI芯片的显示卡,只需知道输入命令后,需要的文字就显示在屏幕上。硬件驱动程序是操作系统最基本的组成部分,在Linux内核源程序中也占有较高的比例。Linux内核中采用可加载的模块化设计(LKMs,LoadableKernelModules),一般情况下编译的Linux内核是支持可插入式模块的,也就是将最基本的核心代码编译在内核中,其它的代码可以选择是在内核中,或者编译为内核的模块文件。如果需要某种功能,比如需要访问一个NTFS分区,就加载相应的NTFS模块。这种设计可以使内核文件不至于太大,但是又可以支持很多的功能,必要时动态地加载。这是一种跟微内核设计不太一样,但却是切实可行的内核设计方案。我们常见的驱动程序就是作为内核模块动态加载的,比如声卡驱动和网卡驱动等,而Linux最基础的驱动,如CPU、PCI总线、TCP/IP协议、APM(高级电源管理)、VFS等驱动程序则编译在内核文件中。有时也把内核模块就叫做驱动程序,只不过驱动的内容不一定是硬件罢了,比如ext3文件系统的驱动。理解这一点很重要。因此,加载驱动时就是加载内核模块。下面来看一下有关模块的命令,在加载驱动程序要用到它们:lsmod、modprob、insmod、rmmod、modinfo。lsmod列出当前系统中加载的模块,例如:#lsmod(与cat/proc/modules得出的内容是一致的)ModuleSizeUsedbyNottaintedradeon1153641agpgart566643nls_iso8859-135161(autoclean)loop121203(autoclean)smbfs445282(autoclean)parport_pc190761(autoclean)lp90280(autoclean)parport370881(autoclean)[parport_pclp]autofs133640(autoclean)(unused)ds87042yenta_socket137602pcmcia_core571840[dsyenta_socket]tg3551121sg369400(autoclean)sr_mod181040(autoclean)microcode47240(autoclean)ide-scsi122080scsi_mod1089683[sgsr_modide-scsi]ide-cd356800cdrom336960[sr_modide-cd]nls_cp9361249881(autoclean)nls_cp43751481(autoclean)vfat130041(autoclean)fat388720(autoclean)[vfat]keybdev29760(unused)mousedev55241hid222120(unused)input58880[keybdevmousedevhid]ehci-hcd201040(unused)usb-uhci264120(unused)usbcore793921[hidehci-hcdusb-uhci]ext3915922jbd523362[ext3]上面显示了当前系统中加载的模块,左边数第一列是模块名,第二列是该模块大小,第三列则是该模块使用的数量。如果后面为unused,则表示该模块当前没在使用。如果后面有autoclean,则该模块可以被rmmod-a命令自动清洗。rmmod-a命令会将目前有autoclean的模块卸载,如果这时候某个模块未被使用,则将该模块标记为autoclean。如果在行尾的[]括号内有模块名称,则括号内的模块就依赖于该模块。例如:cdrom341440[sr_modide-cd]其中ide-cd及sr_mod模块就依赖于cdrom模块。系统的模块文件保存在/lib/modules/2.4.XXX/kerne目录中,根据分类分别在fs、net等子目录中,他们的互相依存关系则保存在/lib/modules/2.4.XXX/modules.dep文件中。需要注意,该文件不仅写入了模块的依存关系,同时内核查找模块也是在这个文件中,使用modprobe命令,可以智能插入模块,它可以根据模块间依存关系,以及/etc/modules.conf文件中的内容智能插入模块。比如希望加载ide的光驱驱动,则可运行下面命令:#modprobeide-cd此时会发现,cdrom模块也会自动插入。insmod也是插入模块的命令,但是它不会自动解决依存关系,所以一般加载内核模块时使用的命令为modprobe。rmmod可以删除模块,但是它只可以删除没有使用的模块。Modinfo用来查看模块信息,如modinfo-dcdrom,在RedHatLinux系统中,模块的相关命令在modutils的RPM包中。
本文标题:概述Linux系统的驱动框架及驱动加载
链接地址:https://www.777doc.com/doc-2303098 .html