位置:海鸟网 > IT > linux/Unix >

Linux下设备完全驱动

本讲主要概述Linux设备驱动框架、驱动程序的配置文件及常用的加载驱动程序的方法;并且介绍Red Hat Linux安装程序是如何加载驱动的,通过了解这个过程, 我们可以自己将驱动程序放到引导盘中;安装完系统后,使用kudzu自动配置硬件程序。
    Linux设备驱动概述
    1. 内核和驱动模块
    操作系统是通过各种驱动程序来驾驭硬件设备,它为用户屏蔽了各种各样的设备,驱动硬件是操作系统最基本的功能,并且提供统一的操作方式。正如我们查看屏幕上的文档时,不用去管到底使用nVIDIA芯片,还是ATI芯片的显示卡,只需知道输入命令后,需要的文字就显示在屏幕上。硬件驱动程序是操作系统最基本的组成部分,在Linux内核源程序中也占有较高的比例。
    Linux内核中采用可加载的模块化设计(LKMs ,Loadable Kernel Modules),一般情况下编译的Linux内核是支持可插入式模块的,也就是将最基本的核心代码编译在内核中,其它的代码可以选择是在内核中,或者编译为内核的模块文件。
    如果需要某种功能,比如需要访问一个NTFS分区,就加载相应的NTFS模块。这种设计可以使内核文件不至于太大,但是又可以支持很多的功能,必要时动态地加载。这是一种跟微内核设计不太一样,但却是切实可行的内核设计方案。
    我们常见的驱动程序就是作为内核模块动态加载的,比如声卡驱动和网卡驱动等,而Linux最基础的驱动,如CPU、PCI总线、TCP/IP协议、APM(高级电源管理)、VFS等驱动程序则编译在内核文件中。有时也把内核模块就叫做驱动程序,只不过驱动的内容不一定是硬件罢了,比如ext3文件系统的驱动。
    理解这一点很重要。因此,加载驱动时就是加载内核模块。下面来看一下有关模块的命令,在加载驱动程序要用到它们:lsmod、modprob、insmod、rmmod、modinfo。
    lsmod 列出当前系统中加载的模块,例如:
    #lsmod  (与cat /proc/modules 得出的内容是一致的)
    ModuleSize     Used by  Not tainted
    radeon115364   1
    agpgart56664  3
    nls_iso8859-13516  1    (autoclean)
    loop12120  3    (autoclean)
    smbfs44528  2    (autoclean)
    parport_pc19076  1    (autoclean)
    lp9028  0    (autoclean)
    parport37088  1     (autoclean) [parport_pc lp]
    autofs13364  0    (autoclean) (unused)
    ds8704  2
    yenta_socket13760  2
    pcmcia_core57184  0    [ds yenta_socket]
    tg355112  1
    sg36940  0    (autoclean)
    sr_mod18104  0    (autoclean)
    microcode   4724  0    (autoclean)
    ide-scsi         12208    0
    scsi_mod       108968   3    [sg sr_mod ide-scsi]
    ide-cd       35680  0
    cdrom33696    0    [sr_mod ide-cd]
    nls_cp936124988  1    (autoclean)
    nls_cp437        5148  1    (autoclean)
    vfat13004  1    (autoclean)
    fat       38872  0    (autoclean) [vfat]
    keybdev2976  0    (unused)
    mousedev5524     1
    hid22212    0    (unused)
    input5888  0    [keybdev mousedev hid]
    ehci-hcd20104   0(unused)
    usb-uhci26412   0(unused)
    usbcore79392   1[hid ehci-hcd usb-uhci]
    ext391592   2
    jbd52336   2[ext3]
    上面显示了当前系统中加载的模块,左边数第一列是模块名,第二列是该模块大小,第三列则是该模块使用的数量。