在linux系统下,设备分那几种?

在linux系统下,设备分那几种?,第1张

跟WINDOWS一样吧。硬盘,光盘,软盘,可移动磁盘,鼠标,打印机,网卡,磁盘。。。

常见硬件设备在linux中的代号:

IDE硬盘 /dev/hd[a-d]

SCSI硬盘 /dev/sd[a-d]

光驱 /dev/cdrom

软驱 /dev/fd[0-1]

打印机 /dev/lp[0-1]

鼠标 /dev/mouse

磁盘 /dev/ht0(IDE) /dev/st0 (SCSI)

网卡 /dev/ethn (n由0开始)

在Linux中,字符设备驱动由如下几个部分组成。

1.字符设备驱动模块加载与卸载函数

在字符设备驱动模块加载函数中应该实现设备号的申请和cdev的注册,而在卸载函数中应实现设备号

的释放和cdev的注销。

Linux内核的编码习惯是为设备定义一个设备相关的结构体,该结构体包含设备所涉及的cdev、私有

数据及锁等信息。2.字符设备驱动的file_operations结构体中的成员函数

file_operations结构体中的成员函数是字符设备驱动与内核虚拟文件系统的接口,是用户空间对Linux

进行系统调用最终的落实者。设备驱动的读函数中,filp是文件结构体指针,buf是用户空间内存的地址,该地址在内核空间不宜直

接读写,count是要读的字节数,f_pos是读的位置相对于文件开头的偏移。

设备驱动的写函数中,filp是文件结构体指针,buf是用户空间内存的地址,该地址在内核空间不宜直

接读写,count是要写的字节数,f_pos是写的位置相对于文件开头的偏移。

由于用户空间不能直接访问内核空间的内存,因此借助了函数copy_from_user()完成用户空间缓冲

区到内核空间的复制,以及copy_to_user()完成内核空间到用户空间缓冲区的复制,见代码第6行和第14

行。

完成内核空间和用户空间内存复制的copy_from_user()和copy_to_user()的原型分别为:

unsigned long copy_from_user(void *to, const void _ _user *from, unsigned long count)

unsigned long copy_to_user(void _ _user *to, const void *from, unsigned long count)

上述函数均返回不能被复制的字节数,因此,如果完全复制成功,返回值为0。如果复制失败,则返

回负值。如果要复制的内存是简单类型,如char、int、long等,则可以使用简单的put_user()和

get_user()读和写函数中的_user是一个宏,表明其后的指针指向用户空间,实际上更多地充当了代码自注释的

功能。内核空间虽然可以访问用户空间的缓冲区,但是在访问之前,一般需要先检查其合法性,通过

access_ok(type,addr,size)进行判断,以确定传入的缓冲区的确属于用户空间。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8953067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-23
下一篇 2023-04-23

发表评论

登录后才能评论

评论列表(0条)

保存