Driver: 跟设备驱动相关的一些知识点

本文介绍了Linux系统中设备文件的概念及分类,包括块设备、字符设备和网络插件设备。探讨了通过proc文件系统访问设备文件的方法,以及如何通过设备文件进行硬件管理和状态监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设备文件
当我们加载了设备驱动模块后,应该怎样访问这些设备呢?Linux是一种类Unix系统,Unix的一个基本特点是“一切皆为文件”,它抽象了设备的处理,将所有的硬件设备都像普通文件一样看待,也就是说硬件可以跟普通文件一样来打开、关闭和读写。
系统中的设备都用一个设备特殊文件代表,叫做设备文件,设备文件又分为Block(块)型设备文件、Character(字符)型设备文件和Socket(网络插件)型设备文件。Block设备文件常常指定哪些需要以块(如512字节)的方式写入的设备,比如IDE硬盘、SCSI硬盘、光驱等。

proc理解
.使用/proc目录中的文件监视驱动程序的状态
通过设备文件怎样访问到相应的驱动程序呢?它们中间有一个桥梁,那就是proc文件系统,它一般会被加载到/proc目录。访问设备文件时,操作系统通常会通过查找/proc目录下的值,确定由哪些驱动模块来完成任务。如果proc文件系统没有加载,访问设备文件时就会出现错误。
Linux系统中proc文件系统是内核虚拟的文件系统,其中所有的文件都是内核中虚拟出来的,各种文件实际上是当前内核在内存中的参数。它就像是专门为访问内核而打开的一扇门,比如访问/proc/cpuinfo文件,实际上就是访问目前的CPU的参数,每一次系统启动时系统都会通过/etc/fstab中设置的信息自动将proc文件系统加载到/proc目录下
需要知道的是,这些文件都是实时产生的虚拟文件,访问它们就是访问内存中真实的数据。这些数据是实时变化产生的,可以通过以下命令来查看文件的具体值:
cat /proc/interrupt
/proc/sys目录下的文件一般可以直接更改,相当于直接更改内核的运行参数,例如:
# echo 1 > /proc/sys/net/ipv4/ip_forward
上面代码可以将内核中的数据包转发功能打开。
另外,Linux系统中提供一些命令来查询系统的状态,如free可以查看目前的内存使用情况,ide_info可以查看ide设备的信息,例如:
#ide_info /dev/had
类似的命令还有scsi_info,可以查看SCSI设备的信息。这些命令一般也是查询/proc目录下的文件,并返回结果。


结合 设备文件 和proc,提出一个问题。
因为linux把设备也看作是文件,那么我们 需要考虑一个问题,如果有两个相同设备,系统到底如何识别呢?如:我们有两个硬盘,/dev/hda 和 /dev/hdc是如何来的呢?
系统安装时,系统上的硬件会被检测,基于检测到的结果安装程序会决定哪些模块需要在引导时被载入。如果有两个硬盘,系统会为这两个设备利用相同的文件系统的结构,射程两个设备节点。


热插拔的模块一般放在:/sys/modules或/proc/modules文件夹中。

驱动模块,驱动加载,先加载module,而后需创建设备节点。这样应用程序才能够访问这个设备。

//char_dev_reg模块
# ls /sys/module/ -l | grep "char*"
drwxr-xr-x    3 root     0               0 Jan  1 00:16 char_dev_reg

//char_dev_reg模块加载后,需要将这个模
例如:# mknod /dev/hello c 253 0
# ls /dev/hello -l
crw-r--r--    1 root     0        253,   0 Jan  1 00:37 /dev/hello

Chkconfig主要用来查询和管理服务在不同运行级别上的启用情况,需要注意的是:chkconfig命令并没有更改程序脚本里的内容,只是更改了程序在rcN.d中的链接名称的开头字母,以此来确保其在相应运行级别上开启或关闭。
Chkconfig --list name  列出指定服务的运行级别情况
Chkconfig--add name  增加一个服务
Chkconfig --del name  删除一个服务
Chkconfig   [--level ]      更改/重设指定服务的运行级别
我们输入chkconfig --level 345 nfs on,即可使NFS服务在运行级别3、4、5上自动运行。


# modprobe ide-cd
此时会发现,cdrom模块也会自动插入。
insmod也是插入模块的命令,但是它不会自动解决依存关系,所以一般加载内核模块时使用的命令为modprobe。
rmmod可以删除模块,但是它只可以删除没有使用的模块。
Modinfo用来查看模块信息,如modinfo -d cdrom,在Red Hat Linux系统中,模块的相关命令在modutils的RPM包中。


#dd if=/dev/hda of=/root/a.img bs=446 count=1
把第一个硬盘上前446个字节的MBR信息导入到a.img文件中。

修改/etc/fstab或者/etc/mtab文件。在该文件最后按顺序添加需要支持的挂载


dd if=/dev/hda of=/root/a.img bs=446 count=1
把第一个硬盘上前446个字节的MBR信息导入到a.img文件中


/etc/exports  nfs共享文档
/home/fs2410/filesystem 192.168.*


/etc/xinetd.d/tftp
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值