展开

关键词

Linux动之字符(一)

Linux动的分类 从上图可以看到Linux系统将各异的分为三大类:字符,块和网络。内核针对每一类都提供了对应动模型架构,包括基本的内核施和文件系统接口。 主号用来标识对于的动程序,而次号则由动程序使用,用来标识它所管理的若干同类号的表示 在linux系统中,号用dev_t表示。这是个32位的无符号整数。 随着Linux系统的演变,上述的主次号的分发可能在将来会发生变化,所以动程序开发者应该避免直接使用主次号所占的位宽来获得对于的主号或次号。 假在内核版本之后对主次号所占的位数发生了变化,MINORBITS修改为18位,只要动是使用MAJOR和MINOR宏来操作号,就不需要修改动代码也可以在新内核中使用。 ,第一个参数form表示一个号,第二个参数count表示次的个数,也就是当前动程序所管理的同类的个数,第三个参数name表示或者动的名称。

6740

Linux动之字符(三)

Linux动之字符(一)中学习了号的构成,号的申请与释放。在Linux动之字符(二)中学习了如何创建一个字符,初始化,已经注册到系统中和最后释放该字符。 本节将结合前两节学到的知道,编写一个简单的字符动。最后总结一下字符动的模型。 字符动程序源码 #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/ 237,所以下一步就是根据主号创建节点。 字符动模型

7130
  • 广告
    关闭

    什么是世界上最好的编程语言?丨云托管征文活动

    代金券、腾讯视频VIP、QQ音乐VIP、QB、公仔等奖励等你来拿!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux动之字符(二)

    通过上一节Linux动字符(一)了解了Linux动的分类,号的构成,号的申请以及号的释放。 在Linux内核中使用struct cdev结构来代码字符。 struct kobject kobj 内核的内嵌对象,是Linux动模型的重要成员。 struct module *owner 字符动程序所在的内核模块指针 struct file_operations *ops 字符动程序文件操作函数集,是应用程序通过文件系统访问动的桥梁 该部分在后面Linux字符框架一节会详细分析,目前只要明白主要流程即可。 字符的注销 当动程序需要从系统卸载的时候,就需要使用cdev_del释放字符占用的内存。 目前为止,已经了解了号,号的构成,字符分配,字符的初始化,字符的注册以及字符的注销。将在下一节通过一个简单的字符动程序来再次熟悉整个流程,然后总结字符动的编写模型。

    8110

    linux动中device_init_wakeup

    inline int device_init_wakeup(struct device *dev, bool val) { device_set_wakeup_capable(dev, val); //能不能被唤醒 device_set_wakeup_enable(dev, val); //使不使用唤醒; return 0; } // 模型中的 所有 都有两个标志来控制 唤醒事件(可使得或系统退出低功耗状态 ,动为了支持linux中的电源管理,有责任调用device_init_wakeup()来初始化can_wakeup。 而should_wakeup则是在的 电源状态发生变化时 被device_may_wakeup()用来测试,测试它该不该变化。 can_wakeup,标识本是否具有唤醒能力。 只有具唤醒能力的,才会在sysfs中有一个power目录,用于提供所有的wakeup信息。

    46110

    linux 字符

    Linux动概述 操作系统内核是通过各种动程序来驾驭硬件,它为用户屏蔽了各种各样的动程序是操作系统内核和机器硬件之间的接口,系统调用是操作系统内核和应用程序之间的接口。 linux如何管理文件 Linux纳入文件系统的范畴来管理。 每个Linux系统上看起来都像一个文件,它们存放在/dev目录中,称为"节点"。 Linux的属性 的类型:字符、块、网络; 主号:标识对应的动程序。 一般“一个主号对应一个动程序” 次号:每个动程序负责管理它所动的几个硬件实例,这些硬件实例则由次号来表示。同一动下的实例编号,用于确定文件所指的。 文件名:文件名字。 一些重要的数据结构 大部分动程序涉及三个重要的内核数据结构: 文件操作file_operations结构体 - 结构体file_operations在头文件 linux/fs.h中定义,用来存储动内核模块提供的对进行各种操作的函数的指针

    21945

    linux字符

    Linux动概述 操作系统内核是通过各种动程序来驾驭硬件,它为用户屏蔽了各种各样的动程序是操作系统内核和机器硬件之间的接口,系统调用是操作系统内核和应用程序之间的接口。 linux如何管理文件 Linux纳入文件系统的范畴来管理。 每个Linux系统上看起来都像一个文件,它们存放在/dev目录中,称为"节点"。 Linux的属性 的类型:字符、块、网络; 主号:标识对应的动程序。 一般“一个主号对应一个动程序” 次号:每个动程序负责管理它所动的几个硬件实例,这些硬件实例则由次号来表示。同一动下的实例编号,用于确定文件所指的。 文件名:文件名字。 一些重要的数据结构 大部分动程序涉及三个重要的内核数据结构: 文件操作file_operations结构体 - 结构体file_operations在头文件 linux/fs.h中定义,用来存储动内核模块提供的对进行各种操作的函数的指针

    9165

    linux动第一篇:动程序简介

    很明显,根据的接口,我们可以知道分为usb,串口,pci,spi,i2c等等,那么在linux内核中又有样的划分呢? 下面所述就是linux中对所有的一个分类,并描述了相互之间的简单区别。 linux和模块的分类: 字符:字符是能够像字节流(类似文件)一样被访问的,有字符动程序来实现这种特性。 linux可以让应用程序向字符一样读写块,允许一次传递任意多字节的数据。 Linux下的磁盘都是块,尽管在Linux下有块节点,但应用程序一般是通过文件系统及其高速缓存来访问块的,而不是直接通过节点来读写块上的数据。

    1.6K100

    Linux动模型-Ktype

    #include <linux/module.h> #include <linux/kernel.h> #include <linux/kobject.h> #include <linux/sysfs.h > #include <linux/init.h> #include <linux/file.h> #include <linux/fs.h> static struct kobject kobj; 这样的test文件来自于上述属性的置。 = size; kn->ns = ns; kn->priv = priv; ....... } 至此,这是注册一个sys文件的准工作。 it */ if (name) { pr_debug("kobject: '%s': free name\n", name); kfree(name); } } 所以基于上述的执行路径,在动的

    37021

    Linux动模型-Device

    前言 Linux将所有的统一抽象为struct device结构, 同时将所有的动统一抽象为struct device_driver结构。 这样计之后就方便动开发工程师编写动,只需要将具体的包含struct device结构,具体的动包含struct device_driver结构。 数据结构 Linux将所有的统一抽象为struct device结构。 C: 关于总线先动的匹配是动模型的核心 void bus_probe_device(struct device *dev) { struct bus_type *bus = dev-> ,最终会调用到的show和store函数中,具体的流程分析可见Linux动模型-Ktype static ssize_t dev_attr_show(struct kobject *kobj

    96610

    Linux动模型-Kset

    coresight cpu event_source hid i2c iio mdio_bus mmc platform scsi sdio serio spi usb virtio workqueue 数据结构 linux return NULL; retval = kobject_set_name(&kset->kobj, "%s", name); //置 retval) { kfree(kset); return NULL; } kset->uevent_ops = uevent_ops; //置 uevent_ops kset->kobj.parent = parent_kobj; //置parent /* * The kobject of free it when it is * finished being used. */ kset->kobj.ktype = &kset_ktype; //

    51461

    Linux音频动-PCM

    图1-1 声音的录音和播放过程 数据结构 在ALSA架构下,pcm也被称为,所谓的逻辑。在linux系统中使用snd_pcm结构表示一个pcm。 pcm的创建 创建一个pcm的实例,使用snd_pcm_new函数。 调用snd_kernel_minor函数获得的此号。该此号已经存在则返回BUSY,小于返回错误。 4. 应用到动的过程 当应用程序在通过open系统调用打开/dev/pcmC0D0c的过程 1. if ((err = substream->ops->open(substream)) < 0) 至此,整个pcm创建,调用,以及应用到动整个流程分析完毕。:)

    94011

    Linux动模型-Kobject

    Kobject是linux动模型的基础,也是模型中抽象的一部分。如果想了解动模型就需要明白Kobject的构成或原理。 linux内核为了兼容各种形形色色的,就需要对各种的共性进行抽象,抽象出一个基类,其余的只需要继承此基类就可以了。 而此基类就是kobject,但是C语言没有面向对象语法,这时候就需要将此基类(Kobject)嵌入到具体的结构体中,从而就可以访问控制此的操作。 #include <linux/module.h> #include <linux/kernel.h> #include <linux/kobject.h> #include <linux/sysfs.h #include <linux/kernel.h> #include <linux/kobject.h> #include <linux/sysfs.h> #include <linux/init.h>

    68531

    Linux动模型-Uevent

    前言 当一个动态的加入到系统时候(比如常见的将U盘插入到PC机器上), 动程序就需要动态的检测到有插入了系统,就需要将此事件通知到用户层,然后用户层对这一事件做响应的处理,比如加载USBLinux系统对uevent机制的具体实现是建立在模型的基础上的,通过kobject_uevent函数实现。 在前面的kset小节中提到了注册一个kset的接口,可以在这里习复下。 } /* originating subsystem */ if (uevent_ops && uevent_ops->name) //通过name函数置 如果是嵌入式,会在etc目录下看到这样的配置: echo /sbin/mdev >/proc/sys/kernel/hotplug /sbin/mdev -s 也就是说uevent_helper最终调用到 在开是调用userhelper之前的准工作。

    91941

    Linux动模型-Driver

    前言 linux将所有的动抽象为struct device_driver结构。这样计可以方便动程序更好编写,在编写动的时候只需要将此结构嵌入到具体的动中即可。 bus: 动所属的总线 owner: 动的owner,通常为THIS_MODULE suppress_bind_attrs: 通过sysfs操作动的bind/unbind, probe,remove: 当匹配/移除的时候,会调用动的probe/remove函数。 shutdown,suspend, resume: 代表动在调用管理的时候的回调函数。 groups: 动的属性。 p: 动的私有数据结构,通常可以将动的信息放入此结构中。 和一样,内核也为动定义了一些动的宏属性,方便定义动属性。

    82630

    Linux动模型-Bus

    前言 在linux动模型中,总线可以看作是linux模型的核心,系统中的其他以及动都是以总线为核心围绕。不过动程序员在系统中创建一条总线的机会并不多。 为此linux动模型都将围绕"总线----动"来展开,因为符合linux动模型的动都是必须挂载在一个总线上的,无论是实际存在的或者虚拟的。 .dev_attrs: 此bus上默认的属性。 .bus_groups, dev_groups, drv_groups: 分别是总线, 动的属性。 .match: 当一个或者动添加到此总线上的时候,bus就会调用match对动一一匹配的。 p: 一个用来管理总线上动的数据结构。

    83420

    Linux动详解

    3、扇区   硬盘的基本访问单位,扇区的大小一般是512B(对于现在的有些磁盘的扇区>512B,比如盘的一个扇区就是2048B,Linux将其看成4个扇区,无非就是需要完成4次的读写)。 Linux系统一次读取磁盘的大小是一个块,而不是一个扇区,块动由此得名。 二、块处理过程 1、linux 内核中,块将数据存储与固定的大小的块中,每个块都有自己的固定地址。 Linux内核中块和其他模块的关系如下。 ? 1、块的处理过程涉及Linux内核中的很多模块,下面简单描述之间的处理过过程。    <linux动架构图> ? (Linux系统中,对块的IO请求,都会向块动发出一个请求,在动中用request结构体描述) 内核结构如下:. struct request { struct list_head queuelist

    57630

    Linux内核动之字符动笔记整理

    /******************** * 字符动 ********************/ (1)字符动介绍 字符是指那些按字节流访问的,针对字符动称为字符通过号来标识。号分两部分,主号和次号。 通常,主号标示对应的动程序,linux允许多个动共用一个主号; 而次号用于确定文件所指的。 在动中访问号应该用<linux/kdev_t.h>中定义的宏。 (mi)) //根据指定的主和次号生成号 #include <linux/fs.h> //静态:申请指定的号, from指号, count指使用该动有多少个(次号 /devices.txt可查看号的静态分配情况 ///内核里使用struct cdev来描述一个字符动 #include <linux/cdev.h> struct cdev { struct

    55620

    Linux动开发: 块动开发

    Linux内核版本: 3.5 一、块介绍 块是一种具有一定结构的随机存取,对这种的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入或者从一次性读到缓冲区 块是与字符并列的概念, 这两类Linux动的结构有较大差异,总体而言, 块动比字符动要复杂得多,在 I/O 操作上表现出极大的不同,缓冲、 I/O 调度、请求队列等都是与块动相关的概念 在Linux中,动对块的输入或输出(I/O)操作,都会向块发出一个请求,在动中用request结构体描述。 编写块动时,使用的一些单位介绍: 1. 扇区(Sectors):任何块硬件对数据处理的基本单位。通常,1个扇区的大小为512字节。(对而言) 2. 如果需要访问外部硬件,比如: 盘、磁盘等外部物理时,要置默认的调度器,可以调用blk_init_queue函数分配请求队列。

    12720

    linux动第四篇:linux动调试方法

    上一篇我们大概聊了如何写一个简单的字符动,我们不是神,写代码肯定会出现问题,我们需要在编写代码的过程中不断调试。 下面就根据一个简单的实例来说明如何调试动程序。 如何根据oops定位代码行 我们借用linux动第二篇:构造和运行模块里面的hello world程序来演示出错的情况,含有错误代码的hello world如下: #include <linux/ 以上就是通过oops信息来定位动崩溃的行号。 printk的使用方法类似printf,只是要注意一下打印级别,详细介绍在linux动第二篇:构造和运行模块中已有描述,另外需要注意的是大量使用printk会严重拖慢系统,所以使用过程中也要注意。

    2.8K150

    Linux 动的相遇

    一个开发板 上一节的最后我们讲到树的三大作用,其最后一个作用也是最重要的作用:信息集合。这一节结合信息集合的详细讲解来认识一下动是如何绑定的。 我们看到一个开发板有很多的,这些是如何一层一层展开的呢?动又是如何绑定的呢?我们带着这些疑问进入本节的主题。 各级的展开 内核启动的时候是一层一层展开地去寻找树之所以叫树也是因为在内核中的结构就像树一样,从根部一层一层的向外展开,为了更形象的理解来看一张图: ? 第一节中讲了总线、动模型的原理,即任何动都是通过对应的总线和发生联系的,故虽然 soc 内部没有具体的总线,但是内核通过 platform 这条虚拟总线,把控制器一个一个找到,一样遵循了内核高内聚 下面我们按照 platform 、i2c 、spi 的顺序探究是如何一层一层展开的。

    94840

    相关产品

    • 物联网设备身份认证

      物联网设备身份认证

      物联网设备身份认证(IoT TID)为客户提供多安全等级、跨平台、资源占用少的物联网设备身份认证服务。通过控制台全流程可视化配置,帮助客户快速对接 TID 设备身份认证服务,全面提升各种物联网设备接入认证与数据的安全性……

    相关资讯

    热门标签

    扫码关注云+社区

    领取腾讯云代金券