×

Linux设备驱动开发之设备驱动简述

消耗积分:1 | 格式:rar | 大小:0.4 MB | 2017-10-18

分享资料个

 分享到:标签:嵌入式Linux 设备驱动 操作系统
  11.1 设备驱动概述
  11.1.1 设备驱动简介及驱动模块
  操作系统是通过各种驱动程序来驾驭硬件设备的,它为用户屏蔽了各种各样的设备,驱动硬件是操作系统最基本的功能,并且提供统一的操作方式。设备驱动程序是内核的一部分,硬件驱动程序是操作系统最基本的组成部分,在Linux内核源程序中也占有60%以上。因此,熟悉驱动的编写是很重要的。
  在第2章中已经提到过,Linux内核中采用可加载的模块化设计(LKMs,Loadable Kernel Modules),一般情况下编译的Linux内核是支持可插入式模块的,也就是将最基本的核心代码编译在内核中,其他的代码可以编译到内核中,或者编译为内核的模块文件(在需要时动态加载)。
  常见的驱动程序是作为内核模块动态加载的,比如声卡驱动和网卡驱动等,而Linux最基础的驱动,如CPU、PCI总线、TCP/IP协议、APM(高级电源管理)、VFS等驱动程序则直接编译在内核文件中。有时也把内核模块叫做驱动程序,只不过驱动的内容不一定是硬件罢了,比如ext3文件系统的驱动。因此,加载驱动就是加载内核模块。
  这里,首先列举一些模块相关的命令。
  n lsmod列出当前系统中加载的模块,其中左边第一列是模块名,第二列是该模块大小,第三列则是使用该模块的对象数目。如下所示:
  $ lsmod
  Module Size Used by
  Autofs 12068 0 (autoclean) (unused)
  eepro100 18128 1
  iptable_nat 19252 0 (autoclean) (unused)
  ip_conntrack 18540 1 (autoclean) [iptable_nat]
  iptable_mangle 2272 0 (autoclean) (unused)
  iptable_filter 2272 0 (autoclean) (unused)
  ip_tables 11936 5 [iptable_nat iptable_mangle iptable_filter]
  usb-ohci 19328 0 (unused)
  usbcore 54528 1 [usb-ohci]
  ext3 67728 2
  jbd 44480 2 [ext3]
  aic7xxx 114704 3
  sd_mod 11584 3
  scsi_mod 98512 2 [aic7xxx sd_mod]
  n rmmod是用于将当前模块卸载。
  n insmod和modprobe是用于加载当前模块,但insmod不会自动解决依存关系,即如果要加载的模块引用了当前内核符号表中不存在的符号,则无法加载,也不会去查在其他尚未加载的模块中是否定义了该符号;modprobe可以根据模块间依存关系以及/etc/modules.conf文件中的内容自动加载其他有依赖关系的模块。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !