精华内容
下载资源
问答
  • 一次设备通常包含以下五类: (1)、能量转换设备(如发电机、变压器、电动机等) (2)、开关设备(断路器、熔断器、负荷开关、隔离开关等) (3)、载流导体(母线、绝缘子和电缆等) (4)、互
    完成发电-输电-配电功能的设备叫做一次设备,如发电机,断路器,电流电压互感器,变压器,避雷器等;
    对一次设备进行控制,保护作用的设备叫做二次设备,如继电器,控制开关,指示灯,测量仪表等。
    另解:
    一次设备通常包含以下五类:
    (1)、能量转换设备(如发电机、变压器、电动机等)
    (2)、开关设备(断路器、熔断器、负荷开关、隔离开关等)
    (3)、载流导体(母线、绝缘子和电缆等)
    (4)、互感器(电压、电流等互感器)
    (5)、电抗器和避雷器(电抗器主要用于限制电路中的短路电流;避雷器则用于限制电气设备的过电压)
    二次设备:对电气一次设备的工作状态进行监测、控制和保护的辅助性电气设备称为二次设备。例如各种电气仪表、继电器、自动控制设备、信号电缆和控制电缆等。
    
    展开全文
  •  内核维护着个以主设备号为key的全局哈希表,而哈希表中数据部分则为与该主设备号设备对应的驱动程序(只有次设备)的指针或者多个同类设备驱动程序组成的数组的指针(设备共享主设备号)。根据所编写的驱动...

    之前看韦东山老师视频,说到linux驱动就知道主设备号找驱动,次设备号找设备。这句到底怎么理解呢,如何在驱动中实现呢,在介绍该实现之前先看下内核中主次设备号的管理。在内核中,dev_t  类型( 在 <linux/types.h>头文件有定义 ) 用来表示设备号,包括主设备号和次设备号两部分。对于 2.6.x内核,dev_t是个32位量,其中高12位用来表示主设备号,低20位用来表示次设备号。

    (linux/kdev_t.h)
    
    #define MINORBITS   20                                 /*次设备号*/
    #define MINORMASK   ((1U << MINORBITS) - 1)            /*次设备号掩码*/
    #define MAJOR(dev)  ((unsigned int) ((dev) >> MINORBITS))  /*dev右移20位得到主设备号*/
    #define MINOR(dev)  ((unsigned int) ((dev) & MINORMASK))   /*与次设备掩码与,得到次设备号*/</span>

    MAJOR宏将dev_t向右移动20位,得到主设备号;MINOR宏将dev_t的高12位清零,得到次设备号。相反,可以将主设备号和次设备号转换为设备号类型(dev_t),使用宏MKDEV可以完成这个功能。

    Linux内核允许多个驱动共享一个主设备号,但更多的设备都遵循一个驱动对一个主设备号的原则。

      内核维护着一个以主设备号为key的全局哈希表,而哈希表中数据部分则为与该主设备号设备对应的驱动程序(只有一个次设备)的指针或者多个同类设备驱动程序组成的数组的指针(设备共享主设备号)。根据所编写的驱动程序,可以从内核那里得到一个直接指向设备驱动的指针,或者使用次设备号作为索引的数组来找到设备驱动程序。但无论哪种方式,内核自身几乎不知道次设备号的什么事情。如下图所示:点击打开链接


        尽管这些从设备都涉及到内存访问,但所实现功能有很大差别。然后来看下图1中主设备号为1的memory_fops中定义了哪些函数指针。代码如下:

    //driver/char/mem.c
    
    static const struct file_operations memory_fops = {
      .open = memory_open,
      .llseek = noop_llseek,
    };
    仅有一个关键的函数 memory_open ,其作用是根据次设备号找到次设备的驱动程序。

    static int memory_open(struct inode *inode, struct file *filp)
    {// select different devices through minor device number commented by guoqingbo
      int minor;
      const struct memdev *dev;
    
      minor = iminor(inode); //get the minor device number commented by guoqingbo
      if (minor >= ARRAY_SIZE(devlist))
        return -ENXIO;
    
      dev = &devlist[minor];//select the specific file_operations
      if (!dev->fops)
        return -ENXIO;
    
      filp->f_op = dev->fops;
      if (dev->dev_info)
        filp->f_mapping->backing_dev_info = dev->dev_info;
    
      /* Is /dev/mem or /dev/kmem ? */
      if (dev->dev_info == &directly_mappable_cdev_bdi)
        filp->f_mode |= FMODE_UNSIGNED_OFFSET;
    
      if (dev->fops->open)  //open the device
        return dev->fops->open(inode, filp);
    
      return 0;
    }

    该函数用到的图 中的 dvlist 数组定义如下:

    static const struct memdev {
      const char *name;
      mode_t mode;
      const struct file_operations *fops;
      struct backing_dev_info *dev_info;
    } devlist[] = {
       [1] = { "mem", 0, &mem_fops, &directly_mappable_cdev_bdi },
    #ifdef CONFIG_DEVKMEM
       [2] = { "kmem", 0, &kmem_fops, &directly_mappable_cdev_bdi },
    #endif
       [3] = { "null", 0666, &null_fops, NULL },
    #ifdef CONFIG_DEVPORT
       [4] = { "port", 0, &port_fops, NULL },
    #endif
       [5] = { "zero", 0666, &zero_fops, &zero_bdi },
       [7] = { "full", 0666, &full_fops, NULL },
       [8] = { "random", 0666, &random_fops, NULL },
       [9] = { "urandom", 0666, &urandom_fops, NULL },
      [11] = { "kmsg", 0, &kmsg_fops, NULL },
    #ifdef CONFIG_CRASH_DUMP
      [12] = { "oldmem", 0, &oldmem_fops, NULL },
    #endif
    };
        通过上面代码及图1可看出, memory_open 实际上实现了一个分配器(根据次设备号区分各个设备,并且选择适当的 file_operations ),图2说明了打开内存设备时,文件操作是如何改变的。 所涉及的函数逐渐反映了设备的具体特性。最初只知道用于打开设备的一般函数。然后由打开与内存相关设备文件的具体函数所替代。接下来根据选择的次设备号,进一步细化函数指针 ,为不同的次设备号最终选定函数指针。


    展开全文
  • Linux驱动开发之主设备号找驱动,次设备号找设备

    千次阅读 多人点赞 2013-04-26 11:13:12
    、引言  最近成都地震令大家心神不宁,可能过了今天就没明天了,导致早打算写的东西现在才发出来。不禁感叹:在自然灾害面前,人是那么渺小,人面对自然灾害就好像脚下的蚂蚁面对人,人不经意间就能踩死一片蚂蚁...

    原创作品,转载时请务必以超链接形式标明文章原始出处:http://blog.csdn.net/gqb666/article/details/8805179,作者:gqb666

    一、引言  

        最近成都地震令大家心神不宁,可能过了今天就没明天了,导致早打算写的东西现在才发出来。不禁感叹:在自然灾害面前,人是那么渺小,人面对自然灾害就好像脚下的蚂蚁面对人,人不经意间就能踩死一片蚂蚁,自然灾害不经意间就能埋藏一批人。所以,我们活着的人要珍惜眼前人,善待眼前人。

       言归正传,很久前接触linux驱动就知道主设备号找驱动,次设备号找设备。这句到底怎么理解呢,如何在驱动中实现呢,在介绍该实现之前先看下内核中主次设备号的管理:

    二、Linux内核主次设备号的管理

        Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如终端类设备的主设备号是4

    设备号的内部表示
    在内核中,dev_t  类型( 在 <linux/types.h>头文件有定义 ) 用来表示设备号,包括主设备号和次设备号两部分。对于 2.6.x内核,dev_t是个32位量,其中高12位用来表示主设备号,低20位用来表示次设备号。
    linux/types.h 头文件里定义有
    typedef __kernel_dev_t          dev_t;
    typedef __u32 __kernel_dev_t;

    主设备号和次设备号的获取
    为了写出可移植的驱动程序,不能假定主设备号和次设备号的位数。不同的机型中,主设备号和次设备号的位数可能是不同的。应该使用MAJOR宏得到主设备号,使用MINOR宏来得到次设备号。下面是两个宏的定义:(linux/kdev_t.h
    #define MINORBITS   20                                 /*次设备号*/  
    #define MINORMASK   ((1U << MINORBITS) - 1)            /*次设备号掩码*/  
    #define MAJOR(dev)  ((unsigned int) ((dev) >> MINORBITS))  /*dev右移20位得到主设备号*/  
    #define MINOR(dev)  ((unsigned int) ((dev) & MINORMASK))   /*与次设备掩码与,得到次设备号*/ 
    MAJOR宏将dev_t向右移动20位,得到主设备号;MINOR宏将dev_t的高12位清零,得到次设备号。相反,可以将主设备号和次设备号转换为设备号类型(dev_t),使用宏MKDEV可以完成这个功能。
    #define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))
    MKDEV宏将主设备号(ma)左移20位,然后与次设备号(mi)相或,得到设备号

    三、主设备号找驱动、次设备号找设备的内核实现

       Linux内核允许多个驱动共享一个主设备号,但更多的设备都遵循一个驱动对一个主设备号的原则。
    内核维护着一个以主设备号为key的全局哈希表,而哈希表中数据部分则为与该主设备号设备对应的驱动程序(只有一个次设备)的指针或者多个同类设备驱动程序组成的数组的指针(设备共享主设备号)。根据所编写的驱动程序,可以从内核那里得到一个直接指向设备驱动的指针,或者使用次设备号作为索引的数组来找到设备驱动程序。但无论哪种方式,内核自身几乎不知道次设备号的什么事情。如下图所示:

       

                                图1:应用程序调用open时通过主次设备号找到相应驱动

       来看内核中一个简单的字符设备驱动的例子,其主设备号为1,根据LANANA标准,该设备有10个不同的次设备号。每个都提供了一个不同的功能,这些都与内存访问操作有关。下面列出一些次设备号,以及相关的文件名和含义。

                                                    表1 用于主设备号1的各个从设备号
         从设备号                                                文件                                                           含义
             1                                                    /dev/mem                                                    物理内存
             2                                                    /dev/kmem                                                内核虚拟地址空间
             3                                                    /dev/null                                                       比特位桶
             4                                                    /dev/port                                                     访问I/O端口
             5                                                    /dev/zero                                                 WULL字符源
             8                                                   /dev/random                                          非确定性随机数发生器

        一些设备是我们熟悉的,特别是/dev/null。根据设备描述我们可以很清楚地知道尽管这些从设备都涉及到内存访问,但所实现功能有很大差别。然后来看下图1中主设备号为1memory_fops中定义了哪些函数指针。代码如下:

    driver/char/mem.c

    static const struct file_operations memory_fops = {
    	.open = memory_open,
    	.llseek = noop_llseek,
    };
    其中函数memory_open最为关键,其作用是根据次设备号找到次设备的驱动程序。

    static int memory_open(struct inode *inode, struct file *filp)
    {
    	int minor;
    	const struct memdev *dev;
    
    	minor = iminor(inode); /* get the minor device number commented by guoqingbo */
    	if (minor >= ARRAY_SIZE(devlist))
    		return -ENXIO;
    
    	dev = &devlist[minor];/* select the specific file_operations */
    	if (!dev->fops)
    		return -ENXIO;
    
    	filp->f_op = dev->fops;
    	if (dev->dev_info)
    		filp->f_mapping->backing_dev_info = dev->dev_info;
    
    	/* Is /dev/mem or /dev/kmem ? */
    	if (dev->dev_info == &directly_mappable_cdev_bdi)
    		filp->f_mode |= FMODE_UNSIGNED_OFFSET;
    
    	if (dev->fops->open)  //open the device
    		return dev->fops->open(inode, filp);
    
    	return 0;
    }

    该函数用到的图1中的devlist数组定义如下:

    static const struct memdev {
    	const char *name;
    	mode_t mode;
    	const struct file_operations *fops;
    	struct backing_dev_info *dev_info;
    } devlist[] = {
    	 [1] = { "mem", 0, &mem_fops, &directly_mappable_cdev_bdi },
    #ifdef CONFIG_DEVKMEM
    	 [2] = { "kmem", 0, &kmem_fops, &directly_mappable_cdev_bdi },
    #endif
    	 [3] = { "null", 0666, &null_fops, NULL },
    #ifdef CONFIG_DEVPORT
    	 [4] = { "port", 0, &port_fops, NULL },
    #endif
    	 [5] = { "zero", 0666, &zero_fops, &zero_bdi },
    	 [7] = { "full", 0666, &full_fops, NULL },
    	 [8] = { "random", 0666, &random_fops, NULL },
    	 [9] = { "urandom", 0666, &urandom_fops, NULL },
    	[11] = { "kmsg", 0, &kmsg_fops, NULL },
    #ifdef CONFIG_CRASH_DUMP
    	[12] = { "oldmem", 0, &oldmem_fops, NULL },
    #endif
    };

    通过上面代码及图1可看出,memory_open实际上实现了一个分配器(根据次设备号区分各个设备,并且选择适当的file_operations),图2说明了打开内存设备时,文件操作是如何改变的。所涉及的函数逐渐反映了设备的具体特性。最初只知道用于打开设备的一般函数,然后由打开与内存相关设备文件的具体函数所替代。接下来根据选择的次设备号,进一步细化函数指针 ,为不同的次设备号最终选定函数指针。


                                        图2:设备驱动程序函数指针的选择过程

    展开全文
  • 主设备号和次设备

    万次阅读 2011-03-09 15:04:00
     Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。...  个字符设备或者块设备都有个主设备号和次设备号。主设备号和次设备号统称

         Linux的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,称为设备文件。应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬盘的主设备号是3。

         一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各设备。例如一个嵌入式系统,有两个LED指示灯,LED灯需要独立的打开或者关闭。那么,可以写一个LED灯的字符设备驱动程序,可以将其主设备号注册成5号设备,次设备号分别为1和2。这里,次设备号就分别表示两个LED灯。

         设备文件通常都在 /dev 目录下。如:

    beyes@linux-beyes:~/C/kernel/memory> ll /dev |more
    总计 0
    crw-rw----  1 root uucp    470 04-14 18:16 ttyS6
    crw-rw----  1 root uucp    471 04-14 18:16 ttyS7
    crw-rw----  1 root tty         7,   0 08-08 18:58 vcs
    crw-rw----  1 root tty         7,   1 08-08 18:58 vcs1
    crw-rw-rw-  1 root root    1,   7 08-08 18:58 full
    crw-rw-rw-  1 root root    1,   3 04-14 18:16 null

     

    如上,前面第一个字符为c 的表示字符设备。在字符设备里,有主设备号和次设备号。如上1,4,7 分别是主设备号,0,1,3,7,70,71都是次设备号。一般的,主设备号标识出与设备关联的设备驱动。如 /dev/null 和 /dev/full 由 1 号驱动来管理,/dev/vcs 和/dev/vcs1由 7 号驱动来管理,/dev/ttyS6 由 4 号驱动来管理。

    现在的 Linux 内核允许多个驱动共享一个主设备号,但更多的设备都遵循一个驱动对一个主设备号的原则。

    内核由次设备号确定当前所指向的是哪个设备。根据所编写的驱动程序,可以从内核那里得到一个直接指向设备的指针,或者使用次设备号作为一个设备本地数组的索引。但不论如何,内核自身几乎不知道次设备号的什么事情。

    设备号的内部表示

    在内核中,dev_t  类型( 在 <linux/types.h> 头文件有定义 ) 用来表示设备号,包括主设备号和次设备号两部分。对于 2.6.x 内核,dev_t 是个 32 位量,其中 12 位用来表示主设备号,20 位用来表示次设备号。
    在 linux/types.h 头文件里定义有

    typedef __kernel_dev_t          dev_t;

    typedef __u32 __kernel_dev_t;

     

    主设备号和次设备号的获取

    为了写出可移植的驱动程序,不能假定主设备号和次设备号的位数。不同的机型中,主设备号和次设备号的位数可能是不同的。应该使用MAJOR宏得到主设备号,使用MINOR宏来得到次设备号。下面是两个宏的定义:(linux/kdev_t.h

     

    #define MINORBITS   20                                  /*次设备号*/  

    #define MINORMASK   ((1U << MINORBITS) - 1)             /*次设备号掩码*/  

    #define MAJOR(dev)  ((unsigned int) ((dev) >> MINORBITS))   /*dev右移20位得到主设备号*/  

    #define MINOR(dev)  ((unsigned int) ((dev) & MINORMASK))   /*与次设备掩码与,得到次设备号*/ 

     

    MAJOR宏将dev_t向右移动20位,得到主设备号;MINOR宏将dev_t的高12位清零,得到次设备号。相反,可以将主设备号和次设备号转换为设备号类型(dev_t),使用宏MKDEV可以完成这个功能。

    #define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi))

    MKDEV宏将主设备号(ma)左移20位,然后与次设备号(mi)相与,得到设备号

     

    静态分配设备号

    静态分配设备号,就是驱动程序开发者,静态地指定一个设备号。对于一部分常用的设备,内核开发者已经为其分配了设备号。这些设备号可以在内核源码documentation/ devices.txt文件中找到。如果只有开发者自己使用这些设备驱动程序,那么其可以选择一个尚未使用的设备号。在不添加新硬件的时候,这种方式不会产生设备号冲突。但是当添加新硬件时,则很可能造成设备号冲突,影响设备的使用。


    动态分配设备号

    由于静态分配设备号存在冲突的问题,所以内核社区建议开发者使用动态分配设备号的方法。动态分配设备号的函数是alloc_chrdev_region()。

     

    查看设备号

    当静态分配设备号时,需要查看系统中已经存在的设备号,从而决定使用哪个新设备号。可以读取/proc/devices文件获得设备的设备号。/proc/devices文件包含字符设备和块设备的设备号,如下所示:

     

    [root@tom /]# cat /proc/devices /*cat命令查看/proc/devices文件的内容*/  

    Character devices:                  /*字符设备*/  

       1 mem  

       4 /dev/vc/0  

       7 vcs  

       13 input  

       14 sound  

       21 sg  

    Block devices:                      /*块设备*/  

       1 ramdisk  

       2 fd  

       8 sd  

       253 device-mapper  

       254 mdp 

     

    申请和释放设备号

    内核维护着一个特殊的数据结构,用来存放设备号与设备的关系。在安装设备时,应该给设备申请一个设备号,使系统可以明确设备对应的设备号。设备驱动程序中的很多功能,是通过设备号来操作设备的。下面,首先对申请设备号进行简述。

    1.申请设备号

    在构建字符设备之前,首先要向系统申请一个或者多个设备号。完成该工作的函数是register_chrdev_region(),该函数在<linux/fs.h>中定义:

    int register_chrdev_region(dev_t from, unsigned count, const char *name);

    其中,from是要分配的设备号范围的起始值。一般只提供from的主设备号,from的次设备号通常被设置成0。count是需要申请的连续设备号的个数。最后name是和该范围编号关联的设备名称,该名称不能超过64字节。

    和大多数内核函数一样,register_chrdev_region()函数成功时返回0。错误时,返回一个负的错误码,并且不能为字符设备分配设备号。 

         在Linux中有非常多的字符设备,在人为的为字符设备分配设备号时,很可能发生冲突。Linux内核开发者一直在努力将设备号变为动态的。可以使用alloc_chrdev_region()函数达到这个目的。(linux/fs.h)

    int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)

    在上面的函数中,dev作为输出参数,在函数成功返回后将保存已经分配的设备号。函数有可能申请一段连续的设备号,这是dev返回第一个设备号。baseminor表示要申请的第一个次设备号,其通常设为0。count和name与register_chrdev_region()函数的对应参数一样。count表示要申请的连续设备号个数,name表示设备的名字。

     

    2.释放设备号

    使用上面两种方式申请的设备号,都应该在不使用设备时,释放设备号。设备号的释放统一使用下面的函数:

    void unregister_chrdev_region(dev_t from, unsigned count);  

    在上面这个函数中,from表示要释放的设备号,count表示从from开始要释放的设备号个数。通常,在模块的卸载函数中调用unregister_chrdev_region()函数。

     

    次设备号的主要用途

    1、区分设备驱动程序控制的实际设备;

    2、区分不同用途的设备 (misc 系列设备)

    3、区分块设备的分区 (partition)

    通常,为了使应用程序区分所控制设备的类型,内核使用主设备号。而存在多台同类设备时,为了选择其中的一种,设备驱动程序就使用次设备号。

     

     

     

     

     

     

     

    区分块设备的分区

    块设备具有被称为分区的分配领域。例如,硬盘在物理上是一个设备,从内核的角度,硬盘被分为多个分区,而以这些分区为对象则形成了文件系统,此时,次设备号既表示设备,也表示分区

    brw-rw----  1 root disk    8,  16 2009-09-24 sdb
    brw-rw----  1 root disk    8,  17 2009-09-24 sdb1
    brw-rw----  1 root disk    8,  18 2009-09-24 sdb2
    brw-rw----  1 root disk    8,  21 2009-09-24 sdb5
    brw-rw----  1 root disk    8,  22 2009-09-24 sdb6
    brw-rw----  1 root disk    8,  23 2009-09-24 sdb7
    brw-rw----  1 root disk    8,  24 2009-09-24 sdb8
    展开全文
  • 但是,由于采用了称为Multipoint的协议,许多蓝牙耳机可以一次连接到多个设备。 并非所有耳机都支持它,但是Bose,Sennheiser,Beats等制造商的大多数中高端耳机都支持。 甚至来自Jabra等制造商的廉价耳机也具有...
  • linux驱动开发 主设备号与次设备

    千次阅读 2014-02-20 13:57:51
    个字符设备或者块设备都有个主设备号和次设备号。主设备号和次设备号统称为设 备号。主设备号用来表示个特定的驱动程序。次设备号用来表示使用该驱动程序的各 设备。例如个嵌入式系统,有两个LED指示灯,...
  • 、字符设备基础知识 1、设备驱动分类  linux系统将设备分为3类:字符设备、块设备、网络设备。使用驱动程序: 字符设备:是指只能个字节个字节读写的设备,不能随机读取设备内存中的某数据,读取数据...
  • Linux:主设备号和次设备

    千次阅读 2015-06-29 17:48:20
    为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号,如硬盘的主设备号是3。
  • 智能设备主要有哪些特点

    千次阅读 2019-02-01 11:07:36
    就像以往任何技术一样,智能设备会影响生活的几乎每个领域。它会改变我们生产产品的方式、医生做外科手术的方式、物流公司组织仓储的方式、甚至是下一代接受教育的方式。  控制系统的配置,必须帮助生产制造行业...
  • 在linux设备驱动第篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写个简单的字符设备驱动。本篇借鉴LDD中的源码,实现个与硬件设备无关的字符设备驱动,仅仅操作从...1、主设备号和次设备号 对于
  • 一次写博客,有不足之处请谅解。 网上华为云的使用案列太少了,踩了一个多月的坑,终于把一套流程简单的走完了一遍,包含平台侧开发和应用侧开发。 本文章基于Java开发,功能较为简单: 1.Mqtt.Fx(后文简称fx...
  • 设备设备节点和设备驱动详解

    千次阅读 多人点赞 2018-09-28 12:44:03
    1.设备 Linux下的设备通常分为三类,字符设备,块设备和网络设备。...在Linux里个网络设备也可以叫做个网络接口,如eth0,应用程序是通过Socket而不是设备节点来访问网络设备,在系统里根本就不存在网络...
  • 摘要:本文主要是针对通过路由器wan口连接校园网(web认证)登陆个账号,多个...OpenWrt是适合于嵌入式设备个Linux发行版。 相对原厂固件而言,OpenWrt不是个单一、静态的固件,而是提供了个可添加软件包...
  • 电池寿命:Wi-Fi设备公司Edgewater最近支持在Kroger商店内部署物联网,而Edgewater首席执行官AndrewSkafel表示,电池使用寿命是最重要的设计因素之。他指出,在杂货店里,有数百个传感器监控食物冷藏状态,“因此...
  • 当在宿主机上插入个USB设备的时候,通过设置,可以在vmware的虚拟机系统里边能访问到这个USB设备, 而且访问这个USB设备,就跟真的把这个USB设备插入到这个虚拟系统中一样,跟真实的几乎没任何区别。 再看种情况...
  • 、什么是Linux设备文件系统  首先我们不看定义,定义总是太抽象很难理解,我们先看现象。当我们往开发板上移植了个新的文件系统之后(假如各种设备驱动也移植好了),启动开发板,我们用串口工具进入开发板,...
  • 在linux设备驱动第篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写个简单的字符设备驱动。本篇借鉴LDD中的源码,实现个与硬件设备无关的字符设备驱动,仅仅操作...1、主设备号和次设备号 对于...
  • 设备驱动程序之

    千次阅读 2014-02-10 23:41:00
    、块设备概述 linux支持的两种重要的设备类型分别是字符设备和块设备,块设备可以随机地以固定大小的块传送数据。与字符设备相比,块设备有以下几个特殊之处: 块设备可以从数据的任何位置进行访问块数据总是以...
  • 1. 设备号 主设备号:用来标识与设备文件相关的驱动程序, ——反应设备类型 次设备号:为内核所用,被驱动程序用来辨别操作那个设备文件 ——区分同类型的具体某个设备
  • 半导体行业都有哪些设备

    万次阅读 2019-07-15 11:00:47
    个芯片的生产需要千锤百炼,每个工序都要特定的设备,并且每个设备都很昂贵,因此半导体生活也是工业上的皇冠。
  • Linux设备驱动--块设备)之概念和框架

    万次阅读 多人点赞 2012-01-20 17:01:19
    --- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。 字符设备(Character device) ---是一...
  • 节点有个属性是设备号(主设备号、次设备号),其中主设备号将设备文件与驱动模块对应起来 当我们open个设备节点时,告诉了kernel要操作的是是主设备号为XX的节点,然后kernel会通过过XX来寻找合适的内存模块...
  • linux设备驱动(

    万次阅读 2020-01-08 15:47:24
    文章目录基本概念什么是设备驱动无操作系统下的驱动有操作系统下的驱动linux设备分类字符设备设备网络设备内核的组成源码目录结构内核主要组成部分进程调度SCHED内存管理MM虚拟文件系统VFS网络接口NET进程间通信...
  • Linux设备节点、设备设备驱动

    千次阅读 2017-09-15 14:44:38
    Linux设备分成三种基本类型: ...在Linux中,所有设备都以文件的形式存放在/dev目录下,都是通过文件的方式进行访问,设备节点是Linux内核对设备的抽象,设备节点就是个文件。应用程序通过
  • 主设备号和次设备号通过访问文件系统中的名字来访问字符设备,通常这些名字被称作文件系统中的特殊的文件或这设备文件或者简单节点(simply nodes),它们位于/dev目录下。字符设备驱动的特殊文件,可以通过ls -l输出...
  • (四)Linux设备驱动之多个同类设备共用一套驱动 (五)Linux设备驱动模型介绍 (六)Linux驱动子系统-I2C子系统 (七)Linux驱动子系统-SPI子系统 (八)Linux驱动子系统-PWM子系统 (九)Linux驱动子系统-...
  • 比如设备的硬件ID,像手机在生产过程中都会被赋予个唯一的IMEI(International Mobile Equipment Identity)编号,用于唯一标识该台设备。像电脑的网卡,在生产过程中会被赋予唯一的MAC地址。这些设备唯一的标识符...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 662,504
精华内容 265,001
关键字:

一次设备包含哪些设备