返回顶部
首页 > 资讯 > 后端开发 > Python >L15D1 设备分类、设备号申请和注销
  • 620
分享到

L15D1 设备分类、设备号申请和注销

linux运维服务器 2023-10-11 22:10:04 620人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

一、linux设备分类 (一)linux的文件种类: -:普通文件:文件iod:目录文件p:管道文件s:本地Socket文件:网络编程l:链接文件c:字符设备b:块设备 Linux设备一切皆文件,大部分设备是文件。 普通文件在硬盘分区,存放

一、linux设备分类

(一)linux的文件种类:

  1. -:普通文件:文件io
  2. d:目录文件
  3. p:管道文件
  4. s:本地Socket文件:网络编程
  5. l:链接文件
  6. c:字符设备
  7. b:块设备

Linux设备一切皆文件,大部分设备是文件。

普通文件在硬盘分区,存放文件内容,文件名,文件元信息inode(修改权限,修改时间,创建者...)

socket(服务端客户端的地址值)、管道文件(通信机制)没有文件内容。

链接文件:软连接另外文件的路径,硬链接是别名。

字符设备和块设备没有文件内容。

(二)按驱动程序分类

Linux内核按驱动程序实现模型框架的不同,将设备分为三类:

  1. 字符设备:按字节流形式进行数据读写的设备,一般情况下按顺序访问,数据量不大,一般不设缓存
  2. 块设备:按整块进行数据读写的设备,最小的块大小为512字节(一个扇区),块的大小必须是扇区的整数倍,Linux系统的块大小一般为4096字节,随机访问,设缓存以提高效率
  3. 网络设备:针对网络数据收发的设备

块设备一般不面向应用设备,一般面向文件系统,设备缓存,提高效率,应用程序通过文件系统访问块设备。

网络设备:不用文件名命名,另外的命名方式,网卡(有线,无线),蓝牙。

二、设备号

内核用设备号来区分同类里不同的设备,设备号是一个无符号32位整数,数据类型为dev_t,设备号分为两部分:

  1. 主设备号:占高12位,用来表示驱动程序相同的一类设备
  2. 次设备号:占低20位,用来表示被操作的哪个具体设备

应用程序打开一个设备文件时,通过设备号来查找定位内核中管理的设备。

设备号MKDEV宏

MKDEV宏用来将主设备号和次设备号组合成32位完整的设备号,用法:

dev_t devno;int major = 251;//主设备号int minor = 2;//次设备号devno = MKDEV(major,minor);

主设备号相同,用一套驱动设备,用次设备号区分。

例:驱动多个鼠标,鼠标主设备号相同,次设备号不同。

取设备号

MAJOR宏用来从32位设备号中分离出主设备号,用法:

dev_t devno = MKDEV(249,1);int major = MAJOR(devno);

MINOR宏用来从32位设备号中分离出次设备号,用法:

dev_t devno = MKDEV(249,1);int minor = MINOR(devno);

创建一个设备文件

如果已知一个设备的主次设备号,应用层指定好设备文件名,那么可以用mknod命令在/dev目录创建代表这个设备的文件,即此后应用程序对此文件的操作就是对其代表的设备操作,mknod用法如下:

@ cd /dev@ mknod 设备文件名 设备种类(c为字符设备,b为块设备)  主设备号  次设备号    //ubuntu下需加sudo执行

在应用程序中如果要创建设备可以调用系统调用函数mknod,其原型如下:

int mknod(const char *pathname,mode_t mode,dev_t dev);pathname:带路径的设备文件名,无路径默认为当前目录,一般都创建在/dev下mode:文件权限 位或 S_IFCHR/S_IFBLKdev:32位设备号返回值:成功为0,失败-1

三、申请和注销设备号

(一)申请设备号

字符驱动开发的第一步是通过模块的入口函数向内核添加本设备驱动的代码框架,主要完成:

  1. 申请设备号
  2. 定义、初始化、向内核添加代表本设备的结构体元素

手动申请

int reGISter_chrdev_region(dev_t from, unsigned count, const char *name)功能:手动分配设备号,先验证设备号是否被占用,如果没有则申请占用该设备号参数:from:自己指定的设备号count:申请的设备数量name:/proc/devices文件中与该设备对应的名字,方便用户层查询主设备号返回值:成功为0,失败负数,绝对值为错误码

动态申请

int alloc_chrdev_region(dev_t *dev,unsigned baseminor,unsigned count, const char *name)功能:动态分配设备号,查询内核里未被占用的设备号,如果找到则占用该设备号参数:dev:分配设备号成功后用来存放分配到的设备号basemiNIOr:起始的次设备号,一般为0count:申请的设备数量name:/proc/devices文件中与该设备对应的名字,方便用户层查询主次设备号返回值:成功为0,失败负数,绝对值为错误码

分配成功后在/proc/devices 可以查看到申请到主设备号和对应的设备名,mknod时参数可以参考查到的此设备信息 

void unregister_chrdev_region(dev_t from, unsigned count)功能:释放设备号参数:from:已成功分配的设备号将被释放count:申请成功的设备数量

释放后/proc/devices文件对应的记录消失 

代码:

/fs4412/mydrivercode/mychar

#include #include #include int major = 11;int minor = 0;int mychar_num = 1;int __init mychar_init(void){int ret = 0;dev_t devno = MKDEV(major,minor);ret = register_chrdev_region(devno,mychar_num,"mychar");if(ret){ret = alloc_chrdev_region(&devno,minor,mychar_num,"mychar");if(ret){printk("get devno failed\n");return -1;}major = MAJOR(devno);//容易遗忘,动态分配后主设备号有可能改变,次设备号为0}return 0;}void __exit mychar_exit(void){dev_t devno = MKDEV(major,minor);unregister_chrdev_region(devno,mychar_num);}MODULE_LICENSE("GPL");module_init(mychar_init);module_exit(mychar_exit);

将编译好的字符设备插入内核模块

字符设备

 块设备:

 

来源地址:https://blog.csdn.net/m0_57508000/article/details/133770909

--结束END--

本文标题: L15D1 设备分类、设备号申请和注销

本文链接: https://lsjlt.com/news/428815.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • L15D1 设备分类、设备号申请和注销
    一、Linux设备分类 (一)linux的文件种类: -:普通文件:文件IOd:目录文件p:管道文件s:本地socket文件:网络编程l:链接文件c:字符设备b:块设备 Linux设备一切皆文件,大部分设备是文件。 普通文件在硬盘分区,存放...
    99+
    2023-10-11
    linux 运维 服务器
  • 域名注册备案服务号怎么申请
    域名注册备案服务号的申请方法:1.打开控制台;2.点击“域名备案”功能进行申请;3.提交备案信息;4.等待审核成功即可。域名注册备案服务号的申请方法:登录域名提供商平台。打开管理控制台,进入域名管理。申请“域名备案”。根据要求提交域名申请备...
    99+
    2024-04-02
  • 云服务器包括哪些类型的设备和设备组成部分
    CPU:云服务器使用处理器(CPU)来控制和管理服务器上的所有基础设施资源(例如内存、存储和磁盘)。CPU通常由大型中央处理器(CPU)、小型处理器(CPU)、核心(core)和线程组成。 内存:云服务器通常需要大量的内存用于计算密集型任...
    99+
    2023-10-27
    设备 组成部分 类型
  • dy设备deviceid iid注册分析
    清楚缓存,重新打开app, 点击同意按钮,会触发设备注册; 很明显是一个post包,device_register 可以看到请求体加密了 那么 请求体是什么呢? 很老版本思路:都是直接明文注册 ...
    99+
    2023-08-31
    java 数据库 开发语言
  • 云服务器包括哪些类型的设备和设备
    云服务器包括以下类型的设备: 硬件设备:包括服务器、路由器、交换机、防火墙等。 软件设备:包括操作系统和应用软件。 网络设备:包括交换机、集线器、路由器、防火墙等。 存储设备:包括磁盘阵列、存储设备、云存储等。 安全设备:包括安全软件、...
    99+
    2023-10-26
    设备 类型 服务器
  • 小程序 如何申请长期订阅(设备消息)?
    前言 现在长期订阅模板被好多人滥用了,比如我司没有特殊资质的话是很难申请,这个时候如果想实现长期订阅模板怎么办?刚好我司有蜻蜓设备可以试试设备信息 设备消息是长期订阅消息的一种,用户只需订阅一次,后续可根据设备状态的更新向用户发送服务通知。...
    99+
    2023-08-30
    小程序 前端
  • 云服务器包括哪些类型的设备和器件和设备
    云服务器包括以下类型的设备和器件: 服务器硬件:包括CPU、内存、存储器等硬件设备,以及操作系统和其他软件。 网络设备:包括交换机、路由器、防火墙等网络设备,以及操作系统和其他软件。 数据存储设备:包括磁盘、内存、磁带等存储设备,以及操...
    99+
    2023-10-27
    设备 器件 类型
  • Android设备序列号:如何获取和查找您的Android设备的序列号
    Android设备序列号:如何获取和查找您的Android设备的序列号 在使用Android设备时,有时候需要查找设备的序列号来进行诊断、维修或者进行其他操作。本文将介绍如何获取和查找Android设...
    99+
    2023-10-01
    android Android
  • 云服务器包括哪些类型的设备和设备组网
    云服务器通常是指支持多用户并行访问、存储和处理数据的服务器设备。以下是云服务器的种类和设备组网: 虚拟服务器:虚拟服务器是将多个物理服务器虚拟成一个服务器,以此提高服务器的容错能力和扩展性。 私有云服务器:私有云服务器是指将多个公司的数...
    99+
    2023-10-27
    设备 类型 服务器
  • 云服务器包括哪些类型的设备和设备组成
    云服务器通常由以下几个部分组成: 服务器硬件:包括服务器主板、网络交换机、硬盘、内存、处理器等组成的服务器设备和网络。 存储设备:包括SSD、硬盘、磁带机等存储设备和云存储服务提供商提供的云存储服务。 网络设备:包括网络交换机、路由器、...
    99+
    2023-10-27
    设备 类型 服务器
  • 云服务器包括哪些类型的设备和功能设备
    云服务器通常是指虚拟的服务器平台,包括硬件设备和软件系统。以下是云服务器的常见类型和功能: 服务器:服务器可以作为单独的云平台使用,也可以作为公共云平台的一部分提供服务。在公共云平台上,可以通过租赁、托管、自购等方式使用云服务器。 数据...
    99+
    2023-10-27
    设备 类型 功能
  • 云服务器包括什么功能类型的设备和设备
    云服务器通常是指虚拟的服务器软件,可以通过互联网连接到服务器,并提供相应的服务。不同类型的云服务器具有不同的功能类型,包括以下几个大类: 基础设施即服务(IaaS) - 这类云服务器提供基础设施,包括服务器硬件和软件,以及网络连接和存储...
    99+
    2023-10-27
    设备 类型 功能
  • 云服务器包括哪些类型的设备和设备组成和功能
    VMware:虚拟化云服务器是基于VMware虚拟化技术构建的云服务器。VMware是一家知名的虚拟化软件供应商,其产品包括VMware ESXi、VMware Cloud、VMware Gluster等。 AWS:AWS是云计算领域的知...
    99+
    2023-10-27
    设备 类型 功能
  • 云服务器包括哪些类型的设备和器件和设备组成
    一、类型和器件 云服务器一般由以下类型和器件组成: CPU(中央处理器):云服务器的核心设备,用于处理各种任务。CPU是计算机的中枢,负责计算和控制任务的执行。 内存(Memory):云服务器内存是存储服务器上各种数据的容器,用于存储各...
    99+
    2023-10-28
    设备 器件 类型
  • 云服务器包括哪些类型的设备和器件和设备的功能
    云主机:用于托管网站和应用程序的虚拟服务器。它可以包含多个硬件节点,每个节点可以是 PC 计算机、刀片服务器或云服务器中的 N 个节点之一。 负载均衡器:用于将请求分发到多个服务器上的设备。负载均衡器可以将请求分发到不同的服务器上,以确保...
    99+
    2023-10-27
    设备 器件 类型
  • 云服务器包括哪些类型的设备和功能设备组成
    服务器:通常是大型机或小型机,用于存储和处理数据。服务器可以包括多个处理器、内存、硬盘等硬件组件。 虚拟机:可以是容器化的运行时环境,用于运行计算密集型应用程序。虚拟机可以包括多个CPU核心、内存、磁盘等资源。 存储设备:通常包括云存储服...
    99+
    2023-10-27
    设备 类型 功能
  • 云服务器属于什么分类类型的设备和器件
    云服务器属于基础设施类设备和器件。它主要由服务器硬件和操作系统两部分组成。服务器硬件主要包括服务器CPU、内存、存储等部件。这些部件通过虚拟化技术实现资源的统一分配和管理,提高了服务器的性能和可靠性。 操作系统是云服务器的核心组成部分,它...
    99+
    2023-10-28
    器件 类型 服务器
  • 如何从UA分辨出Android设备类型
    随着Android设备增多,不少网站都开始设备Android设备,而Android主流设备类型以手机和平板为主。网站在适配时通过User Agent(用户代理,以下简称UA)又...
    99+
    2022-06-06
    Android
  • 云服务器有哪几种协议类型的网络设备和功能设备
    云服务器提供了许多不同类型的网络设备,以满足不同类型的网络需求。以下是常见的网络设备,它们通常用于不同的云服务提供商,例如: 路由器:路由器是一种连接到互联网的设备,用于在云服务器之间转发数据。路由器通常提供许多不同类型的功能,如数据转...
    99+
    2023-10-27
    几种 网络设备 协议
  • 云服务器包括哪些功能设备和功能设备组成部分
    云服务器包括以下功能设备和功能组成部分: 服务器硬件:服务器硬件是云平台的核心组成部分,包括处理器、内存、磁盘存储、网络等硬件设备。 操作系统:操作系统是云平台运行的基础软件,包括Docker容器和Kubernetes集群管理系统,它们...
    99+
    2023-10-27
    功能 设备 组成部分
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作