精华内容
下载资源
问答
  • 半导体行业都有哪些设备

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

    本文为转载,方便了解半导体设备行业。

    所周知,半导体作为最重要的产业之一,每年为全球贡献近五千亿美金的产值,可以毫不夸张的说,半导体技术无处不在。俗话说:巧妇难为无米之炊,硅晶圆作为制造半导体器件和芯片的基本材料,在产业中扮演着举足轻重的地位,硅是当今最重要、应用最广泛的半导体材料。
    硅是非常常见的物质,如沙子里面就有二氧化硅,但沙子到硅晶体这可是个非常复杂的过程,如沙子要经过提纯、高温整形再到旋转拉伸……单晶硅是晶圆最初始的状态,在实际应用中仍不行,还需要制造成晶圆,而且是要求很高的圆圆晶体。在实际的生产中,我们通常将二氧化硅还原成单晶硅,但是这个过程难度很高,因为实际用到的晶圆纯度很高,要达到99.999%以上,常用的晶圆生产过程包括硅的纯化、纯硅制成硅晶棒、制造成电路的石英半导体材料、照相制版、硅材料研磨和抛光、多晶硅融解然后拉出单晶硅晶棒再到最后切割成一片薄薄的晶圆。
    常见的硅晶圆生产流程
    硅在自然界中以硅酸盐或二氧化硅的形式广泛存在于岩石、砂砾中,硅晶圆的制造有三大步骤:硅提炼及提纯、单晶硅生长、晶圆成型。

    一、 硅提炼及提纯

    硅的提纯是第一道工序,需将沙石原料放入一个温度超过两千摄氏度的并有碳源的电弧熔炉中,在高温下发生还原反应得到冶金级硅,然后将粉碎的冶金级硅与气态的氯化氢反应,生成液态的硅烷,然后通过蒸馏和化学还原工艺,得到了高纯度的多晶硅。

    二、 单晶硅生长

    单晶硅

    (用直拉法制造晶圆的流程图)
    晶圆企业常用的是直拉法,如上图所示,高纯度的多晶硅放在石英坩埚中,并用外面围绕着的石墨加热器不断加热,温度维持在大约一千多摄氏度,炉中的空气通常是惰性气体,使多晶硅熔化,同时又不会产生不需要的化学反应。 为了形成单晶硅,还需要控制晶体的方向,坩埚带着多晶硅熔化物在旋转,把一颗籽晶浸入其中,并且由拉制棒带着籽晶作反方向旋转,同时慢慢地、垂直地由硅熔化物中向上拉出。 熔化的多晶硅会粘在籽晶的底端,按籽晶晶格排列的方向不断地生长上去。用直拉法生长后,单晶棒将按适当的尺寸进行切割,然后进行研磨,再用化学机械抛光工艺使其至少一面光滑如镜,这时候晶圆片就制造完成了。 晶圆制造厂把这些多晶硅融解,再在融液里种入籽晶,然后将其慢慢拉出,以形成圆柱状的单晶硅晶棒,由于硅晶棒是由一颗晶面取向确定的籽晶在熔融态的硅原料中逐渐生成。

    三、 晶圆成型

    完成了上述两道工艺, 硅晶棒再经过切段,滚磨,切片,倒角,抛光,激光刻,包装后,即成为集成电路工厂的基本原料——硅晶圆片,这就是“晶圆”。
    在现实中,经常会听到人们讲几寸晶圆厂,它是说生产单片晶圆的尺寸。一般情况下,硅晶圆直径越大,代表晶圆厂技术实力越强,如中芯国际以12寸晶圆为主,台积电的8寸晶圆等。为了将电晶体与导线尺寸缩小,可以将几片晶圆制作在同一片晶圆上,制作出更多的硅晶粒,但是硅晶圆生产最关键的参数就是良品率,这是晶圆厂的核心技术参数,它与硅晶圆生产设备的质量密不可分。
    制造一颗硅晶圆需要的半导体设备
    划片机
    制作一颗硅晶圆需要的半导体设备大致有十个,它们分别是单晶炉、气相外延炉、氧化炉、磁控溅射台、化学机械抛光机、光刻机、离子注入机、引线键合机、晶圆划片机、晶圆减薄机,其实光刻机只是九牛一毛。
    1、 单晶炉
    单晶炉是一种在惰性气体(氮气、氦气为主)环境中,用石墨加热器将多晶硅等多晶材料熔化,用直拉法生长无错位单晶硅的设备。在实际生产单晶硅过程中,它扮演着控制硅晶体的温度和质量的关键作用。
    由于单晶直径在生长过程中可受到温度、提拉速度与转速、坩埚跟踪速度、保护气体流速等因素影响,其中生产的温度主要决定能否成晶,而速度将直接影响到晶体的内在质量,而这种影响却只能在单晶拉出后通过检测才能获知,单晶炉主要控制的方面包括晶体直径、硅功率控制、泄漏率和氩气质量等。
    2、 气相外延炉
    气相外延炉主要是为硅的气相外延生长提供特定的工艺环境,实现在单晶上生长与单晶晶相具有对应关系的薄层晶体。外延生长是指在单晶衬底(基片)上生长一层有一定要求的、与衬底晶向相同的单晶层,犹如原来的晶体向外延伸了一段,为了制造高频大功率器件,需要减小集电极串联电阻,又要求材料能耐高压和大电流,因此需要在低阻值衬底上生长一层薄的高阻外延层。
    气相外延炉能够为单晶沉底实现功能化做基础准备,气相外延即化学气相沉积的一种特殊工艺,其生长薄层的晶体结构是单晶衬底的延续,而且与衬底的晶向保持对应的关系。
    3、 氧化炉
    硅与含有氧化物质的气体,例如水汽和氧气在高温下进行化学反应,而在硅片表面产生一层致密的二氧化硅薄膜,这是硅平面技术中一项重要的工艺。氧化炉的主要功能是为硅等半导体材料进行氧化处理,提供要求的氧化氛围,实现半导体预期设计的氧化处理过程,是半导体加工过程的不可缺少的一个环节。
    4、 磁控溅射台
    磁控溅射是物理气相沉积的一种,一般的溅射法可被用于制备半导体等材料,且具有设备简单、易于控制、镀膜面积大和附着力强等优点。在硅晶圆生产过程中,通过二极溅射中一个平行于靶表面的封闭磁场,和靶表面上形成的正交电磁场,把二次电子束缚在靶表面特定区域,实现高离子密度和高能量的电离,把靶原子或分子高速率溅射沉积在基片上形成薄膜。
    5、 化学机械抛光机
    一种进行化学机械研磨的机器,在硅晶圆制造中,随着制程技术的升级、导线与栅极尺寸的缩小,光刻技术对晶圆表面的平坦程度的要求越来越高,IBM公司于1985年发展CMOS产品引入,并在1990年成功应用于64MB的DRAM生产中,1995年以后,CMP技术得到了快速发展,大量应用于半导体产业。
    化学机械研磨亦称为化学机械抛光,其原理是化学腐蚀作用和机械去除作用相结合的加工技术,是目前机械加工中唯一可以实现表面全局平坦化的技术。在实际制造中,它主要的作用是通过机械研磨和化学液体溶解“腐蚀”的综合作用,对被研磨体(半导体)进行研磨抛光。
    6、 光刻机
    又名掩模对准曝光机、曝光系统、光刻系统等,常用的光刻机是掩膜对准光刻,一般的光刻工艺要经历硅片表面清洗烘干、涂底、旋涂光刻胶、软烘、对准曝光、后烘、显影、硬烘、刻蚀等工序。在硅片表面匀胶,然后将掩模版上的图形转移光刻胶上的过程将器件或电路结构临时“复制”到硅片上的过程。
    光刻机
    7、 离子注入机
    它是高压小型加速器中的一种,应用数量最多。它是由离子源得到所需要的离子,经过加速得到几百千电子伏能量的离子束流,用做半导体材料、大规模集成电路和器件的离子注入,还用于金属材料表面改性和制膜等 。
    在进行硅生产工艺里面,需要用到离子注入机对半导体表面附近区域进行掺杂,离子注入机是集成电路制造前工序中的关键设备,离子注入是对半导体表面附近区域进行掺杂的技术目的是改变半导体的载流子浓度和导电类型,离子注入与常规热掺杂工艺相比可对注入剂量角度和深度等方面进行精确的控制,克服了常规工艺的限制,降低了成本和功耗。
    8、 引线键合机
    它的主要作用是把半导体芯片上的Pad与管脚上的Pad,用导电金属线(金丝)链接起来。引线键合是一种使用细金属线,利用热、压力、超声波能量为使金属引线与基板焊盘紧密焊合,实现芯片与基板间的电气互连和芯片间的信息互通。在理想控制条件下,引线和基板间会发生电子共享或原子的相互扩散,从而使两种金属间实现原子量级上的键合。
    9、 晶圆划片机
    因为在制造硅晶圆的时候,往往是一整大片的晶圆,需要对它进行划片和处理,这时候晶圆划片机的价值就体现出了。之所以晶圆需要变换尺寸,是为了制作更复杂的集成电路。
    10、 晶圆减薄机
    在硅晶圆制造中,对晶片的尺寸精度、几何精度、表面洁净度以及表面微晶格结构提出很高要求,因此在几百道工艺流程中,不可采用较薄的晶片,只能采用一定厚度的晶片在工艺过程中传递、流片。晶圆减薄,是在制作集成电路中的晶圆体减小尺寸,为了制作更复杂的集成电路。在集成电路封装前,需要对晶片背面多余的基体材料去除一定的厚度,这一工艺需要的装备就是晶片减薄机。
    当然了,在实际的生产过程中,硅晶圆制造需要的设备远远不止这些。之所以光刻机的关注度超越了其它半导体设备,这是由于它的技术难度是最高的,目前仅有荷兰和美国等少数国家拥有核心技术。近年来,国内的企业不断取得突破,在光刻机技术上也取得了不错的成绩,前不久,国产首台超分辨光刻机被研制出来,一时间振奋了国人,随着中国自主研发的技术不断取得进步,未来中国自己生产的晶圆也将不断问世。

    下面本人附录国际上著名的半导体设备厂商、晶圆厂,在半导体行业是赢者全拿,国际前两名从业站拿下8层以上的市场份额。
    厂商

    从图中可以看出设备厂商前三名是:

    ASML(阿斯麦。荷兰——大股东是美国)
    apply material(应用材料。美国)
    tokyo electron(东京电子。日本)

    展开全文
  • 随着物联网(Internet of Everything /Internet of Things) 时代的到来,可供消费者选择的新型电子产品越来越多,穿戴式的智能设备就是其中之,它们正以惊人的速度普及。什么是穿戴式智能设备呢?顾名思义,就是...



     随着物联网(Internet of Everything /Internet of Things) 时代的到来,可供消费者选择的新型电子产品越来越多,穿戴式的智能设备就是其中之一,它们正以惊人的速度普及。什么是穿戴式智能设备呢?顾名思义,就是人们日常生活中可以穿戴在身上的设备,除了大名鼎鼎的Google Glass,更常见的还有健身记录器、智能手表等。

           这些穿戴式智能设备的作用,通常是记录身体的活动机能数据,或是显示其他设备输出的内容,两种用途还可以彼此交叉,让使用者的生活更加丰富多彩。在接下来的上下两篇文章中,我们就来探讨一下穿戴式智能设备上可能存在的攻击和风险,但请注意,这些只是理论或概念上的推测,并非已经发生的事实,因此这些危险在未来是否发生还是一个未知数,要看未来电子产品市场将如何演变,也要看不法分子是否有其他更加有利可图的目标。我们的目的并不是吓唬使用者,使他们避开这些新产品,而是鼓励厂商从一开始就把安全性融入到产品当中。


    穿戴式智能设备的三大类型

    1、输入型:

           这类设备无时不刻都在记录使用者的个人资料,比如健身记录器,它会帮使用者记录步伐、距离、能量消耗、卡路里、心跳、GPS 定位等。这类设备通常会先将资料储存在设备上,然后再上传到手机或 PC,最后同步到使用者的云端帐号以保留历史记录和显示统计图表。按照这种趋势,未来还会出现一些可以监控健康状况 (如体温、血氧浓度等等) 的医疗设备。

     

    2、输出型:

           这类设备接收其他设备 (如手机) 输出的资料,最典型的就是智能手表。这些设备可以显示文字、运行程序来提升便利性,它们显示的资料通常来自网络,并且通过中介设备(手机便是一种)传递。

     

    3、输入输出型:

           这些设备运转的方式是获取资料——过滤资料——显示资料,例如Google Glass 就是,它有摄影机可以获取现实世界的影像,也可以将一些资料投射到使用者的视线当中。这些设备可以为现实世界增添一些额外信息,让使用者的日常生活体验更棒。除了Google Glass,也有一些稍微简单的设备也能担任“输入兼输出”的工作,既可获得使用者资料 (如步伐、距离等等) 又可显示来自配对手机的内容。

           我们目前可以这样为穿戴式智能设备大致分类,但它们的整体趋势却是朝“输入输出整合”的方向发展,因为厂商都希望提供更多的价值,例如让健身记录器也可以有短信功能、地图功能或者可以接收其他信息。

    从信息安全角度看穿戴式智能设备

           从信息安全的角度来看,我们很难说哪一类设备比另一类安全。这是因为如果黑客想攻击它们,区别也只是在攻击的途径上会有不同而已。一个设备的功能越多,遭到攻击的可能性就越大。就这点来看,“输入输出型”设备的目标最大,最可能遭到攻击。不过,也不能说它们一定就不安全,因为安全性取决于设备的设计和“过去的表现”。所谓“过去的表现”是指它过去曾经承受多少次的攻击而安然无恙。就新推出的设备来说,黑客可能需要较多的时间来试探它们。不过,随着时间发展,设备将更加成熟,而黑客也将完全掌握这些设备的内部运作原理,那时这种设备也就不再像过去那么安全了。

     

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

    万次阅读 多人点赞 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
    展开全文
  •  内核维护着个以主设备号为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驱动开发 主设备号与次设备

    千次阅读 2014-02-20 13:57:51
    个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设 备号。主设备号用来表示个特定的驱动程序。次设备号用来表示使用该驱动程序的各 设备。例如个嵌入式系统,两个LED指示灯,...
  • 在南方某出租车GPS数据记录表(表明为v)中,表结构如下: ...根据要求,要对这个数据表(天表)查询,查询出所有的车辆在某个时间前最后一次出现的记录,这样可以在地图上显示所有车辆当前的位置。 因此用以下SQL
  • 摘要:本文主要是针对通过路由器wan口连接校园网(web认证)登陆个账号,多个...OpenWrt是适合于嵌入式设备个Linux发行版。 相对原厂固件而言,OpenWrt不是个单一、静态的固件,而是提供了个可添加软件包...
  • Linux:主设备号和次设备

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

    千次阅读 多人点赞 2013-04-26 11:13:12
    、引言  最近成都地震令大家心神不宁,可能过了今天就没明天了,导致早打算写的东西现在才发出来。不禁感叹:在自然灾害面前,人是那么渺小,人面对自然灾害就好像脚下的蚂蚁面对人,人不经意间就能踩死一片蚂蚁...
  • 在linux设备驱动第篇:设备驱动程序简介中简单介绍了字符驱动,本篇简单介绍如何写个简单的字符设备驱动。本篇借鉴LDD中的源码,实现个与硬件设备无关的字符设备驱动,仅仅操作从...1、主设备号和次设备号 对于
  • 问题:进入设备管理器,发现【通用串行总线控制器】下有一项带黄色【!】未知USB设备设备描述符请求失败)。 或者 解决方法如下: 1、点击Windows键 +R或者(点击系统桌面左下角【开始】,在开始...
  • 、字符设备基础知识 1、设备驱动分类  linux系统将设备分为3类:...字符设备是面向流的设备,常见的字符设备有鼠标、键盘、串口、控制台和LED设备等。 块设备:是指可以从设备的任意位置读取一定长度数据的设备。块
  • 部手机登录多个抖音号会什么后果? 这是做抖音的新手经常会问的问题! 那么今天我们就简单说一下! 首先需要说的是,在某些方面抖音的规则是要比今日头条的规则严格的多!如果你以前做过今日头条等自媒体平台...
  • 请在其他程序执行完后再试一次。 1、 打开“控件面板”中的“电话/调制解调器选项”, 在“调制解调器”选项卡中一个连接占用着这个串口(COM1), 于是删除这个连接。 再用“超级终端”测试串口(COM1),不...
  • 当在宿主机上插入个USB设备的时候,通过设置,可以在vmware的虚拟机系统里边能访问到这个USB设备, 而且访问这个USB设备,就跟真的把这个USB设备插入到这个虚拟系统中一样,跟真实的几乎没任何区别。 再看种情况...
  • 本文转载于:http://blog.csdn.net/supenman_mwg/article/details/8023861cd /devls -l |grep 设备名 //显示主设备号和次设备号cat /proc/devices //只显示主设备号
  • 设备设备节点和设备驱动详解

    千次阅读 多人点赞 2018-09-28 12:44:03
    1.设备 Linux下的设备通常分为三类,字符设备,块设备和网络设备。...在Linux里个网络设备也可以叫做个网络接口,如eth0,应用程序是通过Socket而不是设备节点来访问网络设备,在系统里根本就不存在网络...
  • 电池寿命:Wi-Fi设备公司Edgewater最近支持在Kroger商店内部署物联网,而Edgewater首席执行官AndrewSkafel表示,电池使用寿命是最重要的设计因素之。他指出,在杂货店里,数百个传感器监控食物冷藏状态,“因此...
  • 早期的Teamviewer不需要登陆账号,新版的...而可信设备会算在上面设备数量限制内的,因此建议如果不是经常使用的设备请添加信任的时候选择:不,仅使用一次。 如果已经受到限制了怎么解决呢? 解决方案一:方案一如
  • Linux设备驱动程序和设备文件

    千次阅读 2018-01-14 18:25:10
    驱动程序层的存在助于内核合理地保持设备独立性。 在大多数情况下,设备驱动程序是内核的组成部分,它们不是用户进程。不过,个驱动程序可以从内核里,也可以从用户空间进行访问。对设备的用户级访问往往要通过...
  • linux设备驱动(

    万次阅读 2020-01-08 15:47:24
    文章目录基本概念什么是设备驱动无操作系统下的驱动操作系统下的驱动linux设备分类字符设备设备网络设备内核的组成源码目录结构内核主要组成部分进程调度SCHED内存管理MM虚拟文件系统VFS网络接口NET进程间通信...
  • 、什么是Linux设备文件系统  首先我们不看定义,定义总是太抽象很难理解,我们先看现象。当我们往开发板上移植了个新的文件系统之后(假如各种设备驱动也移植好了),启动开发板,我们用串口工具进入开发板,...
  • Linux设备驱动--块设备)之概念和框架

    万次阅读 多人点赞 2012-01-20 17:01:19
    --- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。 字符设备(Character device) ---是一...
  • Android adb连接设备时出现 同设备 好多offline的解决办法: 打开windows的任务管理器 ,看是否好多adb进程在执行,如果的话就就结束那些adb进程,之后再执行 adb devices 命令 就好了。。。。
  • 在Linux里个网络设备也可以叫做个网络接口,如eth0,应用程序是通过Socket而不是设备节点来访问网络设备,在系统里根本就不存在网络设备节点。网络接口没有像字符设备和块设备一样的设备号,只有个唯一的名字...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 953,439
精华内容 381,375
关键字:

一次设备包括哪些